2009-09-14 5 views
7

Я хотел бы открыть PDF-файл с именованным назначением с помощью 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, даже имеющее назначение Test2 на странице № 10. Это в основном игнорирует параметр назначения. Однако, если я использую другой параметр, такой как номер страницы, он отлично работает. Например:

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

всегда будет открыть документ PDF на странице 5.

Заранее спасибо за помощь

+0

Это работает, если вы выполняете команду из командной строки? Вы пробовали другие версии Acrobat или других систем? Это может быть ошибка Acrobat, или, может быть, ваша установка плоха? – Jason

+0

Я попытался выполнить его из командной строки, и он не сработал. Если я передаю параметр номера страницы, он работает, но не использует адресатов. Я даже установил новую версию Acrobat на новый компьютер и не имел никакого успеха. – 2009-09-15 14:30:43

+0

Если это не работает из командной строки, это даже не вопрос программирования. Это вопрос о Adobe Reader. На самом деле это не место для такого вопроса - попробуйте спросить по адресу http://forums.adobe.com/community/adobe_reader_forums/adobe_reader –

ответ

0

Вы создали адресат? Вы должны иметь стандартные или профессиональные версии Adobe Acrobat для того, чтобы сделать это:

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

+0

Да, я использую Adobe Acrobat 8 ​​Standard Version 1.8.3. Внутри Adobe все адресаты кажутся прекрасными. Щелчок по любому из них будет перемещаться по документу. – 2009-09-15 02:40:07

2

Что касается документации Adobe при открытии PDF-документа из командной оболочки, вы можете передать параметры в открытую команда с помощью/A переключатель, используя следующий синтаксис:

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

Если я опускаю OpenActions параметра все работает отлично, как:

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

Я не уверен, почему OpenActions разрывает открытие файла, но с его пропуском отлично работает.

2

У меня есть csv с 5 колонками. Столбец1 содержит имена PDF и столбцы Pagenumbers. В исполняемом файле отображается 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(); 

Это открывает выбранный PDF, имя которого в item.Text на странице, которая PageNumber находится в item.SubItems[4].Text

6

я использую следующий код :

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» внутри параметров. Это делает Adobe всегда открывать новый документ. В противном случае, если документ уже открыт, он не перемещает его в нужное место назначения. Это зависит от поведения, которое вы хотите для своего приложения.

Смежные вопросы