Мне нужна помощь. Я хочу заменить текст другим в файле PDF (я использую библиотеку iText), но когда я пытаюсь сделать это с помощью букв с акцентом, у него есть проблемы с кодировкой.Как заменить текст в PDF на iText без проблемы с кодировкой? (Android)
public static void manipulatePdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
PdfDictionary dict = reader.getPageN(1);
PdfObject object = dict.getDirectObject(PdfName.CONTENTS);
if (object instanceof PRStream) {
PRStream stream = (PRStream) object;
byte[] data = PdfReader.getStreamBytes(stream);
String eredeti = "öüóá";
final String s = new String(eredeti.getBytes(), BaseFont.CP1250);
stream.setData(new String(data).replace("Hello World", s).getBytes());
}
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();
reader.close();
}
Но когда я открываю файл PDF, я вижу это: Wrong PDF
Я уже пробовал все типы кодирования, чтобы получить правильные буквы (öüóá), но он никогда не работал для меня.
Кто-нибудь знает, что мне делать?
вы используя юникод шрифт? – SML
Словарь страниц, который вы получаете с 'getPageN()', имеет запись '/ Resources'. Эта запись содержит ссылки на шрифт. Если это простой шрифт, он определяет не более 256 символов. Вполне возможно, что вам не нужны персонажи. Если это сложный шрифт, он скорее всего будет содержать подмножество символов, которые уже используются в документе. Вам не нужны персонажи. В общем, это плохой вопрос. Код, который вы используете, не должен использоваться. Проблема, которую вы пытаетесь решить, задокументирована как «не пытайтесь это сделать». –
Ákos, есть не только возможные проблемы, намеченные @Bruno (символы, отсутствующие в шрифте) и, очевидно, проблемы с кодировкой, также очень опасно обрабатывать поток контента, как если бы это была символьная строка с одной кодировкой: если вы знаете, что делаете, и соответствующим образом обработали ваши входы, у вас есть хороший шанс сделать контент потока недействительным. У PDFBox обычно был пример с подобными примерами, и по всем причинам, упомянутым выше, они удалили его из своего дистрибутива и теперь предупреждают о том, чтобы делать что-то подобное. – mkl