Как открыть pdf, созданный через reportlab, кириллический?
Создаётся пдф документ с русским текстом через reportlab. Все это делается в DRF. По запросу с клиента необходимо считывать данные из pdf и отправлять на клиент. Русская кириллица не распознаётся при передаче информации. Как можно правильно считать информацию ? Пробовал разные кодировки, не помогает
smir11, по вопросу было "при передаче", а теперь про чтение.
Не пишу на питоне, но могу предположить, что бинарный файл в нем, как и в других языках, читается немножко иначе, чем текстовый, и кодировки тут просто ни при чем.
«Пользователь удалён», pdf создавал в reportlab, шрифт указал times New Roman, сам пдф создаётся нормально.
Далее я его считываю через with open() , в этом моменте возникает проблема с русским текстом. Я не могу нормально считать русские слова из файла пдф.
Я ничего не путаю
«Пользователь удалён», для создания PDF брал TimesNewRoman в reportlab. Сейчас поищу другой шрифт, который поддерживает кириллицу. Open достаточно при чтении с rb.
При шрифте TimesNewRoman, он может выводить англ слова и цифры все. Но кириллицу нет.
Условно на английском "Data" он выведет, а "Дата" уже нет
«Пользователь удалён», Смотри, я скачал 3 шрифта в ttf. Явно зарегестрировал их. Сами pdf на компьютере отображаются правильно, с русскими словами. Затем мне нужно передать этот pdf на клиент - как передаю я уже скидывал, вот код загрузки на клиента:
axios.post(`${process.env.REACT_APP_SERVER}/getPdf/`, { DATA})
.then(res => {
// console.log(res.data);
let url = window.URL.createObjectURL(new Blob([res.data], { type: "text/plain" }));
let link = document.createElement("a");
link.href = url;
link.setAttribute("download", `${1}_${2}_${3}.pdf`);
document.body.appendChild(link);
link.click();
})
«Пользователь удалён», ВООБЩЕМ получилось для этого нужно было сделать следующее:
with open(f"{os.environ['PATH_TO_FILE']}{request.data['1']}_{request.data['2']}_{request.data['3']}.pdf", 'rb') as pdf:
encoded = base64.b64encode(pdf.read())
Это в питоне, бинарное представление перенести в base64
НА фронтенде необходимо было сделать следующее:
axios.post(`${process.env.REACT_APP_SERVER}/getPdf/`, { DATA})
.then(res => {
let link = document.createElement("a");
link.href = 'data:application/pdf;base64,' + res.data;
link.setAttribute("download", `${1}_${2}_${3}.pdf`);
document.body.appendChild(link);
link.click();
})
Теперь все работает приемлемо , русские слова прописываются, пдф загружается в загрузки.