Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 04.02.2019
Сообщений: 7

Как сохранить объект Blob в кодировке ANSI?

04.02.2019, 10:14. Показов 4822. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, суть проблемы в следующем: есть PHP -скрипт, генерирующий PDF-документ при помощи библиотеки FPDF по POST-запросу через AJAX. Содержимое документа, то есть то, что должно выводиться в pdf-файл, во front-end возвращается в виде строки. Код post-запроса выглядит так:
JavaScript
1
2
3
4
5
6
7
8
9
10
$.post('get_doc.php', {'data' : data}, function (result) {
var bpdf = new Blob([result], {type: 'application/pdf;charset=cp367'});
burl = URL.createObjectURL(bpdf);
 
ba = document.createElement('a');
ba.href = burl;
ba.download = 'doc.pdf';
document.body.appendChild(ba);
ba.click ();
}, '');
Отпрвка запроса происходит при клике по кнопке, в ответ приходит строка, на странице появляется окно для открытия/сохранения файла. После открытия, либо сохранения и последующего открытия документа он имеет необходимое количество страниц, но все они пустые. При сохранении такого документа на диск и его последующем открытии как текстового файла в Notepad++, обнаружил, что он сохранён в кодировке UTF-8, в то время как другие pdf-файлы (скачанные из сети или сгенерированные той же билиотекой, но в других проектах и сохраняемые на диск на строне бек-энда, а не отправляемые во фронт-энд) сохраняются в кодировке ANSI. Мой вопрос в том, как на стороне js сделать так, чтобы объект Blob сохранялся в кодировке ANSI, не преобразовываясь в UTF-8?

(Вариант с сохранением pdf-файла на стороне бек-энда и генерации ссылки на него для открытия не подходит.)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.02.2019, 10:14
Ответы с готовыми решениями:

Как сохранить html-страницу в кодировке ANSI (сохраняет только в UTF-8)?
Добрый день! Нужно сохранить страницу в файл в кодировке ANSI. Если открыть страницу в webbrowser, то сохраняется в ANSI: ...

Как создать файл в кодировке ANSI
Как создать файл в кодировке ANSI ? Не нужно задавать свои вопросы в чужих темах

Как открывать файлы в кодировке ANSI
Открываю так txt файл: using System.IO; StreamReader streamReader = new...

3
Эксперт JSЭксперт HTML/CSS
2151 / 1496 / 651
Регистрация: 16.04.2016
Сообщений: 3,696
04.02.2019, 16:03
не передайте ответ как DOMString - он всегда в UTF-8(если точнее UTF-16), преобразуйте в ArrayBuffer
JavaScript
1
{type: 'arraybuffer'}
или Blob
JavaScript
1
{type: 'blob'}
Можно также почистить за собой, createObjectURL() - статический метод, время жизни экземпляра DOMString, созданного им, напрямую будет зависеть от существования документа. Если документ кешируется, то оба просуществуют до очистки кеша. Не надо так

JavaScript
1
setTimeout(() => window.URL.revokeObjectURL(data), 100);
...
0
0 / 0 / 0
Регистрация: 04.02.2019
Сообщений: 7
05.02.2019, 12:07  [ТС]
Благодарю Вас за ответ, обязательно попробую Ваш вариант. В итоге вчера реализовал всё через создание формы и её отправку методом POST в новой вкладке (на стороне сервера в функции вывода документа вместо его вывода в виде строки указал вывод в окно броузера):
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var form = document.createElement('form');
            form.setAttribute('id', 'pdf_gen_form');
            form.setAttribute('method', 'post');
            form.setAttribute('action', self.get_settings().url);
            form.setAttribute('target', '_blank');
                    // создаём поля формы, перебирая массив, данные из которого необходимо отправить на сервер для генерации документа (на сервер данные отправляются в виде массива с именем data)
            for(var key in data) {
                
                var hiddenField = document.createElement('input');
            hiddenField.setAttribute('type', 'hidden');
            hiddenField.setAttribute('name', 'data[' + key + ']');
            hiddenField.setAttribute('value', data[key]);
            form.appendChild(hiddenField);
                
            }
            document.body.appendChild(form);
            form = document.getElementById('pdf_gen_form');
            form.submit();
0
05.02.2019, 12:27

Не по теме:

inob, не за что, удачи )

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.02.2019, 12:27
Помогаю со студенческими работами здесь

Как правильно считать/записать файл в ANSI кодировке?
Есть текстовой файл с ANSI кодировкой, английскими и русскими словами. Хочу в консольном приложении считать каждую 5-ю строку из этого...

Файл в кодировке ANSI
Лазарус работает с UFT8 и файлы, которые сохраняются через TStringList или TextFile так же имеют кодировку UTF8. Необходимо: ...

Чтение файлов в кодировке ANSI
Собственно, файл в родной кодировке не воспринимается, приходиться конвертировать кодировку в UTF-8, что не очень удобно. Можно как-то...

Как сохранить текст в Blob?
Здравствуйте. Нужно создать электронная книга с помощью Делфи 7 (это тема курсовая работа). Как можно сохранить данные в таблицу. Мне...

считать посимвольно txt файл в ANSi кодировке
Всем привет! Понимаю, что наверное вопрос о считывании посимвольно txt файлов уже обсуждался и не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru