解码 PDF 文档中文本的 FlateDecoded 部分

2024-04-13

Using peepdf https://code.google.com/p/peepdf/我正在分析两个简单的 pdf 文件。这两个文件都包含单行文本(“ZYXWVUTSRQQRSTUVWXYZ”),并且都是在 Mac OS X 上创建的。

第一个文件是使用 TextEdit 创建的。只有三个流,查看第一个流(使用 peepdf 自动解码)可以清楚地显示文本。

PPDF> stream 4

q Q q 72 707.272 468 12.72803 re W n /Cs1 cs 0 sc q 0.9790795 0 0 -0.9790795 72 720
cm BT 0.0001 Tc 11 0 0 -11 5 10 Tm /TT1 1 Tf (ZYXWVUTSRQQRSTUVWXYZ) Tj ET
Q Q

第二个文件是用 MS Word 创建的。有四个流,但无法找到解码的文本。查看 Word 文档中的相应流并不会显示解码后的字符串:

PPDF> stream 4

q Q q 18 40 576 734 re W n /Cs1 cs 0 0 0 sc q 0.24 0 0 0.24 90 708.72 cm BT
-0.0004 Tc 50 0 0 50 0 0 Tm /TT2 1 Tf [ (!") -1 (#) -1 ($) -1 (%&'\() -1 (\))
-1 (*) -1 (*) -1 (\)) -1 (\() -1 ('&%$) -1 (#) -1 (") -1 (!) ] TJ ET Q q 0.24 0 0 0.24 239.168 708.72
cm BT 50 0 0 50 0 0 Tm /TT2 1 Tf (+) Tj ET Q Q

我不清楚该字符串在文件中的位置或该流中的信息的含义。有什么见解吗?


我不清楚字符串在文件中的位置

一般来说,您不会在内容流中看到明文,因为那里使用的编码不需要是标准编码,不需要任何 ASCII 编码。

[ (!") -1 (#) -1 ($) -1 (%&'\() -1 (\)) -1 (*) -1 (*) -1 (\)) -1 (\() -1 ('&%$) -1 (#) -1 (") -1 (!) ] TJ

此操作在其数组操作数中包含您的ZYXWVUTSRQQRSTUVWXYZ对某些字符对进行一些字距调整。

它看起来像是使用从 33 (= 0x21 = '!') 开始的字节的临时编码。 '!'用于所需的第一个字形,Z, '"' 表示需要第二个Y, '#' 代表第三个X等等。您的测试字符串不仅以这些字符开头,而且以它们结尾,上面的数组也是如此,(!") -1 (#) ... (#) -1 (") -1 (!).

检查所使用字体的定义(TT2)。它可能(或可能不)包含帮助您解码此编码的信息。

或者该流中的信息意味着什么。有什么见解吗?

要了解 PDF 内容流的内容,您应该阅读 PDF 规范的相关部分ISO 32000-1 http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf,特别是第8章Graphics and 9 Text.

由于您的问题集中在文本内容的识别上,例如阅读第 9.10.2 节将字符代码映射到 Unicode 值:

合格的读者可以按照给定的优先级使用这些方法,将字符代码映射到 Unicode 值。特别是,带标签的 PDF 文档应至少提供以下方法之一(请参阅 14.8.2.4.2,“带标签的 PDF 中的 Unicode 映射”):

  • 如果字体字典包含转UnicodeCMap(参见 9.10.3,“ToUnicode CMaps”),使用该 CMap 将字符代码转换为 Unicode。

  • 如果字体是使用预定义编码之一的简单字体MacRoman编码, Mac专家编码, or WinAnsi编码,或者有一个编码,其差异数组仅包含取自 Adob​​e 标准拉丁字符集的字符名称以及符号字体中的命名字符集(请参阅附录 D):

    a) 根据表D.1和字体的对应关系将字符代码映射到字符名称差异 array.

    b) 查找角色名称Adobe 字形列表(参见参考书目)获取对应的Unicode值。

  • 如果字体是使用表 118 中列出的预定义 CMap 之一的复合字体(Identity–H 和 Identity–V 除外)或其后代 CIDFont 使用 Adob​​e-GB1、Adobe-CNS1、Adobe-Japan1 或 Adob​​e-Korea1人物收集:

    a) 根据字体的 CMap 将字符代码映射到字符标识符 (CID)。

    b) 从字体的 CMap(例如 Adob​​e 和 Japan1)获取其使用的字符集的注册表和排序来电显示系统信息字典。

    c) 通过以以下格式连接注册表和步骤 (b) 中获得的排序来构造第二个 CMap 名称注册-排序–UCS2(例如,Adobe–Japan1–UCS2)。

    d) 获取具有步骤 (c) 中构造的名称的 CMap(可从 ASN 网站获得;参见参考书目)。

    e)根据步骤(d)中获得的CMap对步骤(a)中获得的CID进行映射,产生Unicode值。

