【问题标题】:Is it possible to open a PDF inside a c# application with Acrobat.dll?是否可以使用 Acrobat.dll 在 c# 应用程序中打开 PDF?
【发布时间】:2009-01-09 19:51:36
【问题描述】:

我知道我可以在我的 c# 可执行文件(不是网络应用程序)中显示 PDF 文件:

private AxAcroPDFLib.AxAcroPDF axAcroPDF1;
axAcroPDF1.LoadFile(@"somefile.pdf");
axAcroPDF1.Show();

但这就是浏览器中的常规 pdf 查看器。我不想要那个。我希望使用 Adob​​e 控件在我的 C# 应用程序中使用完整的 Adob​​e Standard 或 Professional 功能。例如,如果我使用上面的代码,它会加载到 C# 应用程序中,我可以看到 adobe 工具栏(打印、保存等),但这对我来说没用,因为我需要像 save 这样的东西,而 activex 无法完成上面的查看器。具体来说,您无法保存,就像您无法在浏览器中保存一样。

所以,我引用了 acrobat.dll 并尝试使用:

Acrobat.AcroAVDocClass _acroDoc = new Acrobat.AcroAVDocClass();
Acrobat.AcroApp _myAdobe = new Acrobat.AcroApp();
Acrobat.AcroPDDoc _pdDoc = null;
_acroDoc.Open(myPath, "test");
pdDoc = (Acrobat.AcroPDDoc)(_acroDoc.GetPDDoc());
_acroDoc.SetViewMode(2);
_myAdobe.Show();

它会打开 adobe acrobat,但会在我的 c# 应用程序之外打开它。我需要它像 activex 库一样在我的 c# 应用程序中打开。可以用这些库来完成吗?

如果我无法在我的 c# 应用程序中打开它,我希望能够将我的 c# 应用程序绑定到它,以便 c# 应用程序知道我何时关闭 adobe 应用程序。至少这样我会有一定的控制力。这意味着我会打开,adobe 应用程序会打开。我关闭了 adobe 应用程序,我的 C# 应用程序意识到了这一点,并使用 activex 库加载了新更改的文档(因为我不再需要更改能力,只是显示。)

我的计算机上安装了完整版本的 adobe acrobat。不是读者。

感谢您的帮助。

编辑: 在 adobe acrobat sdk 中有一个 vb 示例。我相信它被称为activeview。

【问题讨论】:

    标签: c# acrobat


    【解决方案1】:

    您可以查看ABCpdf。我不知道它是否有这个功能,但我们已经将它用于我们的几个应用程序

    【讨论】:

      【解决方案2】:

      使用网络浏览器控件可以显示内容。

      【讨论】:

        【解决方案3】:

        IText# 可以帮到你。

        您可以创建 PDF,我相信您可以使用它来阅读和修改它们。

        至于在应用程序中显示.....我不确定如何使用 iText 显示它们或者是否可能(尚未尝试过),抱歉。 iText 确实允许您转换为 RTF,这可能是一种方法。

        【讨论】:

          【解决方案4】:

          最好的选择是编写一个监听器,当 Adob​​e.exe 不再运行时,它会告诉您的调用代码。类似以下的东西(根据您的用途进行调整)应该可以工作:

          public void Open(string myPath)
          {
              Acrobat.AcroAVDocClass _acroDoc = new Acrobat.AcroAVDocClass();
              Acrobat.AcroApp _myAdobe = new Acrobat.AcroApp();
              Acrobat.AcroPDDoc _pdDoc = null;
              _acroDoc.Open(myPath, "test");
              _pdDoc = (Acrobat.AcroPDDoc) (_acroDoc.GetPDDoc());
              _acroDoc.SetViewMode(2);
              _myAdobe.Show();
              NotifyAdobeClosed += new EventHandler(Monitor_NotifyAdobeClosed);
              MonitorAdobe();
          }
          private void Monitor_NotifyAdobeClosed(object sender, EventArgs e)
          {
              NotifyAdobeClosed -= Monitor_NotifyAdobeClosed;
              //Do whatever it is you want to do when adobe is closed.
          }
          
          private void MonitorAdobe()
          {
              while(true)
              {
                  var adcount = (from p in Process.GetProcesses()
                                 where p.ProcessName.ToLower() == "acrobat"
                                 select p).Count();
                  if (adcount == 0)
                  {
                      OnNotifyAdobeClosed();
                      break;
                  }
              }
          }
          
          public event EventHandler NotifyAdobeClosed;
          public void OnNotifyAdobeClosed()
          {
              if (NotifyAdobeClosed != null)
                  NotifyAdobeClosed(this, null);
          }
          

          【讨论】:

            猜你喜欢
            • 2020-04-28
            • 2010-11-08
            • 1970-01-01
            • 2019-02-03
            • 1970-01-01
            • 2012-01-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多