将 pdf.js 与 Qt5.8 一起使用
Posted
技术标签:
【中文标题】将 pdf.js 与 Qt5.8 一起使用【英文标题】:Using pdf.js with Qt5.8 【发布时间】:2017-04-04 11:43:13 【问题描述】:我正在尝试在 Qt5.8
中创建一个 pdf 查看器。我知道 poppler
是 Qt
的选择,但我想使用 pdf.js
来做到这一点。我不知道如何嵌入 pdf.js
与Qt5.8
。我看过pdf.js
的hello world
文档,但没有帮助。请帮我。
提前致谢。
【问题讨论】:
pdf.js 是 javascript。 Qt 是 C++。你想如何混合两种不同的编程语言? @DmitrySazonov 不,我不想混合它们我只想知道是否有办法将 pdf.js 与 Qt 一起使用 您可以使用浏览器 (QWebEngineView
)。再说一遍:你所说的“使用 pdf.js 和 Qt”是什么意思?这是不同的编程语言。
@DmitrySazonov Qt 的一个非常重要的部分是 QML,它允许 include JavaScript code and use it。如果您不知道自己在说什么,请停止拍摄鬼魂。
QML 不是纯 JS。主题声明者没有谈论任何关于 QML 的内容。我相信您不能简单地将 pdf.js 包含到 QML 中并具有渲染功能。 QML中的JS用于逻辑。
【参考方案1】:
如果你想使用 pdf.js,基本的想法是有一些小部件来显示 html - 似乎QWebEngineView
(使用 Chromium)可以完成这项工作,因为它需要最少的代码来完成您的第一个实施。
在您的计算机上安装了 pdf.js 并使用您的 QT Creator 准备了一个简约的 gui 应用程序(QT Widgets 项目),您可以使用以下代码来掌握基础知识:
#include "mainwindow.h"
#include <QApplication>
#include <QWebEngineView>
static QString pathToPDFjs = QString("file:///path-to/pdfjs-1.8.170-dist/web/viewer.html");
int main(int argc, char *argv[])
QApplication app(argc, argv);
MainWindow win;
QWebEngineView *view;
QString pdfFileURL;
//you could parse a widget to get the file name
pdfFileURL = QString("file:///path-to-your/file.pdf");
//init the view and attach it to the ui
view = new QWebEngineView();
win.setCentralWidget(view);
win.show();
//auto-load feature in pdf.js, pass file=filename as parameter
view->load(QUrl::fromUserInput(pathToPDFjs + QString("?file=") + pdfFileURL));
view->show();
return app.exec();
从那里您可以为您的用户界面添加额外的功能。 您甚至可以对您的 pdf.js 安装进行修改(如果需要)。
如果您需要在 pdf.js 上调用 JavaScript,您可以使用视图页面(QWebEnginePage
),而后者又可以使用runJavaScript
。
【讨论】:
【参考方案2】:不知道为什么要使用 pdf.js,但您可能想看看 QtLabs PDF module。它似乎很新,并且与当前的 Qt 很好地集成在一起。 (而且我猜它比 JavaScript 代码更高效)
如果您想尝试一下,请按以下方法开始:
git clone git://code.qt.io/qt-labs/qtpdf
cd qtpdf
git submodule update --init --recursive
qmake
make
cd examples/pdf/pdfviewer
qmake
make
./pdfviewer /path/to/my/file.pdf
【讨论】:
以上是关于将 pdf.js 与 Qt5.8 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 pdf.js 将每个用户上传的 pdf 文件的第一页显示为 Django 中的预览?