我知道我可以在我的c#可执行文件(不是网络应用程序)中显示PDF文件:
private AxAcroPDFLib.AxAcroPDF axAcroPDF1;
axAcroPDF1.LoadFile(@"somefile.pdf");
axAcroPDF1.Show();
但这是浏览器中常规的pdf查看器。我不希望这样。我希望使用Adobe控件在我的C#应用程序中使用完整的Adobe Standard或Professional功能。例如,如果我使用上面的代码,它会加载到C#应用程序中,我可以看到adobe工具栏(打印,保存等)但它对我来说没用,因为我需要像active这样无法完成的东西观众上面。具体来说,你无法保存,就像你不能在broswer中一样。
所以,我引用了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#应用程序之外打开它。我需要它在我的c#应用程序中打开,就像activex库一样。可以用这些库来完成吗?
如果我无法在我的c#应用程序中打开它,我希望能够“保持”与我绑定的c#应用程序,以便c#app知道何时关闭adobe应用程序。至少我会有一些控制措施。这意味着我会打开,adobe应用程序打开。我关闭了adobe应用程序,我的C#应用程序知道这一点,并使用activex库加载新更改的文档(因为我不再需要更改功能,只是显示。)
我的计算机上安装了完整版的adobe acrobat。它不是读者。
感谢您的帮助。
编辑: adobe acrobat sdk中的vb中有一个例子。我相信它被称为activeview。
答案 0 :(得分:2)
你可以查看ABCpdf。我不知道它是否具备此功能,但我们已将它用于我们的几个应用程序
答案 1 :(得分:1)
使用webbrowser控件可以显示内容。
答案 2 :(得分:0)
IText#可能会帮助你。
您可以创建PDF,我相信您可以使用它来阅读和修改它们。
至于在应用程序中显示.....我不知道如何用iText显示它们或者是否可能(尚未尝试过),抱歉。 iText确实允许您转换为RTF,这可能是一种方法。
答案 3 :(得分:0)
最佳选择是编写一个侦听器,在Adobe.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);
}