我有一个基于Java / Java EE的应用程序,其中我需要为将提供给用户的各种服务创建PDF证书。我正在寻找一种创建PDF的方法(暂时不需要数字证书)。
最简单方便的方法是什么?我试过了
出于这些方法的最佳途径是什么,还是有其他方法更容易和方便?
答案 0 :(得分:8)
当您谈论证书时,我认为标准表对于证书的每个接收者来说都是相同的,除了:
如果是这种情况,我会使用任何工具,允许您创建一个花哨的证书(Acrobat,Open Office,Adobe InDesign,...)并创建一个包含三个的静态表单(有时称为AcroForm)字段:名称,课程,日期。
然后我会用iText填写这样的字段:
PdfReader reader = new PdfReader(pathToCertificateTemplate);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(pathToCertificate));
AcroFields form = stamper.getAcroFields();
form.setField("name", name);
form.setField("course", course);
form.setField("date", date);
stamper.setFormFlattening(true);
stamper.close();
reader.close();
从代码创建这样的证书是“艰难的方式”;从XML创建这样的证书是一件“痛苦”(因为XML不适合定义布局),使用iText的XML Worker可以从(HTML + CSS)创建证书,但所有这些解决方案都有缺点要正确定位每件物品,确保所有物品都放在同一页面等等,这是很难的工作......
使用固定字段维护模板要容易得多。这样,您只需编写一次代码。如果由于某种原因你想将字段移动到另一个地方,你只需要更改模板,你不必担心在代码,XML,HTML或CSS中乱搞。
有关更多信息,请参阅http://www.manning.com/lowagie2/samplechapter6.pdf(第6.3.5节)。
答案 1 :(得分:1)
尝试使用Jasper Reports配合。请查看http://community.jaspersoft.com/
答案 2 :(得分:1)
我推荐第一种方法:XSL到pdf转换,这是最强大的。我有使用Apache FOP优雅地制作大量PDF报告(每个页面数千页)的经验,我认为它足够好且相当容易(但它需要一些xsl-FO的知识)。 / p>
答案 3 :(得分:1)
即使这是一个古老的问题,我认为应该回答。
创建非常复杂的pdf,例如证书,报告或付款单等。 您绝对可以使用动态报告库。这个库依赖于jasper报告(这也是非常受欢迎的旧库)。动态报告将使您能够使用Java代码设计文档,以便您可以根据需要轻松地进行操作或进行更改。
在他们的网站上有很多可用的例子,很容易从这些例子中学习。
以下是链接:
答案 4 :(得分:1)
Bruno Lowagie指出了一种生成模板的好方法,该模板对于所有数据基本相同,需要填充。但是,Bruno Lowagie建议将iText作为库来填充字段。对我来说,就像对Ankit一样,此许可证是为什么我必须选择另一个库的问题。在下面的内容中,我有逐步的指南,说明如何使用Apaches PdfBox创建模板并使用数据填充模板
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.16</version>
</dependency>
使用LibreOffice Writer创建模板。供占位符使用 文本框(查看>>工具栏>>表单控件)。根据Bruno Lowagie的建议,这将使用AcroForms创建PDF
为每个文本框设置一个名称。将只读设置为true。
将文档另存为PDF。
使用PdfBox读取PDF模板并设置 文本框。
InputStream is = getClass().getClassLoader().getResourceAsStream("Template.pdf");
try {
PDDocument pDDocument = PDDocument.load(is);
PDAcroForm pDAcroForm = pDDocument.getDocumentCatalog().getAcroForm();
PDField fieldName = pDAcroForm.getField("name");
fieldName.setValue("FirstName Surname"); // <-- Replacement
pDDocument.save(outStream);
pDDocument.close();
} catch (IOException e) {
e.printStackTrace();
}
答案 5 :(得分:0)
使用iText pdf库创建pdf。您可以轻松地从该API生成pdf。这是链接
Text®是一个允许您创建和操作PDF文档的库。它使开发人员能够通过动态PDF文档生成和/或操作来增强Web应用程序和其他应用程序。
开发人员可以使用iText:
将PDF投放到浏览器
从XML文件或数据库生成动态文档
使用PDF的许多互动功能
添加书签,页码,水印等
拆分,连接和操作PDF页面
自动填写PDF表格
将数字签名添加到PDF文件