在您的代码中,您已经选择了第一行开始的位置,如下所示:
contentStream.newLineAtOffset(175, 670);
关于你的问题
如何处理位于不同位置的文本
因此:你只需使用newLineAtOffset
again!
但你必须意识到,newLineAtOffset(x, y)
does not将新行开始设置为absolute坐标x, y
但反而adds这些值to的坐标上一行开始,因此AtOffset
在方法名称中。
As the 上一行开始坐标重置为0, 0
在文本对象的开头(contentStream.beginText()
),你的第一个newLineAtOffset
在文本对象中appears使用绝对坐标。
因此,如果您更喜欢使用绝对坐标,则每次需要以不同方式移动行起点时,都可以启动一个新的文本对象contentStream.newLine()
does.
但是,如果您可以使用相对坐标,则不需要经常启动新的文本对象,而是使用从行开始到行开始的偏移量newLineAtOffset
, e.g.:
try (PDDocument document = new PDDocument()) {
PDPage page = new PDPage();
document.addPage(page);
PDFont font = PDType1Font.HELVETICA;
String text = "Text 1";
String text1 = "Text 2";
String text2 = "Text 3";
String text3 = "Text 4";
String text4 = "Text 5";
String text5 = "Text 6";
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
contentStream.beginText();
contentStream.newLineAtOffset(175, 670);
contentStream.setFont(font, 12);
contentStream.setLeading(15);
contentStream.showText(text);
contentStream.newLine();
contentStream.showText(text1);
contentStream.newLineAtOffset(225, 10);
contentStream.setFont(font, 15);
contentStream.showText(text2);
contentStream.newLineAtOffset(-390, -175);
contentStream.setFont(font, 13.5f);
contentStream.setLeading(17);
contentStream.showText(text3);
contentStream.newLine();
contentStream.showText(text5);
contentStream.newLineAtOffset(300, 13.5f);
contentStream.showText(text4);
contentStream.endText();
contentStream.moveTo(0, 520);
contentStream.lineTo(612, 520);
contentStream.stroke();
}
document.save(TARGET_FILE);
}
(排列文本 https://github.com/mkl-public/testarea-pdfbox2/blob/master/src/test/java/mkl/testarea/pdfbox2/content/ArrangeText.java#L36 test testArrangeTextForTeamotea
)
这导致
这反过来又近似你的图像。 (我没有计算图像中的像素,所以这只是一个近似值。)