AxAcroPDFLib.AxAcroPDF 对象的 LoadFile() 方法不能用于加载已打开的 PDF 文件

编程


我制作了一个 Windows 桌面应用程序(用 C# 编写),当用户给出 pdf 的路径并单击按钮时,我使用 AxAcroPDF 控件在表单上显示 pdf 文件。 Pdf 文件位于一个网络共享文件夹中,多个用户可以访问该文件夹。
(我使用对象 AxAcroPDFLib.AxAcroPDF 的 LoadFile() 方法)

这工作正常。 但是,当我的应用程序尝试打开的同一个 pdf 文件已使用 Adob​​e Reader 打开时,我的应用程序将无法打开同一个 pdf 文件。

如果我的应用程序安装的 PC 具有 Adob​​e reader 7,则应用程序会抛出错误消息“System.ApplicationException 加载 PDF 模板失败”,并且应用程序冻结。

如果运行 PC 的应用程序安装了 Adob​​e Reader X,则不会出现错误,但会永远出现加载屏幕。

但是使用我的应用程序在两台或多台电脑上同时打开相同的 pdf 效果非常好。

有人可以帮我解决这个问题吗?

解决方案1

我找不到我期望找到的正确解决方案。 但为了避免程序崩溃,我在加载 pdf 之前进行了检查。

C#
bool PDFAvailable = axAcroPDF1.LoadFile(PDFPath.ToString());

如果布尔变量“PDFAvailable”返回 true,我将像下面一样加载 PDF。 否则会抛出正确的消息。

C#
bool PDFAvailable = axAcroPDF1.LoadFile(PDFPath.ToString());
                       
                       if (PDFAvailable == true)
                       {
                           axAcroPDF1.LoadFile(PDFPath.ToString());
                           axAcroPDF1.setShowToolbar(false); //disable pdf toolbar.
                           axAcroPDF1.Enabled = true;
                           
                       }
                       else
                       {
                           MessageBox.Show("Selected PDF Template Is Locked By Another Application.", ""Test Application"", MessageBoxButtons.OK, MessageBoxIcon.Information);
                           
                       }

解决方案2

我在这找到了一个解决方法 邮政

我们可以使用控件的“src”属性,而不是 LoadFile()。

解决方案4

如果路径太长,使用 src 属性定义路径也会生成错误。
一种解决方案是将文件复制到较短的路径文件,然后使用此新路径修改 src。

File.Copy(iRec.Path, “https://www.codeproject.com/Questions/423157/C:\temp\a.pdf”,true);
线程.睡眠(500);
axAcroPDF1.src = “https://www.codeproject.com/Questions/423157/C:\temp\a.pdf”;

还有其他解决方案吗?

コメント

タイトルとURLをコピーしました