Skip to content

打开文档

PDFViewCtrl 提供了多种打开 PDF 文档的方式,涵盖文件路径、Android Uri、内存 Buffer、网络 URL 和自定义数据源等场景。

从文件路径打开

最常见的方式,openDoc() 内部会完成创建 PDFDoc、加载文档并设置到 PDFViewCtrl

java
String path = "/sdcard/FoxitSDK/Sample.pdf";
pdfViewCtrl.openDoc(path, null);

也可以手动创建 PDFDoc 后通过 setDoc() 设置:

java
try {
    PDFDoc doc = new PDFDoc(path);
    doc.load(null);
    pdfViewCtrl.setDoc(doc);
} catch (PDFException e) {
    e.printStackTrace();
}

从 Android Uri 打开

适用于通过 IntentDocumentProvider 或 SAF(Storage Access Framework)获取的文件 Uri:

java
Uri uri = data.getData();
pdfViewCtrl.openDoc(uri, null);

从内存 Buffer 打开

适用于文档数据已在内存中的场景(如解密后的字节数组):

java
byte[] pdfBuffer = loadPdfBytes();
pdfViewCtrl.openDocFromMemory(pdfBuffer, null);

从自定义数据源打开

通过实现 FileReaderCallback 接口,支持自定义读取逻辑(如加密存储、网络流等):

java
pdfViewCtrl.openDoc(fileReaderCallback, null);

备注

使用自定义数据源时,也可以直接通过 Core SDK 创建 PDFDoc

java
PDFDoc doc = new PDFDoc(fileReaderCallback);
doc.load(null);
pdfViewCtrl.setDoc(doc);

从 URL 打开

通过 openDocFromUrl() 从网络 URL 打开 PDF,SDK 会自动处理下载和缓存:

java
PDFViewCtrl.CacheOption cacheOption = new PDFViewCtrl.CacheOption();
cacheOption.setCacheFile("/sdcard/FoxitSDK/cache/sample.pdf");

pdfViewCtrl.openDocFromUrl(
    "https://example.com/sample.pdf", null, cacheOption, null);

CacheOption 可指定本地缓存路径;HttpRequestProperties 可设置自定义 HTTP 请求头。

提示

通过 URL 打开时若遇到文档显示异常或无法打开,请参阅:通过 URL 打开 PDF 异常排查

打开后跳转到指定页面

SDK 使用多线程渲染,需确保文档已打开成功后再调用 gotoPage()。推荐在 IDocEventListener.onDocOpened() 回调中跳转:

java
pdfViewCtrl.registerDocEventListener(new PDFViewCtrl.IDocEventListener() {
    @Override
    public void onDocWillOpen() {}

    @Override
    public void onDocOpened(PDFDoc pdfDoc, int errCode) {
        pdfViewCtrl.gotoPage(2);
    }

    @Override
    public void onDocWillClose(PDFDoc pdfDoc) {}

    @Override
    public void onDocClosed(PDFDoc pdfDoc, int i) {}

    @Override
    public void onDocWillSave(PDFDoc pdfDoc) {}

    @Override
    public void onDocSaved(PDFDoc pdfDoc, int i) {}
});

pdfViewCtrl.openDoc(path, null);

关闭文档

java
pdfViewCtrl.closeDoc();

调用 closeDoc() 后,PDFViewCtrl 会释放文档资源并触发 IDocEventListeneronDocWillCloseonDocClosed 回调。

API 参考

PDFDocPDFViewCtrl 的完整接口说明请参阅 API 手册