注:其后代 CIDFonts 使用 Adob​​e-GB1、Adobe-CNS1、Adobe-Japan1 或 Adob​​e-Korea1 字符集(如 CIDSystemInfo 字典中指定)的 Type 0 字体应具有与符合标准的 PDF 版本相对应的补充编号。读者。有关给定 PDF 版本对应的字符集列表,请参阅表 3。 (可以使用这些字符集的其他补充,但如果补充的编号高于与受支持的 PDF 版本对应的补充,则仅后一补充中的 CID 被视为标准 CID。)

如果这些方法无法生成 Unicode 值,则无法确定字符代码代表什么,在这种情况下,符合要求的读者可以选择自己选择的字符代码。

Edit: 关于评论

其中一个对象提供了一些字体信息。它是“JJOWGO+Cambria”,并将对象 16 引用为“字体文件”,该文件也是不可读的。我会查看手册。在网上找不到任何有关“JJOWGO”的信息。

您不会找到任何具体内容JJOWGO因为它很可能是一个随机密钥序列,前缀为Cambria指示并非嵌入该字体的全部,而只是嵌入了其中的一个子集。比照。第9.6.4节字体子集 of ISO 32000-1 http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf:

PDF 文档可能包含 Type 1 和 TrueType 字体的子集。描述字体子集的字体和字体描述符与普通字体略有不同。这些差异允许合格的读者识别字体子集并合并包含相同字体的不同子集的文档。 (有关字体描述符的更多信息,请参阅第 9.8 节“字体描述符”。)

对于字体子集,字体的 PostScript 名称 — 字体的值BaseFont条目和字体描述符FontName条目——应以标签开头,后跟加号 (+)。标签应由六个大写字母组成;字母的选择是任意的,但同一PDF文件中的不同子集应具有不同的标签。

示例 EOODIA+Poetica 是 Poetica®(一种 1 类字体)子集的名称。

 <<
 /FontBBox [ -1475 -2463 2867 3117 ]
 /StemV 0
 /FontFile2 16 0 R
 /Descent -222
 /XHeight 467
 /Flags 4
 /Ascent 950
 /FontName /JJOWGO+Cambria
 /Type /FontDescriptor
 /ItalicAngle 0
 /AvgWidth 615
 /MaxWidth 2919
 /CapHeight 667
 >>

