2

我知道我可以在我的 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。

4

4 回答 4

2

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

于 2009-01-12T14:03:34.407 回答
1

使用网络浏览器控件将是显示内容的一种选择。

于 2009-01-11T11:04:17.203 回答
0

Best option is to write a listener which tells your calling code when Adobe.exe is no longer running. Something like the following (with tweaks for your uses) should work:

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);
}
于 2009-02-11T19:25:56.783 回答
0

IText#可以帮助你。

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

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

于 2009-01-09T20:10:21.970 回答