Java iText:PDF生成。一个模板。更多的投入。一个输出
我尝试用itext生成pdf。首先,我读入一个现有模板,并在方法Java iText:PDF生成。一个模板。更多的投入。一个输出,java,pdf,itext,Java,Pdf,Itext,我尝试用itext生成pdf。首先,我读入一个现有模板,并在方法stampFormular(Formular Formular,PdfStamper stamper)中标记公式。stamp方法有效。但是我有一个问题,在输出文件中添加更多的公式 我想为每个公式盖章的PDF模板“黄色”。所以我用document.add()尝试了一下,但是没有用。所以我试着用pdf writer来做这件事。但这对我来说是行不通的。你知道我如何用一个公式数据在pdf模板上盖章,制作一个新页面,用下一个公式数据在同一个p
stampFormular(Formular Formular,PdfStamper stamper)
中标记公式。stamp方法有效。但是我有一个问题,在输出文件中添加更多的公式
我想为每个公式盖章的PDF模板“黄色”。所以我用document.add()
尝试了一下,但是没有用。所以我试着用pdf writer来做这件事。但这对我来说是行不通的。你知道我如何用一个公式数据在pdf模板上盖章,制作一个新页面,用下一个公式数据在同一个pdf模板上盖章吗
public static File createForm(List<Fomular> formulars) {
Document document = new Document();
File pdf = null;
document.open();
try {
PdfReader pdfTemplate = new PdfReader('YELLOW');
PdfStamper stamper = new PdfStamper(pdfTemplate,
new FileOutputStream("output.pdf"));
PdfWriter writer;
for (Formular f : formulars) {
stamper = stampFormular(f, stamper);
writer = stamper.getWriter();
writer.newPage();
}
stamper.close();
pdfTemplate.close();
pdf = new File("output.pdf");
Desktop.getDesktop().open(pdf);
} catch (DocumentException | IOException e) {
e.printStackTrace();
}
return pdf;
}
公共静态文件createForm(列表公式){
文档=新文档();
文件pdf=null;
document.open();
试一试{
PdfReader pdfTemplate=新的PdfReader(“黄色”);
PdfStamper压模=新PdfStamper(pdfTemplate,
新的FileOutputStream(“output.pdf”);
编剧;
for(公式f:公式){
压模=压模公式(f,压模);
writer=stamp.getWriter();
writer.newPage();
}
压模关闭();
pdfTemplate.close();
pdf=新文件(“output.pdf”);
Desktop.getDesktop().open(pdf);
}捕获(DocumentException | IOE异常){
e、 printStackTrace();
}
返回pdf;
}
一些观察结果:
您不能从PdfStamper
获取PdfWriter
对象,使用newPage()
并期望它工作。这相当于打开汽车的引擎盖,开始重新布线合适的管子,而不知道任何关于发动机维护的艺术。当您想向母版添加新页面时,应该使用insertPage()
方法,如中所述
第二个观察:你没有告诉我们你是否在扁平化表单的内容。如果你这样做了,那么很简单,只需使用。换句话说:将PdfStamper
与PdfSmartCopy
组合。特别是如果您反复使用同一模板,PdfSmartCopy
将比PdfCopy
提供更好的结果,原因如中所述
假设您的模板需要保持交互式,那么您可能会遇到问题,原因也在该章中进行了解释:具有特定名称的字段的不同可视化必须始终具有相同的值。例如:如果模板中有一个名为name
的字段,则该字段在文档中的每次出现都必须具有相同的值。如果您不想这样做,您需要重命名name
,例如重命名为name1
,name2
,等等
需要保持交互的模板串联通常与PdfCopyFields
一起完成(请参阅文档)。在这里,文档有些过时。在最新版本的iText中,我们现在在PdfCopy
和PdfSmartCopy
中有了一个方法addDocument()
。此方法允许您一次添加完整文档,从而保持交互性