я пытаюсь изменить PDF с помощью этого метода (первый блок кода - с помощью PDFStreamParser и переборе PDFOperator, то обновление COSString при необходимости):Java PDFBox - Чтение и изменение PDF со специальными символами (диакритические)
http://www.coderanch.com/t/556009/open-source/PdfBox-Replace-String-double-pdf
У меня возникли проблемы с некоторыми UTF-8 символов (диакритические): «?», когда я печатаю текст, который я хочу, чтобы обновить его показать, как «?? Societ II Na ionale» (где код типа 0002 или 0004).
Забавные вещи:
- , когда я пишу обновленный файл PDF, персонажи шоу правильно (даже если я could't обнаружены и заменить их)
- если я пытаюсь лишить текст используя getText()) PDFTextStripper, текст отлично извлекается.
- Я попробовал 2 версии pdfbox: 1.5.0 (что ведет себя так, как описано выше) и 1.8.1 (где окончательный, написанный, pdf-файл не отображает специальные символы правильно, и в документе появляются «нулевые» строки)
Что я могу сделать (настроить) для классов, используемых для обновления pdf (или, по крайней мере, попробовать ...), чтобы все символы UTF-8 отображались правильно?
EDIT:
Скриншот:
EDIT 2:
Я искал через исходный pdfbox код в PDFTextStripper и его суперкласса, и я узнал, как был извлечен текст:
В начале технологического процесса мы имеем
graphicsState = new PDGraphicsState(aPage.findCropBox());
при зачистке текст в processEncodedText, экземпляр класса PDFont используется следующим образом:
final PDFont font = graphicsState.getTextState().getFont();
и текст извлекается из байта [] с:
String c = font.encode(string, i, codeLength);
Новая проблема заключается в том, что когда я создаю класс PDFont с теми же двумя строками кода, я получаю «нулевой» класс шрифтов, и поэтому я не могу использовать метод .encode (...). Исходный код для этих классов здесь: http://grepcode.com/file/repo1.maven.org/maven2/org.apache.pdfbox/pdfbox/1.5.0/org/apache/pdfbox/util/PDFStreamEngine.java и http://grepcode.com/file/repo1.maven.org/maven2/org.apache.pdfbox/pdfbox/1.5.0/org/apache/pdfbox/util/PDFTextStripper.java
Я рою теперь больше ...
давайте возьмем каждый за раз. Поэтому, когда вы печатаете текст, содержащий некоторые диакритики, он отображается с помощью ??? или некоторые цифры вместо этого? Можете ли вы привести пример своих заявлений на печать, а также некоторые результаты? – Eugene
Код замены строки, который вы нашли [здесь, на coderanch] (http: //www.coderanch.com/t/556009/open-source/PdfBox-Replace-String-double-pdf) вряд ли работает: 1. Кодирование строк в содержимом PDF-страниц полностью зависит от соответствующего шрифта; ваш код предполагает стандартную кодировку. 2. Буквы одного слова (или заполнителя в данном случае) могут распространяться на несколько строк в потоке контента; ваш код не найдет таких разделенных заполнителей. 3. Шрифты могут быть частично встроены в PDF; если ваша строка замены использует символы, которые не используются иным образом, они не будут отображаться. ... – mkl
@Eugene: текст отображается правильно, за исключением диакритических знаков, которые отображаются как квадраты с 4 цифрами (два сверху - например, 00, два внизу, например, 02). Я не могу вырезать/вставлять вывод в браузер (потому что они будут отображаться как пробелы), но я приложу скриншот с выходом в консоли Eclipse. –