如何使用Qt/C++打开和显示PDF文件?

11

我正在尝试使用Qt打开和读取PDF文件,但是没有特定的方法来实现。


在某个时候,这可能会被添加到Qt WebEngine中 - 请参见https://bugreports.qt.io/browse/QTBUG-50556 - parsley72
9个回答

9

你能否给出一个最简示例,展示如何将这两个组合起来使其正常工作? - SexyBeast
@AttitudeMonger,我已经更新了答案,并附上了实现链接。 - Archie
@Archie,你能解释一下你的项目应该如何编译和运行吗? - user8469759

5

据我所知,Qt本身不包含PDF阅读/渲染功能。您可能需要查看libpoppler,它具有Qt绑定。


1
Poppler使用Xpdf,采用GPL2许可证。我喜欢GPL,但要小心不要在专有软件中使用它。 - Adrian Maire

3
我在qt-project.org上找到了一篇非常有趣的文章——“Handling PDF - Qt Project”。这个页面讨论了在Qt应用程序中处理PDF文档的各种可用选项。该页面并没有准确地说明如何“打开和显示现有的PDF文档”,但它可以帮助您从所解释的所有内容中推导出一些有用的信息。在此处,页面上说:

要将现有PDF文档中的页面或元素呈现为图像文件或内存像素图(例如用于生成缩略图或实现自定义查看器),可以使用第三方库(例如:poppler-qt4(freedesktop.org)和muPDF(mupdf.com))。

另外,该任务也可以委派给现有的命令行工具(比如poppler-utils(freedesktop.org)和muPDF(mupdf.com))。


2
您可以使用PdfViewer,这是一个轻量级的PDF查看器,只使用Qt。它包含一个PdfView小部件,可以轻松地嵌入您的应用程序中。

链接已损坏。 - user1741137

1

我知道这是一个旧帖子,但我在我的初步搜索中偶然发现了它,所以我想发布一些我使用的解决方案的文档。

截至Qt 5.10

请查看QPdfDocument类。该类可以打开PDF文件,您可以使用render函数将页面呈现为图像。然后我使用QQuickPaintedItem来“绘制”此图像,但我相信还有更多处理QImage输出的方法。

在Qt 5.10之前

我使用了libpoppler来进行非常相似的过程。 #include <poppler/qt5/poppler-qt5.h> 使用Poppler::Document类来加载和处理整个PDF文档,并查看Poppler::Page::renderToImage函数将页面输出为QImage


0
简单回答:Qt API不支持此功能。
其他回答:您可以编写代码,我建议您查看使用Ghostscript的this Qt应用程序

0
我发现在Qt中使用QProcess打开pdf文件是最好的方法。

0

你可能想使用okular来处理PDF文件。


-1
Qt本身不支持直接读取PDF文件,但是有很多方法可以实现,其中一种方法是使用Adobe的PDF Reader ActiveX对象和QAxObject。
你可以查看this链接,该链接描述了如何在Qt/C++中使用ActiveX读取PDF文件,并提供了一个可下载的示例项目。

1
虽然链接可能回答了问题,但是链接会变化,因此Stack Overflow不希望依赖它们。最好在这里包含答案的关键部分,并提供参考链接。这样做会更好 - Dave Schweisguth
答案的关键部分在标题中。您可以使用ActiveX在Qt中打开PDF文件。该链接包含可下载的示例项目。 - Amin

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