【问题标题】:How to convert the PDF content code to the type like "(<0034>) Tj"?如何将 PDF 内容代码转换为“(<0034>) Tj”之类的类型?
【发布时间】:2015-08-22 00:45:18
【问题描述】:

PDF 内容以多种方式保存,“(abc) Tj”、“() Tj”或“\u065”。

我想知道是否有办法将PDF代码转换为一种类型,无论是直接文本“(abc)Tj”,还是十六进制“()Tj”,还是八进制“\ u065”。

我认为如果将 PDF 转换并编码为一种类型,将更容易分析内容。

是否可以使用 Ghostscript 或其他东西来做到这一点?谢谢

【问题讨论】:

  • 你第二个“几种方式”的例子是错误的,应该是&lt;00350035&gt; Tj。将输入格式转换为它们所代表的确切字节的规则在正式规范中进行了概述,实施起来并不难。

标签: pdf pdf-generation ghostscript pdf-conversion pdf-parsing


【解决方案1】:

基本上,不,没有办法这样做。有两种字符串,常规字符串 '(' 和 ')' 分隔,以及十六进制字符串 '' 分隔。十六进制字符串不需要转义,而常规文本字符串确实需要用于“特殊”字符,如回车和换行。常规字符串中也允许使用八进制。

PDF 制作者可以随意混合和匹配所有他们喜欢的东西,但一般来说,给定的 PDF 制作者通常会自始至终使用一种技术。

因为 Ghostscript 的 pdfwrite 设备是 PDF 生成器,它(我相信)通常会以相同的方式生成所有输出。

不会做的是“转换”您的原始 PDF 文件。它会生成一个全新的 PDF 文件,该文件在外观上应该相同,但其内部结构与您的原始 PDF 没有任何相似之处。此外,一些元数据或保真度可能会丢失。

【讨论】:

  • 所以我没有办法改变 PDF 中的技术?
  • 从根本上说,没有。你当然可以编写代码来做到这一点。鉴于 的长度与 (!!) 或 (\041\041) 不同,更改字符串表示将更改内容流的长度,这意味着更改外部参照表。当然,内容流通常也会被压缩,因此您需要对其进行解压缩、更改字符串表示、重新压缩、将其写回原始文件(移动以下字节),最后更新外部参照表。似乎有很多麻烦没有收获。
  • ...似乎没有实际的理由来做这件事。字符串的格式仅用于存储。任何 PDF 解析器都应该完全忘记文本“!?”。存储为:(!?)&lt;213F&gt;(\41\77)。存储格式不会“按原样”保存在内存中,它会被解析为内部格式。
  • 我试图通过直接从未压缩的 PDF "[]TJ" 和 "()Tj" 中读取代码来从 PDF 中提取文本,但是我发现这很难做到,因为还有许多字符技术,如 或 (\041\041) 或 (!!)。此外,还有“\ToUnicode”和“\Differences”参数……太难了。所以我认为如果我将它们转换为单一技术,提取会更容易。
  • 我知道有一些免费的命令行工具,比如 PDFtoText.exe 等,但我想在我的程序中执行它并在我的应用程序区域呈现文本。
猜你喜欢
  • 2013-09-05
  • 1970-01-01
  • 2014-01-17
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
相关资源
最近更新 更多