将 pdf.js 与 Qt5.8 一起使用

Posted

技术标签:

【中文标题】将 pdf.js 与 Qt5.8 一起使用【英文标题】:Using pdf.js with Qt5.8 【发布时间】:2017-04-04 11:43:13 【问题描述】:

我正在尝试在 Qt5.8 中创建一个 pdf 查看器。我知道 popplerQt 的选择,但我想使用 pdf.js 来做到这一点。我不知道如何嵌入 pdf.jsQt5.8。我看过pdf.jshello 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流文件转图片

html 纯文本PDF与pdf.js

如何使用 pdf.js 将每个用户上传的 pdf 文件的第一页显示为 Django 中的预览?

离子v1使用inappbrowser和pdf.js打开pdf

如何使用 pdf.js 裁剪 PDF 页面的矩形区域

如何在 node.js 中生成 PDF