Как программно вставлять JavaScript в файлы PDF?
Можно ли это сделать без Adobe Professional?
Моя цель: я хочу, чтобы диалоговое окно печати отображалось сразу после открытия PDF-файла.
Я знаю, что это можно сделать с помощью кода JavaScript, встроенного в документ.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы разрабатываете на Java, посмотрите iText: http://www.lowagie.com/iText/ Я думаю, это поддерживает то, что вы ищете.
Также есть несколько версий .Net: http://www.ujihara.jp/iTextdotNET/en/
Я изучил PDF Технические характеристики.
Оказывается, формат файла PDF не так уж и сложен.
У него есть хорошая функция, которая позволяет изменять документ, просто добавляя новое содержимое в конец файла.
Если вы пытаетесь сделать то же самое ... не бойтесь! пойдите и посмотрите спецификации.
Итак, вы просто добавляете новые и обновленные потоки объектов, за которыми следуют обновленная таблица перекрестных ссылок (xref) и трейлер? Похоже, вам нужно иметь возможность анализировать существующие потоки объектов и вычислять байтовые смещения.
iText (и iText_Sharp_) вполне способны добавлять JS в существующий PDF ... действия на странице, ссылки, скрипт уровня документа, что угодно.
Это было написано с учетом Java, но код C# выглядел бы почти идентичным (если не совсем таким же, с исключенной обработкой исключений, подобной этой).
PdfReader myReader = new PdfReader( myFilePath ); // throws IOException
PdfStamper myStamper = new PdfStamper( myReader, new FileOutputStream(outPath) ); // throws IOE, DocumentException
// add a document script
myStamper.addJavaScript( myScriptString );
// add a page-open script, 1 is the first page, not zero0
PdfAction jsAction = PdfAction.javaScript( someScriptString );
myStamper.setPageAction( PdfWriter.PAGE_OPEN, jsAction, myStamper.getWriter(), pageNumber ); // throws PdfException (for bad first param)
PdfFormField button = PdfFormField.createButton(myWriter, PdfFormField.FF_PUSHBUTTON);
button.setWidget( myRectangle, PdfAnnotation.HIGHLIGHT_INVERT );
// the important part, adding jsAction
jsAction = PdfAction.javaScript( buttonScriptString );
button.setAdditionalActions( PdfAnnotation.AA_DOWN, jsAction ); // mouse down
myStamper.addAnnotation( pageNum, button );
myStamper.close(); // write everything out, throws DocumentException, IOE
Вот простой пример: itextdocs.lowagie.com/tutorial/objects/anchors/index.php Посмотрите на раздел JavaScript.