所以基本上我已经在特定位置生成pdf时创建了一个文本。
但现在我的问题是,如何处理位于不同位置的文本
预期生成的PDF:
contentStream.setLeading(15);
contentStream.newLineAtOffset(175, 670);
String text = "Text 1";
String text1 = "Text 2";
String text2 = "Text 3";
String text3 = "Text 4";
String text4 = "Text 5";
contentStream.showText(text);
contentStream.newLine();
contentStream.showText(text1);
contentStream.newLine();
contentStream.showText(text2);
contentStream.newLine();
contentStream.showText(text3);
contentStream.newLine();
contentStream.showText(text4);
contentStream.newLine();
contentStream.showText(text5);
答案 0 :(得分:3)
在您的代码中,您已经选择了第一行开头的位置,如下所示:
contentStream.newLineAtOffset(175, 670);
关于你的问题
如何处理位于不同位置的文本
因此:您只需再次使用newLineAtOffset
!
您必须注意,newLineAtOffset(x, y)
不将新行开头设置为绝对坐标x, y
,而是< em> 这些值 上一行开始的坐标,因此方法名称中的AtOffset
。
当上一行开始坐标在文本对象(0, 0
)的开头重置为contentStream.beginText()
时,文本对象中的第一个newLineAtOffset
出现以使用绝对坐标。
因此,如果您更喜欢使用绝对坐标,则每次需要以不同于contentStream.newLine()
的方式移动线条时,都可以启动新的文本对象。
如果你对相对坐标没问题,你不需要经常启动新的文本对象,而是使用newLineAtOffset
中从行开始到行开始的偏移,例如:
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);
}
(ArrangeText test testArrangeTextForTeamotea
)
导致
反过来接近你的形象。 (我没有计算图像中的像素,所以这只是近似值。)