【问题标题】:Open a pdf file programmatically at a named destination在指定目的地以编程方式打开 pdf 文件
【发布时间】:2010-11-28 06:40:10
【问题描述】:

我想使用 WinForms (C#) 在指定目的地打开一个 PDF 文件。这是我的代码:

System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = "Acrobat.exe";
myProcess.StartInfo.Arguments = "/A \"nameddest=Test2=OpenActions\" C:\\example.pdf";
myProcess.Start();

它总是在第 1 页打开文件,即使在第 10 页有目标 Test2。它基本上忽略了目标参数。但是,如果我使用另一个参数,例如页码,它可以正常工作。例如:

myProcess.StartInfo.Arguments = "/A \"page=5=OpenActions\" C:\\example.pdf";

将始终在第 5 页打开 PDF 文档。

提前感谢您的帮助

【问题讨论】:

  • 从命令行执行命令是否有效?您是否尝试过其他版本的 Acrobat 或其他系统?可能是 Acrobat 错误,或者您的安装有问题?
  • 我尝试从命令行执行它,但它不起作用。如果我传递页码参数它可以工作但不使用目的地。我什至在新计算机上安装了新版本的 Acrobat,但没有任何成功。
  • 如果它在命令行中不起作用,那么这甚至不是一个与编程相关的问题。这是一个关于 Adob​​e Reader 的问题。这不是真正适合这类问题的地方 - 请尝试在 forums.adobe.com/community/adobe_reader_forums/adobe_reader 提问

标签: c# winforms pdf acrobat


【解决方案1】:

您是否设置了目的地?您需要拥有 Adob​​e Acrobat 的标准或专业版本才能执行此操作:

http://kb2.adobe.com/cps/317/317300.html

【讨论】:

  • 是的,我使用的是 Adob​​e Acrobat 8​​ 标准版 1.8.3。在 Adob​​e 内部,所有目的地似乎都很好。单击其中任何一个将在文档中导航。
【解决方案2】:

关于从命令外壳打开 PDF 文档时的 Adob​​e 文档,您可以使用以下语法使用 /A 开关将参数传递给打开命令:

myProcess.StartInfo.Arguments = "/A \"nameddest=Test2=OpenActions\" C:\\example.pdf";

如果我省略 OpenActions 参数,一切正常:

myProcess.StartInfo.Arguments = "/A \"nameddest=Test2\" C:\\example.pdf";

我不确定为什么 OpenActions 会中断打开文件,但忽略它可以正常工作。

【讨论】:

    【解决方案3】:

    Adobe Reader 在打开指定目的地方面存在一些错误。查看http://xenon.arcticus.com/open-pdf-named-destination-dde-c-c 了解一些信息和解决方法。

    【讨论】:

      【解决方案4】:

      我有一个 5 列的 csv。 Column1 包含 PDF 名称和 Column5 页码。 可执行文件显示 csv。 当我双击 csv 中的一行时,将执行以下代码:

      ListViewItem item = lvwItems.SelectedItems[0];
      Process myProcess = new Process();
      myProcess.StartInfo.FileName = "Acrobat.exe";
      myProcess.StartInfo.Arguments = "/A page=" + item.SubItems[4].Text + " " + item.Text;
      myProcess.Start();
      

      这会在页码位于item.SubItems[4].Text 的页面上打开名称位于item.Text 中的选定PDF

      【讨论】:

        【解决方案5】:

        我使用以下代码:

        string strNamedDestination  = "MyNamedDestination"; // Must be defined in PDF file.
        string strFilePath = "MyFilePath.pdf";
        string strParams = " /n /A \"pagemode=bookmarks&nameddest=" + strNamedDestination + "\" \"" + strFilePath + "\"";
        Process.Start("AcroRd32.exe", strParams);
        

        注意参数中的“/n”。它使 Adob​​e 始终打开一个新文档。否则,如果文档已经打开,它不会将其移动到正确的命名目的地。这取决于您希望应用程序的行为。

        【讨论】:

          猜你喜欢
          • 2011-02-22
          • 1970-01-01
          • 1970-01-01
          • 2011-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-20
          相关资源
          最近更新 更多