PDFBox:如何在当前页面已满后创建新页面和定位文本
PDFBox: How to create a new page and position text after the current page is full
//for writing filenames
PDDocument doc = PDDocument.load(this.getClass().getResourceAsStream("/Vorlagen/Analyze/ReportTemplate.pdf"));
PDPage curFileNamePage = new PDPage(PDRectangle.A4);
doc.addPage(curFileNamePage);
contentStream = new PDPageContentStream(doc, curFileNamePage, PDPageContentStream.AppendMode.APPEND, true, true);
contentStream.setFont(pdfFont, 12);
contentStream.beginText();
float curYVal = 650f;
contentStream.newLineAtOffset(20, curYVal);
for (int idx = 0; idx < 377; idx++) {
if (curYVal - 15f > 0) {
curYVal = curYVal - 15f;
contentStream.newLineAtOffset(0, curYVal);
contentStream.showText("" + idx);
} else {
contentStream.endText();
contentStream.close(); // close writing area
curFileNamePage = new PDPage(PDRectangle.A4);
doc.addPage(curFileNamePage);
contentStream = new PDPageContentStream(doc, curFileNamePage, PDPageContentStream.AppendMode.APPEND, true, true);
contentStream.setFont(pdfFont, 12);
contentStream.beginText();
curYVal = 650f;
contentStream.newLineAtOffset(0, curYVal);
contentStream.showText("" + idx);
}
}
contentStream.endText();
contentStream.close(); // close writing area
doc.save("C:\Users\noname\Desktop\765.pdf");//Saving the document
doc.close();
所以我有很多索引(在本例中为 377)。我的目标是创建一个 pdf,其中索引一个接一个地打印出来。 (在这种情况下,它应该沿着 y 轴向下移动 15f)。如果到达页面末尾,它应该创建一个新页面并从头开始。
现在正如您猜测的那样,代码没有按预期运行。在我执行代码后,pdf 文件被创建为 9 页,但有趣的是每页只包含一个数字(第一页除外)。人数是:43,87,131,175,219,263,307,351
.
我做错了什么?
输出应该是这样的:
这是我当前的输出:
改变第一个(不是第二个)
contentStream.newLineAtOffset(0, curYVal);
至
contentStream.newLineAtOffset(0, -15f);
因为这是一个相对位置。因此,大值仅在文本段中第一次有意义(当它相对于 0,0 时)。第一次定位后,减去偏移量即可。
//for writing filenames
PDDocument doc = PDDocument.load(this.getClass().getResourceAsStream("/Vorlagen/Analyze/ReportTemplate.pdf"));
PDPage curFileNamePage = new PDPage(PDRectangle.A4);
doc.addPage(curFileNamePage);
contentStream = new PDPageContentStream(doc, curFileNamePage, PDPageContentStream.AppendMode.APPEND, true, true);
contentStream.setFont(pdfFont, 12);
contentStream.beginText();
float curYVal = 650f;
contentStream.newLineAtOffset(20, curYVal);
for (int idx = 0; idx < 377; idx++) {
if (curYVal - 15f > 0) {
curYVal = curYVal - 15f;
contentStream.newLineAtOffset(0, curYVal);
contentStream.showText("" + idx);
} else {
contentStream.endText();
contentStream.close(); // close writing area
curFileNamePage = new PDPage(PDRectangle.A4);
doc.addPage(curFileNamePage);
contentStream = new PDPageContentStream(doc, curFileNamePage, PDPageContentStream.AppendMode.APPEND, true, true);
contentStream.setFont(pdfFont, 12);
contentStream.beginText();
curYVal = 650f;
contentStream.newLineAtOffset(0, curYVal);
contentStream.showText("" + idx);
}
}
contentStream.endText();
contentStream.close(); // close writing area
doc.save("C:\Users\noname\Desktop\765.pdf");//Saving the document
doc.close();
所以我有很多索引(在本例中为 377)。我的目标是创建一个 pdf,其中索引一个接一个地打印出来。 (在这种情况下,它应该沿着 y 轴向下移动 15f)。如果到达页面末尾,它应该创建一个新页面并从头开始。
现在正如您猜测的那样,代码没有按预期运行。在我执行代码后,pdf 文件被创建为 9 页,但有趣的是每页只包含一个数字(第一页除外)。人数是:43,87,131,175,219,263,307,351
.
我做错了什么?
输出应该是这样的:
这是我当前的输出:
改变第一个(不是第二个)
contentStream.newLineAtOffset(0, curYVal);
至
contentStream.newLineAtOffset(0, -15f);
因为这是一个相对位置。因此,大值仅在文本段中第一次有意义(当它相对于 0,0 时)。第一次定位后,减去偏移量即可。