Cordova IOS 应用程序 - 使用 PDFJS 打开从应用程序沙箱下载的 PDF

问题描述 投票:0回答:1

我正在开发一个非常旧的基于 Cordova 的混合 IOS 应用程序,它使用 PDFJS 库来渲染 PDF(用户手册)。 Cordova 版本是 6.1,我们没有使用任何 SPA 框架,如 AngularJS 或 React。它只是简单的 HTML + JQuery。

以下是项目的结构。

pdf.js 的扩展视图

目前该应用程序完全离线,所有 PDF 和地图文件都捆绑在包中(在 www 文件夹中)。每当手册有更新时,我们都会发布带有最新 PDF 的新版本。以下是用于打开 PDF 的代码部分。

// line item in mapping JSON file, which is used to render a menu of links
"pdfPath": "/B777/PDF/Manual-1.pdf",
"page": "1",
"highlightText": "Table of Contents",
"linkText": "Click to open PDF"
 

// AppPath is as below
var AppPath = window.location.href.split(window.location.href.split('/').slice(-1))[0].replace(/\/$/, ""); // get the url of the application home


// On load of the app/main HTML page, adding an iFrame to the main HTML
$(document).ready(function () {
var src = AppPath + "/viewer.html?file=" + AppPath + '/Manuals/Default.pdf';
// loading the first manual in the view
$("#pdfframe").append("<iframe id='myPdf' src='" + src + "' width='100%' height='100%'></iframe>");

});

当用户单击任何菜单项以查看 PDF 的特定部分时,将调用以下代码。

// JS code on click of link to open a PDF in PDFJS Viewer.html
    $('#myPdf')[0].src = AppPath + "/viewer.html?file=" + AppPath + pdfLocation + '#page=' + pageHint;

我正在尝试做一个小型的 POC,用户可以在在线时从服务器下载 PDF,并上传新的手册。但我发现我们无法将文件下载到“www”文件夹。

当用户下载新的 PDF 时,它们将存储在应用程序沙箱或应用程序目录中。有没有办法将此路径提供给 PDFJS 来渲染 PDF?找到下面的选项,它说我们可以获取 PDF 的二进制文件,然后使用下面的 PDFJS API 来显示 PDF。

 // binary Response of PDF stored in App Sandbox via some plugin or native code.
 PDFJS.getDocument(binaryResponse).then(function getPdfHelloWorld(_pdfDoc) {
    pdfDoc = _pdfDoc;
    renderPage(pageNum);
  });

请问您是否还有其他更好的方法可以做到这一点,例如将最新文件下载到www?或者提供 PDFJS 的应用程序沙箱/应用程序目录路径? 或者有其他选项可以从服务器同步文件吗?

更改 PDFJS 不是一个选项,因为我们使用了很多 API 来突出显示和搜索。

ios cordova pdf.js
1个回答
0
投票

您可以尝试使用插件

cordova-plugin-file
然后您可以解析路径并将其传递给PDFJS。

 resolveLocalFileSystemURL(pdf_file_path, 
 function(entry) {
     var nativePath = entry.toURL();
     console.log('Native URI: ' + nativePath);
     PDFJS.getDocument(...);
 });

https://cordova.apache.org/docs/en/10.x/reference/cordova-plugin-file/

© www.soinside.com 2019 - 2024. All rights reserved.