该字体描述符不包含明显的编码信息。看看实际情况Font字典并查找转Unicode条目,参见上面第 9.10.2 节的引用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解码 PDF 文档中文本的 FlateDecoded 部分 的相关文章

  • 将 PDF 存储在 MySQL 数据库中

    我正在开发一个应用程序 我需要创建 PDF 格式的发票 我在用着pdf包 https github com psliwa PdfBundle并且 PDF 文件已正确创建 public function helloAction format
  • 如何在 ionic 应用程序中显示 pdf 文件而无需下载

    我所做的事情 在应用程序浏览器中使用 使用谷歌文档 使用的网页视图 所以我尝试了所有这些方法来使用 ionic 在 Android 设备中显示 pdf 文件 但没有用 我可以在所有这些方法中看到下载按钮 谁能告诉我如何在没有用户下载选项的情
  • 在 Ruby 中创建 Microsoft Word (.docx) 文档

    有没有一种简单的方法可以在 Ruby 应用程序中创建 Word 文档 docx 实际上 就我而言 它是一个由 Linux 服务器提供服务的 Rails 应用程序 类似的宝石Prawn http prawn majesticseacreatu
  • 在 Word 2010 中复制形状而不使用 .Select?

    是否可以在 Word 2010 中复制形状而无需借助 Select 根据开发中心 http msdn microsoft com en us library office ff835500 aspx the Anchor属性返回形状的锚定范
  • iTextSharp 从 WPF 固定文档生成 PDF

    我有一个简单的 WPF 应用程序 可以显示和打印一些内容 使用固定文档进行报告 如何使用免费且开放的解决方案从中生成 PDF 比如iTextSharp WPF 固定文档 也称为 XPS 文档 是对 PDF 的明显改进 它具有 PDF 所缺乏
  • 在 ionic 中从 Base64 打开 pdf

    因此 我将 Jasper 报告转换为 pdf 然后在 REST 控制器中转换为 base64 我该如何将其传输到我的 ionic 3 应用程序 我研究了 Ionic Native Document Viewer 但为了做到这一点 我需要将文
  • 将隐藏(生物识别)数据附加到 pdf 上的数字签名

    我想知道是否可以使用 iText 我用于签名 或 Java 中的其他工具在 pdf 上添加生物识别数据 我会更好地解释一下 在手写板上签名时 我会收集签名信息 例如笔压 签名速度等 我想将这些信息 java中的变量 与pdf上的签名一起存储
  • Office JavaScript API:突出显示文档中的文本

    我正在使用 Microsoft Office JavaScript API 开展一个业余项目 我一直依赖着文档 https learn microsoft com en us office dev add ins reference jav
  • 如何使用 iTextSharp 设置 PDF 段落或字体行高?

    如何使用 iTextSharp 更改 PDF 字体或段落的行高 排版中的行距称为行距 如果可以使用行间距 则可以使用 Paragraph Leading 或 Paragraph LeadingMultiplier 看http itextsh
  • Rails 中的 PDF 导出

    我需要将包含一些图表的 HTML 页面导出为 PDF 有哪些好的 gem 可以做到这一点 PDFKit http railscasts com episodes 220 pdfkit http railscasts com episodes
  • 使用 JavaScript 进行 HTML 到 MS Word 的页眉和页脚转换

    Am rendering my whole HTML page into MS word Here I tried by referring this link below https phppot com javascript how t
  • Word通过vba宏删除tabe列出现错误

    我想将excel中的数据复制到word表中 然后从表中删除一些列 我可以将数据复制到表中 但是当我删除列时会出现错误 无法访问此集合中的各个列 因为该表具有混合的单元格宽度 我的代码 Public Tbl1 As Table Sub cal
  • 使用 Quartz 创建 PDF 注释 (iOS)

    有人设法使用 Quartz 在现有 PDF 中编写自定义注释吗 我已经使用 CGPDFDocumentRef 等渲染了 PDF 现在工作正常 我成功地阅读了 Annots 字典 if CGPDFDictionaryGetArray page
  • 使用 PHP 将值插入可编辑 PDF,并保持可编辑状态

    我有一个带有可编辑字段的 PDF 我希望将 HTML 表单中的值传递到此 PDF 中 我尝试过使用 FPDF 并且它有效 但是将值传递到 PDF 后 pdf 中的字段不再可编辑 另一个缺点是 在将值传递到 PDF 时 我们必须为每个字段指定
  • 使用 JavaScript 生成 PDF 文件

    我正在尝试将 XML 数据从网页转换为 PDF 文件 并且希望能够完全在 JavaScript 中完成此操作 我需要能够绘制文本 图像和简单的形状 我希望能够完全在浏览器中完成此操作 我刚刚写了一个名为jsPDF https github
  • 是否可以修改 PDF 表单字段名称?

    情况是这样的 我有一个 PDF 其中包含自动生成的 pdf 表单字段名称 问题是这些名称不太用户友好 它们看起来像 topmostSubform 0 Page1 0 Website Address 0 我希望能够更改它们 使它们类似于 We
  • 如何将目录及其子目录中的所有 PDF 文件复制到一个位置?

    如何全部复制PDF文件从目录及其子目录到单个目录 实际上还有更多的文件 并且深度有些任意 假设四个目录的最大深度是公平的 我想这些文件需要重命名 如果a pdf例如 位于多个目录中 因为我会adding https ebooks stack
  • 如何使用 Ghostscript DLL 将 PDF 转换为 PDF/A

    如何使用 GhostScript DLL 将 PDF 转换为 PDF A 我知道我必须调用 gsdll32 dll 的导出函数 其名称为 gsapi init with args 但如何传递正确的参数 顺便说一句 我正在使用 C 请尝试从命
  • 使用 mupdf android 库导航到特定页面

    我如何使用 muPDF 库导航到特定页面 或者有没有办法让图书馆不记得我最后在那个pdf文件中浏览的是哪一页 Uri uri Uri parse path Intent intent new Intent MainActivity getC
  • 将UIWebView显示的PDF保存到本地

    我有一个UIViewController与UIWebView显示一个 pdf 文件 具体取决于之前单击的行UITableView 现在我想添加一个按钮 供用户在本地保存此 pdf 文件以供离线使用 然后还有第二个UITableView它应该

随机推荐