用于C/C++应用程序的开源PDF库?

100

我希望能够从我的(native) C++ Windows应用程序中生成PDF输出。 是否有任何免费/开源库可用于此?

我查看了 这个问题的答案,但它们大多与.Net相关。

10个回答

68

LibHaru

LibHaru是一个免费、跨平台、开放源代码的ANSI-C编写的生成PDF文件的软件库。它可以作为静态库(.a、.lib)和共享库(.so、.dll)使用。

我自己没有尝试过,但也许它能帮助你。


1
我们能否使用LibHaru读取PDF文件,还是只能创建PDF文件? - Rui Carneiro
7
@Rui:只能创建,遗憾。 - Mark Ransom
4
我曾为libHaru编写了一个POCO包装器(https://github.com/pocoproject/poco/tree/master/PDF)。我们从未发布过它,但它几乎达到了生产级别的代码。 - Alex
不幸的是,LibHaru不支持读取和编辑PDF。对我来说毫无用处。 - freeze
3
值得注意的是,最后一次提交是在2015年。该库目前未得到维护。 - Eugene
这是一个很好的库。 - Land

20

我曾经参与了一个需要生成PDF报告的项目。在网上搜索后,我发现了PoDoFo库。它看起来非常强大。由于我不需要所有功能,所以我创建了一个包装器来抽象掉一些复杂性。这并不太困难。你可以在这里找到该库:

http://podofo.sourceforge.net/

享受吧!


1
在Mac上构建PdDoFo非常麻烦,所以我最终放弃了尝试。构建LibHaru非常容易。 - user336063
1
Podofo出现了2个编译器问题,添加#include <climits>、<numeric_limits>后,在两个文件中,成功构建了该软件包。但是,cmake系统在我的Linux上无法正常工作,我有两个版本的GCC(一个是Centos6.5附带的旧版本,另一个是我构建的最新版本5.3)。链接是一个问题。我设法链接了helloworld,但测试程序生成了一个空白文档。这个问题很难解决。 - Kemin Zhou
2
但是Podofo需要使用freetype2库,该库采用GPL许可证而非LGPL。如果您不想公开源代码,那么您将无法使用freetype2制作软件。 - 18C
2
@18C:Freetype允许包含在商业闭源应用程序中。请参见此链接 - Congenital Optimist

18
如果你勇敢并且愿意自己动手,你可以从一个PostScript库开始,并增强它来处理PDF,利用Adobe的免费在线PDF参考文档

10

jagpdf 似乎是其中之一。它使用C++编写,但提供了C API。


8

这取决于您的需要。一些工具包在绘图方面更加出色,而另一些则更适合撰写文本。Cairo 在绘图方面非常出色(它支持各种屏幕和文件类型,包括PDF),但对于良好的印刷排版可能不是理想的选择。


8

PDF Hummus是一款处理PDF文件所需的全功能软件,除了渲染功能外,还包括所有必要功能。

查看详情请访问http://pdfhummus.com/


1
最近我使用了Hummus进行大规模的PDF导出,我可以推荐它。虽然可能没有涵盖当前PDF规范的所有功能(这相当详尽),但易于理解,并且通过回调类具有良好的可扩展性,其中包含许多虚拟函数(https://github.com/galkahana/PDF-Writer/blob/master/PDFWriter/DocumentContextExtenderAdapter.h)。它包含TIFF / JPEG处理和freetype库用于字体处理。 - RED SOFT ADAIR
你能将它编译为动态链接库吗?还是只支持静态链接库? - Sam

5

1
看起来muPdf是用于渲染PDF文件,而不是生成它们的? - vy32
1
@vy32 从源代码来看,我认为生成PDF文件最多只是“muPdf”的正在进行的工作,而不是主要目标。 - matec

5
  • LibHaru 似乎被很多人使用。

一个非开源方法是:PDF Creator Pilot,提供更多的语言选项,包括C++、C#、Delphi、ASP、ASP.NET、VB、VB.NET、VBScript、PHP和Python。


2

尝试使用wkhtmltopdf

软件特点

跨平台。 开源。 使用webkit将任何网页转换为PDF文档。 您可以添加页眉和页脚。 生成目录。 批量模式转换。 可在带有XServer的Linux服务器上运行(必须安装X11客户端库)。 可通过对libwkhtmltox进行绑定而直接由PHP或Python使用。


3
这很好。但是,由于它使用了过时的webkit,一些页面可能会出现问题(例如youtube)。 - swdev

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接