我们使用 Syncfusion.PdfViewer.WPF 来显示 PDF。从版本 16.1.0.24 开始,它使用 Pdfium 进行渲染。它在 dll 中嵌入了非托管的 pdfium.dll,并在运行时将其解压缩到应用程序文件夹。这在安装应用程序时不起作用,因为用户没有对 c:/Program Files/ 的写入权限。
有没有办法在不先将它们写入磁盘的情况下加载这些 dll?
从 dll 中提取它们并使用 Assembly.Load 加载不起作用,因为它是非托管 dll。
我们使用 Syncfusion.PdfViewer.WPF 来显示 PDF。从版本 16.1.0.24 开始,它使用 Pdfium 进行渲染。它在 dll 中嵌入了非托管的 pdfium.dll,并在运行时将其解压缩到应用程序文件夹。这在安装应用程序时不起作用,因为用户没有对 c:/Program Files/ 的写入权限。
有没有办法在不先将它们写入磁盘的情况下加载这些 dll?
从 dll 中提取它们并使用 Assembly.Load 加载不起作用,因为它是非托管 dll。
从 16.3 版本开始,Pdfium dll 嵌入在 PdfViewer 程序集中,并且 Pdfium dll 将在运行时提取到应用程序文件夹中,以呈现复杂的形状、图像和文本而没有任何缺陷。如果应用文件夹没有写权限,可能会报异常。但应用程序路径不必始终具有写入权限,您可以使用以下任何解决方案从示例级别解决报告的错误。
解决方案1:从16.3版本开始,您需要在示例级别添加以下代码片段,以将渲染引擎更改为使用SfPdf渲染引擎,同时避免在应用程序文件夹中生成Pdfium dll。
PdfDocumetView pdfDocumentView = new PdfDocumentView();
pdfDocumentView.RenderingEngine =
Syncfusion.Windows.Forms.PdfViewer.PdfRenderingEngine.SfPdf;
pdfDocumentView.Load("Sample.pdf");
解决方案 2: 如果您需要使用 Pdfium 渲染引擎以及避免在写权限受限文件夹中生成 Pdfium dll。您可以通过设置 ReferencePath 属性重定向在授予写入权限的自定义路径中提取 Pdfium 程序集。
PdfDocumetView pdfDocumentView = new PdfDocumentView();
pdfDocumentView.ReferencePath = @"D:\ReferencePath\";
pdfDocumentView.Load("Sample.pdf");
注意:在运行时,PDF 查看器将检查ReferencePath属性中提供的自定义路径。如果您已经将 Pdfium dll 放置在 UG 链接 ( https://help.syncfusion.com/windowsforms/pdfviewer/how-to/use-pdfium-rendering-engine ) 中提到的自定义路径中,它将引用已经来自该位置的可用 dll,而无需生成 dll。
问候,
Uthandaraja S(我为 Syncfusion 工作)