在 iOS 上使用 PDFKit.PDFView 打开 PDF

Posted

技术标签:

【中文标题】在 iOS 上使用 PDFKit.PDFView 打开 PDF【英文标题】:open PDF with PDFKit.PDFView on iOS 【发布时间】:2020-05-04 19:38:52 【问题描述】:

我有一个带有 PDF 查看器的应用程序,我尝试使用需要 PDFKit.PDFDocument 对象的 PDFKit.PDFView

我的代码是:

var pdfview = new PdfKit.PdfView();
var path = NSBundle.MainBundle.PathForResource("Harvard", "pdf");
var urll = new NSUrl(path);
var pdfdoc = new PdfDocument(urll);
pdfview.Document = pdfdoc;

我在第 4 行得到一个异常,上面写着:

无法初始化“PdfKit.PdfDocument”类型的实例: 原生 'initWithURL:' 方法返回 nil

我的 pdf 文件,Harvard.pdf,位于 Resources 文件夹和具有 BundleResource 构建操作的直接 ios 项目目录中。

这个PDF文件可以用CGPDFDocument轻松阅读,但我需要用PDFView来解决我之前问过的问题 handle links clicking inside PDF viewer on iOS with swift。 那么,谁能帮帮我?

【问题讨论】:

【参考方案1】:

试试看URL是否返回nil

var documentURL = NSBundle.MainBundle.GetUrlForResource("Harvard", "pdf");
var pdfdoc = new PdfDocument(documentURL);

这是完整的示例代码:

var documentURL = NSBundle.MainBundle.GetUrlForResource("MyForm", "pdf");
if (documentURL != null)

    var document = new PdfDocument(documentURL);
    //var page = document.GetPage(0);

    var pdfview = new PdfKit.PdfView();
    pdfview.Frame = View.Frame;
    pdfview.Document = document;
    pdfview.AutoScales = true;
    pdfview.UserInteractionEnabled = true;
    pdfview.BackgroundColor = UIColor.Gray;

    View.AddSubview(pdfview);

及效果:

【讨论】:

好吧,它工作正常。但我有一个问题,当我调试时看到 NSBundle.MainBundle.PathForResource 和 NSBundle.MainBundle.GetUrlForResource 之间的区别,它是第二个返回“文件:///”在 URL 的开头。现在我需要你的帮助才能从设备存储中打开 PDF,如果你能帮助我,模拟器中的 URL 是“/Users/haykalmedia/Library/Developer/CoreSimulator/Devices/DA58EBD1-0328-409A-8F95-63E3FFAE456F/data/ Containers/Data/Application/1E65FD74-8080-4FE6-BF30-554B6E11424D/Documents/Harvard_26_M-1.pdf”,我尝试在其开头添加“file:///”,但它不起作用。 @LofiMAM 如果在路径字符串之前添加file://,它将与GetUrlForResource 一样工作。我想你在这里再添加一个 / 。在路径字符串的开头,有一个 / 存在。所以删除额外的 / ,它会起作用:) 非常感谢,我知道并尝试了,但不幸的是它不起作用,所以我使用了 var data = new NSData(url); var document = new PDFDocument(data);它工作正常。谢谢你,你救了我。 资源路径和存储路径之间存在差异(我的实际文件在存储中而不是在资源中,这意味着我不需要资源路径)。 @LofiMAM 是的,它们是不同的。你可以看看这个关于 iOS 路径的文档。docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/…

以上是关于在 iOS 上使用 PDFKit.PDFView 打开 PDF的主要内容,如果未能解决你的问题,请参考以下文章

PDFKit / PDFView 禁用与表单注释的交互

如何删除 PDF 文档边距

使用 IOS9 时,无法在 UITable 的部分标题上的 UIButtons 上触发触摸事件(IOS10 很好)

无法在 iOS 8 上使用 Google 登录 iOS SDK

如何在 iOS 10 上使用 Facebook iOS SDK

支持 iOS 11 位置权限,同时在 iOS 10 上禁止“使用时”