【问题标题】:How to Programmatically Inject JavaScript in PDF files?如何以编程方式在 PDF 文件中注入 JavaScript?
【发布时间】:2008-10-16 19:42:59
【问题描述】:

如何以编程方式在 PDF 文件中注入 JavaScript?

没有 Adob​​e Professional 也可以吗?


我的目标是:我想在打开 PDF 时立即显示打印对话框。

我知道这可以通过嵌入在文档中的 JavaScript 代码来完成。

【问题讨论】:

    标签: javascript pdf


    【解决方案1】:

    如果您使用 Java 进行开发,请查看 iText:http://www.lowagie.com/iText/ 我认为它支持您正在寻找的内容。

    周围还有一些.Net版本:http://www.ujihara.jp/iTextdotNET/en/

    【讨论】:

    【解决方案2】:

    iText(和 iText_Sharp_)非常有能力将 JS 添加到现有的 PDF...页面操作、链接、文档级脚本,应有尽有。

    The JavaDoc can be found here.

    这是用 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
    

    【讨论】:

      【解决方案3】:

      我已经研究完了PDF Specifications

      事实证明,PDF 文件格式并不难。

      它有一个很好的功能,可以通过在文件末尾附加新内容来修改文档。

      如果您尝试做同样的事情...不要害怕!去看看规格。

      【讨论】:

      • 所以您只需附加新的和更新的对象流,然后是更新的交叉引用表 (xref) 和预告片?似乎您需要能够解析现有的对象流并计算字节偏移量。
      猜你喜欢
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 2011-03-23
      相关资源
      最近更新 更多