c-Qt 5.8和Pdf.js错误

我在使用pdf.js和Qt 5.8时遇到问题,我尝试在我的应用程序中的此链接Using pdf.js with Qt5.8中执行相同的代码,但他不起作用,我不知道为什么,qt向我显示有关JS的消息:

“js: Uncaught TypeError: Cannot read property ‘PDFJS’ of undefined”.

这是我在mainwindow中的代码:

QWebEngineView *view;
QString pdfFileURL;

QString pathToPDFjs = QString("file:///"+qApp->applicationDirPath()+"/libraries/PDF/viewer.html");

pdfFileURL = "file:///C:/Users/Administrateur/Desktop/CV.pdf";

view = new QWebEngineView();
this->setCentralWidget(view);

view->load(QUrl::fromUserInput(pathToPDFjs + QString("?file=") + pdfFileURL));
view->show();

解决方法:

我建议从here下载源代码.

然后将整个文件复制到项目中的文件夹中(在我的情况下为3rdParty):

.
├── 3rdParty
│   └── pdfjs-1.7.225-dist
│       ├── build
│       │   ├── pdf.js
│       │   └── pdf.worker.js
│       ├── LICENSE
│       └── web
│           ├── cmaps
│           ├── {another files}
│           ├── viewer.css
│           ├── viewer.html
│           └── viewer.js
├── CV.pdf
├── main.cpp
├── mainwindow.cpp
├── mainwindow.h
├── mainwindow.ui
└── pdfjsExample.pro

另一个建议是在.pro中创建一个命令,以便您可以将库复制到可执行文件的一侧,并且不会出现文件夹位置的问题(其中CV.pdf是我用来进行测试的pdf).

COPY_CONFIG = 3rdParty CV.pdf
copy_cmd.input = COPY_CONFIG
copy_cmd.output = ${QMAKE_FILE_IN_BASE}${QMAKE_FILE_EXT}
copy_cmd.commands = $$QMAKE_COPY_DIR ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
copy_cmd.CONFIG += no_link_no_clean
copy_cmd.variable_out = PRE_TARGETDEPS
QMAKE_EXTRA_COMPILERS += copy_cmd

代码如下所示:

QWebEngineView *view;
QString pdfFileURL;

QString pathToPDFjs = QString("file:///%1/%2")
        .arg(QDir::currentPath())
        .arg("3rdParty/pdfjs-1.7.225-dist/web/viewer.html");

pdfFileURL = QString("file:///%1/%2").arg(QDir::currentPath()).arg("CV.pdf");

view = new QWebEngineView();
setCentralWidget(view);

QUrl url = QUrl::fromUserInput(pathToPDFjs + QString("?file=") + pdfFileURL);

view->load(url);

注意:将applicationDirPath修改为CurrentPath,以便将可执行文件移动到另一个位置时,不会产生问题,为了使应用程序正确运行,3rdParty文件夹和我们的可执行文件必须在一起.

完整的代码是here.

如果要隐藏打印按钮和打开按钮,则应注释以下几行:

viewer.html [第178行]

<!--button id="openFile" class="toolbarButton openFile hiddenLargeView" title="Open File" tabindex="32" data-l10n-id="open_file">
  <span data-l10n-id="open_file_label">Open</span>
</button>

<button id="print" class="toolbarButton print hiddenMediumView" title="Print" tabindex="33" data-l10n-id="print">
  <span data-l10n-id="print_label">Print</span>
</button-->

viewer.js [第3058行]

  /*items.openFile.addEventListener('click', function (e) {
    eventBus.dispatch('openfile');
  });
  items.print.addEventListener('click', function (e) {
   eventBus.dispatch('print');
  });*/
上一篇:QWebEngineView之加载html打印PDF


下一篇:QWebEngineView渲染缓慢原因