Я использую Java для вывода вывода на PDDocument
, а затем добавляет этот документ к существующему, прежде чем отправлять его клиенту.Как вы отслеживаете местоположение вывода PDPageContentStream?
Большая часть работы хорошо работает. У меня есть небольшая проблема, пытающаяся справиться с переполнением содержимого при записи на PDDocument
. Я хочу отслеживать, где текст вставляется в документ, так что, когда «курсор», так сказать, пройдет мимо определенной точки, я создам новую страницу, добавлю ее в документ, создаю новый поток контента , и продолжаются как обычно.
Вот код, который показывает, что я хотел бы сделать:
// big try block
PDDocument doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
PDPageContentStream content = new PDPageContentStream(doc, page);
int fontSize = 12;
content.beginText();
content.setFont(...);
content.moveTextPositionByAmount(margin, pageHeight-margin);
for (each element in a collection of values) {
content.moveTextPositionByAmount(0, -fontSize); // only moves down in document
// at this point, check if past the end of page, if so add a new page
if (content.getTextYPosition(...) < margin) { // wishful thinking, doesn't exist
content.endText();
content.close();
page = new PDPage();
doc.addPage(page);
content = new PDPageContentStream(doc, page);
content.beginText();
content.setFont(...);
content.moveTextPositionByAmount(margin, pageHeight-(margin+fontSize));
}
content.drawString(...);
}
content.endText();
content.close();
Важный бит является content.getTextYPosition()
. Это на самом деле не существует, но я уверен, что PDPageContentStream
должен отслеживать аналогичное значение. Есть ли способ получить доступ к этой ценности?
Спасибо.
* Я уверен, что PDPageContentStream должен отслеживать аналогичное значение * - это не так. – mkl
Как он не может отслеживать это где-то? Как бы он помнил, где продолжить вывод текста? –
'PDPageContentStream' не нужно помнить: все, что он делает в этом контексте, - это написать команды, которые вы передаете в поток в PDF. Интерпретация этих команд выполняется программой просмотра PDF. Таким образом, только просмотрщик PDF должен отслеживать его, а не PDFBox. – mkl