javascript - 使用 iText 从 PDF 获取 Javascript
问题描述
我正在使用 iText 尝试从 PDF 的字段中获取 Javascript。我注意到 usingGetAdditionalAction()
会给我我需要的 Javascript,除非代码有一定的长度。如果我将 JS 放在一个字段上,假设onMouseEnter
它的长度超过约 5 行,GetAdditionalAction()
则会将此代码截断为字母数字字符串。在我的示例中,我试图在 if 语句中获取一些代码,但由于它太长,它返回类似:630 0 R
。我在网上找不到任何关于此的信息或任何其他人谈论它。帮助将不胜感激。
解决方案
如果我将 JS 放在一个字段上,假设
onMouseEnter
它的长度超过约 5 行,GetAdditionalAction()
则会将此代码截断为字母数字字符串。
实际上GetAdditionalAction()
不会截断。您观察到的是,在生成JavaScript操作时可以选择 PDF 生成器:
JS – 文本字符串或文本流 – (必需)包含要执行的 JavaScript 脚本的文本字符串或文本流。 PDFDocEncoding或 Unicode 编码(后者由 Unicode 前缀U+FEFF标识)用于对字符串或流的内容进行编码。
(ISO 32000-1,表 217 – 特定于 JavaScript 操作的附加条目)
显然,如果脚本长达约 5 行,则您的 PDF 生成器使用文本字符串,否则使用文本流。因此,当您从操作字典中检索JS条目的值时,请执行以下操作action
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]
}
推荐阅读
- azure - 使用天蓝色密钥进入天蓝色服务器?
- scss-mixins - 在 scss 文件中使用 mixin
- power-automate - 按组织者过滤日历事件查询
- forms - TYPO3 Extbase createAction - 如何使用 f:form 创建新的 IRRE 关系?
- android - 如何反编译luajit二进制字节码?
- python - 需要身份验证令牌时从 Python 发送 Exchange 电子邮件的最佳方式
- python - 默认为特定 python 包的依赖项急切升级(pip)?
- javascript - 带有 PHP 和 JS/jQuery 的下载管理器
- javascript - 为什么值匹配时文本显示不正确
- python - 如何每次使用不同的代理运行带有 selenium 的 python 脚本