2013-01-04 146 views
4

我有一个基于Java/Java EE的应用程序,其中我需要为将提供给用户的各种服务创建PDF证书。我正在寻找一种方法来创建PDF(现在不需要数字证书)。使用java创建复杂pdf

这样做最简单便捷的方法是什么?我一直在使用iText的尝试

  1. XSL转换为PDF
  2. HTML转换为PDF。
  3. 原油Java的方式(使用PDFWriter,PdfPCell等)

什么是最好的出路,这些或者是有哪些是比较容易和方便的任何其他方式?

+0

对于HTML到PDF,你应该尝试飞碟:http://code.google.com/p/flying-saucer/ – user1411778

+1

的*最简单,最方便方式*取决于你想成为多么灵活。如果应该允许那些“证书”包含任何PDF格式的文件,那么您将不得不使用粗糙的Java方式,或者使用iText,这可以通过您引用的类名称或其他体面的PDF库来实现。如果“证书”只是简单的文本而没有小声和哨声,那么脚本解决方案可能更合适。 XSL或JasperReport都有其优点。在我看来,HTML-> PDF只有在您无法帮助获取HTMLn格式的证书模板时才是明智的。 – mkl

回答

6

当你谈论证书,我认为认准证书的每一个接收相同的,除了标准片:

  • 接收
  • 的课程,其次是接收器的名称
  • 日期

如果是这样的话,我会用任何工具,它允许你创建一个奇特的证书(Acrobat中,开放式办公,Adobe InDesign中,...),并创建一个ST atic形式(有时称为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节)。

+0

这是一个不错的选择。非常感谢! – Ankit

+0

你建议的选项很好,但我无法找到创建PDF的开源方式:(我试图转换html - > PDF,但是有一些问题。PDF页面中的图像没有正确显示。图像尺寸在PDF中更改,有什么方法可以纠正它? – Ankit

+0

为什么使用HTML来PDF?为什么不在Open Office/Libre Office中打开HTML并按照您想要创建PDF的方式进行调整? HTML不适合作为创建设计的格式。 –

0

使用iText pdf库创建PDF的文件从您的api文件生成pdf文件将很容易。这里是链接

http://itextpdf.com/

文本®是,它允许你创建和操作PDF文档库。它使开发人员能够使用动态PDF文档生成和/或操作来增强Web和其他应用程序。

开发人员可以使用的iText到:

即成PDF的浏览器

生成XML文件或数据库

使用PDF的诸多互动功能动态文档

添加书签,页码,水印等

拆分,连接和操作PDF页面

自动化填写PDF的形成

添加数字签名到PDF文件

+0

我认为这是@Ankit称为*粗糙的java方式(使用PDFWriter,PdfPCell等)*。 ;) – mkl

1

我推荐第一种方法:XSL到pdf转换,这是最强大的。我有经验可以使用Apache FOP优雅地制作大量的PDF报告(每篇都有数千页),我认为它很好,很容易(但它需要一些关于xsl-FO的知识)。

+0

我也发现XSL转换为pdf格式,但我发现创建XSL是一项繁琐的任务,有没有更简单的方法来创建xsl或者它只能手动创建? – Ankit

+0

XSL有点麻烦,但一旦完成,您可以重复使用它。此外,您可以选择一些优秀的编辑器(例如XMLSpy)来编辑XSL/XML文件,这可能会消除大量的手动输入。 –

0

您提到的PDF可能很复杂。如果这涉及可变性或布局,则提供合理复杂的基于模板的布局和控件的一个选项是Docmosis。您提供Docmosis作​​为模板的文档或odt文件,因此它们非常容易更改,Docmosis通过邮件合并来创建pdf或其他格式。请不要我为创建Docmosis的公司工作。

希望有所帮助。

0

即使这是老问题,我认为它应该是答案。

创建非常复杂的pdf,如证书,报告或付款单等。 您绝对可以使用动态报告库。这个库依赖于贾斯珀报告(这也是非常流行的旧库)。动态报告将为您提供使用Java代码设计您的文档,以便您可以根据需要轻松操作或进行更改。

在他们的网站上有很多可用的例子,并且很容易从这些例子中学习。

下面链接吧:

http://www.dynamicreports.org/