title1几乎全部说了。具体而言,我要求具有基本格式(表格和图像)的


PDF生成

在封闭源代码商业项目中的可用性
是免费的(像啤酒一样)或几乎免费

,并且更喜欢


易于使用
耐久(无死角的项目)
理想地开放来源

背景:明天我将生成一些简单的PDF,如果不花费太多时间并且不浪费时间,我将很高兴。


1取自一个同名的,但是由于关于SO的长期封闭问题,我希望这是一个更好的选择。封闭问题的问题在于答案可能早已过时。即使没有,也没有明确的建议。

评论

将删除的答案移到注释中,因为我看不到任何进一步改进的地方:并不是字面上的Java库,但是根据上下文,您可能可以使用标准库,例如Libtiff的tiff2pdf或ImageMagick。另外,请记住要考虑一下PDF是否真的是您想要的格式。也许DjVu会更好?

@Nemo您自己删除了答案吗?我认为您的答案是正确的,因为PDF会给您带来很大的痛苦,而进行炮击非常简单。不幸的是,PDF是必需的。仅供参考,我使用org.apache.pdfbox。我花了比我想要的更多的时间,但是它确实完成了工作。

不,@ Undo将其删除

另一个封闭的SO问题:stackoverflow.com/questions/6625849/…

以下是具有比较和受欢迎程度估计的活跃开源替代方案的列表:java.libhunt.com/categories/438-pdf

#1 楼

iText

我是iText集团的首席执行官,iText的原始作者,两本iText in Action书籍和免费的电子书《 StackOverflow上的最佳iText问题》。

您引用的列表中提到了iText,并给出了这个答案,我想确认iText仍然存在。它既可以通过开放源代码许可(AGPL)获得许可,也可以通过商业许可获得许可(产生了用于进一步开发的收入)。

除了担任iText公司的首席执行官(设有办事处)在欧洲,美国以及不久之后也在新加坡),我还是创建PDF标准的ISO委员会的成员。在不到一周的时间内,我将飞往圣何塞(CA)参加会议,讨论ISO-32000-2(即将发布的PDF 2.0规范),ISO-19005(PDF / A),ISO-14289(PDF / UA),...我还负责ISO数字签名Adhoc委员会(重写ISO-32000-2中有关数字签名的部分)。

在iText,我们投资于进一步的开发,对于像免费啤酒许可证一样免费提供的开源库,情况并非总是如此。例如:iText和PDFBox都是PDF协会的成员,但是在2014年科隆PDF Days上,PDFBox宣布他们没有资源来投资对PDF 2.0的支持。该项目在捐赠代码的贡献者中脱颖而出。 iText使用的商业模型产生了收益,使我们可以向开发人员付款。

飞碟是一个基于iText构建的项目,但与iText Group无关。我认为尚不支持该功能,但我不确定。

我不了解PDFClown,直到该工具的开发者向我介绍了PDFClown中可用的单个功能,但是不在iText中。我通过自己实现该功能进行了响应。根据对话,我认为PDFClown是一个单人项目。

我在其他项目上没有太多信息。 Apache FOP是原始列表中似乎缺少的一个项目(但出现在注释和其他答案中)。根据Black Duck Software代表我们组织的一项调查,Apache FOP似乎在许多系统上运行(它是iText之后的第二名),但是由于(1)的体系结构,因此并不是很多开发人员对此感到满意取决于XSL-FO和(2)性能问题。

评论


碧玉报告怎么办?这比iText好吗

– Vinayak Dornala
16年6月1日在15:58

@Vinayak Jasper Reports使用旧版本的iText。将Jasper Reports与iText进行比较就像将汽车与其引擎进行比较。

–布鲁诺·洛瓦吉(Bruno Lowagie)
16年6月1日在16:03

@BrunoLowagie我可以免费获得iText的开源许可(AGPL)版本吗?如果可以,我可以在Android App中使用iText并在Google Play中启动它吗?

– Ragesh D安东尼
17-10-11在13:06

