Я добавил новые тексты в выходящий PDF-файл, но шрифты и местоположения ушли. Место должно быть 100, 500 с кодами тестирования. Но он появляется примерно в 10:50 с чрезвычайно маленьким шрифтом вместо 12.PDFBox: проблемы с шрифтами и тексты добавленных текстов
Я проверил внутреннюю структуру pdf с iText Rup и обнаружил, что медиабакс pdf имеет (0,0612,792). Однако существующие потоки показывают очень странные координаты, например:
0.12 0 0 0.12 0 0 cm
BT
/F1 70 Tf
0 6600 Td
3001 -6274 Td
0 Tw
(© All rights reserved.) Tj
ET
BT
/F1 70 Tf
0 6600 Td
2365 -6274 Td
0 Tw
(Page 1 of 4) Tj
ET
BT
/F1 70 Tf
0 6600 Td
180 -6274 Td
0 Tw
Похоже, что размер шрифта в потоке 70, что не так (размер шрифта должен быть около 7). И координаты, такие как 6600, намного выше медианного. Я бы предположил, что это может привести к тому, что вновь добавленные тексты появятся в неправильных местах и меньших шрифтах.
Знаете ли вы, есть ли способы настроить размер и расположение шрифта так, чтобы они отображались в правильных местах и размере шрифта?
Любая помощь очень ценится.
Вот коды тестирования:
PDDocument document = PDDocument.load(new File(file));
PDFont font = PDType1Font.HELVETICA_BOLD;
List<PDPage> pages = document.getDocumentCatalog().getAllPages();
PDPage page = pages.get(0);
PDPageContentStream contentStream = new PDPageContentStream(document, page, true, false);
contentStream.setFont(font, 12);
contentStream.beginText();
contentStream.moveTextPositionByAmount(100, 500);
contentStream.drawString("hello, this is a test");
contentStream.endText();
contentStream.close();
document.save("c:/temp/test.pdf");
document.close();
спасибо много для такой быстрой реакции, Jongware. Есть ли в PDFBox утилиты для получения этой матрицы преобразования? Еще раз спасибо. – user2254613
@ user2254613: Введя его в Google, я получил [ссылку для PDGraphicsState] (http://pdfbox.apache.org/docs/1.8.3/javadocs/org/apache/pdfbox/pdmodel/graphics/PDGraphicsState.html) как первый хит: используйте getCurrentTransformationMatrix. – usr2564301
@ user2254613 Чтобы использовать «PDGraphicsState», вам необходимо проанализировать поток (-ы) контента. Если вам это еще не нужно, тем проще будет конвертировать существующий контент с помощью ** q ** и ** Q **. – mkl