我正在使用Apache PDFBox(版本:2.0.8)从我的.jspx页面生成PDF文档。
在我的.jspx页面表单中,有很多字段,所以我决定将所有字段排列为2列布局。所以,我需要建议使用PDFbox实现布局。
//我用于生成PDF的示例代码段如下所示。
PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDFont font = getFontDef();
PDPageContentStream contentStream =new PDPageContentStream(document, page);
contentStream.beginText();
contentStream.showText("Name: " );
contentStream.setFont(getFontDef().COURIER ,15);
contentStream.showText ("Rajeev");
contentStream.showText("Address: " +"BNG");
contentStream.newLine();
contentStream.showText("State: " +"KAR");
contentStream.showText("Country: " +"INDIA");
contentStream.endText();
contentStream.close();
我需要以粗体显示标签(即姓名,地址,州和国家)和价值(即分别为Rajeev,BNG,KAR,IND)作为普通字体。
为了获得标签的粗体字体,我尝试了如下所示
contentStream.setFont(getFontDef().COURIER ,15);
它正在工作,但我必须在每个标签字段之前添加上面的行。是否有更好的方法可以用来为所有标签设置加粗字体?
我在将这些表单字段与两列布局对齐时也遇到了一些问题。前
姓名: Rajeev 地址: BNG
状态: KAR 国家/地区: IND
即。第一行中的名称和地址,名称应位于第一列,地址应位于第二列。同样,第二栏中的国家和国家以及第一栏和国家的国家位于第二栏。
答案 0 :(得分:1)
要在列中排列文字,您可以使用newLineAtOffset
水平移动,而不是垂直移动。
要在粗体和普通类型面之间来回切换,通常需要反复设置和重置字体。或者,您可以先绘制所有粗体文本,然后绘制所有普通文本(或反过来),但是您必须使用更多newLineAtOffset
次调用才能跳转。此外,当您尝试选择和复制文本时,某些PDF查看器可能会跟随您的跳转。
PDFont fontNormal = PDType1Font.HELVETICA;
PDFont fontBold = PDType1Font.HELVETICA_BOLD;
PDPageContentStream contentStream =new PDPageContentStream(document, page);
contentStream.beginText();
contentStream.newLineAtOffset(100, 600);
contentStream.setFont(fontBold, 15);
contentStream.showText("Name: ");
contentStream.setFont(fontNormal, 15);
contentStream.showText ("Rajeev");
contentStream.newLineAtOffset(200, 00);
contentStream.setFont(fontBold, 15);
contentStream.showText("Address: " );
contentStream.setFont(fontNormal, 15);
contentStream.showText ("BNG");
contentStream.newLineAtOffset(-200, -20);
contentStream.setFont(fontBold, 15);
contentStream.showText("State: " );
contentStream.setFont(fontNormal, 15);
contentStream.showText ("KAR");
contentStream.newLineAtOffset(200, 00);
contentStream.setFont(fontBold, 15);
contentStream.showText("Country: " );
contentStream.setFont(fontNormal, 15);
contentStream.showText ("INDIA");
contentStream.endText();
contentStream.close();
(ArrangeText test testArrangeTextForUser2967784
)
我不知道你的方法getFontDef()
会返回什么,所以我在这里为粗体和普通文本选择了固定字体。
结果: