使用 iText 从 PDF 获取 Javascript

Getting Javascript from PDF using iText

我正在使用 iText 尝试从 PDF 的字段中获取 Javascript。我注意到使用 GetAdditionalAction() 会得到我需要的 Javascript ,除非代码有一定的长度。如果我将 JS 放在一个字段上,让我们说 onMouseEnter 超过大约 5 行,GetAdditionalAction() 会将此代码截断为字母数字字符串。在我的示例中,我试图在 if 语句中获取一些代码,但由于它太长,它 returns 类似于:630 0 R。我在网上找不到任何关于此的信息,也找不到任何其他人在谈论它。将不胜感激。

If I put JS on a field for let's say onMouseEnter that is more than around ~5 lines long, GetAdditionalAction() will truncate this code into an alphanumeric string.

实际上GetAdditionalAction()不截断。您观察到的是,在生成 JavaScript 操作时可以选择 PDF 生成器:

JS – text string or text stream – (Required) A text string or text stream containing the JavaScript script to be executed. PDFDocEncoding or Unicode encoding (the latter identified by the Unicode prefix U+FEFF) shall be used to encode the contents of the string or stream.

(ISO 32000-1,Table 217 – 特定于 JavaScript 操作的附加条目)

显然你的 PDF 生成器使用 文本字符串 如果脚本长达 ~5 行长 文本流 否则。因此,当您从操作字典 action 中检索 JS 条目的值时,执行类似

的操作
PdfObject direct = action.Get(PdfName.JS, true);
if (direct == null)
{
    [handle case of missing JavaScript script in action]
}
else if (direct.GetObjectType() == PdfObject.STRING)
{
    PdfString scriptString = (PdfString) direct;
    [handle case of JavaScript script contained in text string]
}
else if (direct.GetObjectType() == PdfObject.STREAM)
{
    PdfStream scriptStream = (PdfStream) direct;
    [handle case of JavaScript script contained in text stream]
}
else
{
    [handle case of invalid JavaScript script object type]
}