@RageshDAntony是的,您可以免费获得iText的AGPL版本。是的,您可以在Android应用程序中免费使用它,但前提是必须在相同条件下免费提供该应用程序作为开源应用程序;也就是说:您的应用也必须也是100%AGPL。

–布鲁诺·洛瓦吉(Bruno Lowagie)
17-10-11在20:35

我没有看到@RageshDAntony的工作原理,因为您的客户将向您支付使用AGPL许可以外的软件使用许可的费用。与RH Enterprise Linux的比较是错误的,因为RH不出售使用Linux的任何许可证。 RH不以“成本”出售Linux。

–布鲁诺·洛瓦吉(Bruno Lowagie)
17-10-12在6:28

#2 楼

LibreOffice
一种间接且免费的途径是使用其Java API库在LibreOffice中创建或修改文档。然后告诉LibreOffice根据该文档创建PDF。
不简单,但是可行。我的团队过去是为原型制作的(不在生产​​中)。 LibreOffice API令人困惑,其设计古怪,没有很好的文档记录,只有几个不良示例-至少那是我们的经验。
但是,如果可以降低成本,我强烈建议考虑使用iText。您预算的一部分。请参阅Bruno Lowagie的答案。

评论


我发现的另一个商业产品:PDF Java Toolkit

–罗勒·布尔克
17-4-9在7:36



#3 楼

ApachePDFBox®库是用于处理PDF文档的开源Java工具。该项目允许创建新的PDF文档,操作现有文档以及从文档中提取内容的功能。

Apache PDFBox是根据Apache许可证v2.0发布的。

功能:


从PDF文件中提取Unicode文本。
将单个PDF拆分为多个文件或合并多个PDF文件。
从PDF表单中提取数据或填写PDF表单。
根据PDF / A-1b标准验证PDF文件。
使用标准Java打印API打印PDF文件。
将PDF保存为图像文件,例如PNG或JPEG。
从头开始创建包含嵌入式字体和图像的PDF。
进行数字签名PDF文件。


评论


这篇评论主要是为了帮助将来遇到这个问题的人们,但是在撰写本文时,PDFBox库并未进行任何布局。例如,没有文本列,没有文本换行或对齐,没有表。如果需要任何布局,则需要使用单独的布局库。 github上的几个示例是github.com/ralfstuckert/pdfbox-layout和github.com/gingerdroids/BlockFrame

–大卫
17年3月13日在13:46



#4 楼

jPDFWriter

我们的软件jPDFWriter是一个Java库,可以创建PDF文档。 jPDFWriter可免费用于商业目的,没有许可费。

jPDFWriter可以通过两种方式创建PDF文件:


可以使用jPDFWriter的非常简单的API直接创建PDF文件。只需创建一个PDFDocument对象,根据需要创建尽可能多的PDFPage对象,在页面上绘制Java Graphics2D支持的字符串,图形或任何其他元素,然后保存文档。
jPDFWriter还扩展了标准Java PrinterJob,以便您可以以与打印到物理打印机相同的方式创建PDF文件。这允许重复使用现有的打印代码,并允许应用程序在运行时决定将输出发送到打印机还是PDF文件。


评论


请阅读如何成为垃圾邮件发送者-您必须在帖子中声明与该产品的隶属关系。

– Glorfindel
17年6月28日在12:49

#5 楼

JODReports

JODReports是开源的,并驱动OpenOffice或LibreOffice作为转换引擎。这意味着您可以在文字处理器或电子表格程序中设计模板,对其进行操作,然后转换为包括PDF在内的各种格式。

JODReports项目的最新更新时间为2013年8月,因此很难知道该“死角”。


由Bruno的答案详细介绍的iText可能是理想的-很棒库。

#6 楼

OpenPDF

OpenPDF是Java PDF库,由iText派生。

截至2017年,它似乎一直在积极维护。

#7 楼

我是Open Lowcode PDF的作者,它是免费的Apache PDBBox之上的另一层。该框架是开源的,第一个版本今天才在github上发布。随时查看并提供反馈。

该框架旨在生成文档和表单,这些文档和表单通常由具有标准优雅布局的公司制作。