通过转换.doc创建pdf,转换ps

通过转换.doc创建pdf,转换ps,pdf,pdf-generation,pdfbox,Pdf,Pdf Generation,Pdfbox,将.doc文件转换为.pdf文件时如何处理文本。我尝试使用Pdfbox拦截“Tj”运算符。判决 交换PDF的功能。同样,可以使用查看器应用程序查看生成的PDF文件,例如 被闯入 “PDF.Agai的交换功能”& “n,可以使用查看器应用程序查看生成的PDF文件,例如”。TJ运算符的参数为 [COSArray{[COSString{in}, COSInt{5}, COSString{t}, COSInt{5}, COSString{er}, COSInt{-4}, COSString{ch}, C

将.doc文件转换为.pdf文件时如何处理文本。我尝试使用Pdfbox拦截“Tj”运算符。判决 交换PDF的功能。同样,可以使用查看器应用程序查看生成的PDF文件,例如 被闯入

“PDF.Agai的交换功能”& “n,可以使用查看器应用程序查看生成的PDF文件,例如”。TJ运算符的参数为

[COSArray{[COSString{in}, COSInt{5}, COSString{t}, COSInt{5}, COSString{er}, COSInt{-4}, COSString{ch}, COSInt{5}, COSString{an}, COSInt{4}, COSString{g}, COSInt{5}, COSString{e }, COSInt{-2}, COSString{f}, COSInt{10}, COSString{eat}, COSInt{5}, COSString{ur}, COSInt{10}, COSString{es o}, COSInt{6}, COSString{f }, COSInt{-2}, COSString{P}, COSInt{6}, COSString{DF}, COSInt{6}, COSString{.}, COSInt{13}, COSString{ Ag}, COSInt{3}, COSString{ai}]}] and 

[COSArray{[COSString{n, t}, COSInt{6}, COSString{he }, COSInt{10}, COSString{r}, COSInt{-2}, COSString{esu}, COSInt{5}, COSString{lt}, COSInt{8}, COSString{in}, COSInt{5}, COSString{g}, COSInt{5}, COSString{ P}, COSInt{4}, COSString{DF}, COSInt{6}, COSString{ f}, COSInt{-2}, COSString{il}, COSInt{5}, COSString{e }, COSInt{8}, COSString{ca}, COSInt{4}, COSString{n b}, COSInt{3}, COSString{e }, COSInt{8}, COSString{view}, COSInt{9}, COSString{ed wit}, COSInt{6}, COSString{h a}, COSInt{14}, COSString{ v}, COSInt{-3}, COSString{ie}, COSInt{12}, COSString{we}, COSInt{8}, COSString{r}, COSInt{8}, COSString{ app}, COSInt{5}, COSString{li}, COSInt{5}, COSString{ca}, COSInt{4}, COSString{t}, COSInt{5}, COSString{io}, COSInt{7}, COSString{n, s}, COSInt{6}, COSString{uc}, COSInt{5}, COSString{h as}, COSInt{7}, COSString{ }]}]

这是因为.doc转换成pdf的方式吗?或者是因为在最后一个答案中引用了文本块。
COSInt
之间的那些
COSInt
的意义是什么?我不太了解textblock,但我认为如果我试图拦截Tj操作符,应该不会有问题。如果我试图处理从pdf文件创建的pdf文件,情况是否会一样?

首先:声明“a.doc文件转换为pdf文件”是不正确的。这不是任何形式的转换;相反,文档被呈现到虚拟打印机,虚拟打印机写出形成页面的PDF文本命令。对象(文本和图形)在PDF中的显示顺序不取决于原始文档的内容;虚拟打印机可以按任何顺序处理对象

不要混淆
TJ
TJ
。Per:

5.3.2显示操作员的文本

字符串Tj显示一个文本字符串

数组TJ显示一个或多个文本字符串,允许单个glyph定位。[…]数字以文本空间单位的千分之一表示

Tj
显示一个连续的文本字符串,对于
Tj
而言,中间的余弦是单个文本字符串之间的水平偏移。然而,这并不意味着用
Tj
绘制的所有内容都是一个单独的文本字符串。PDF生成器可以将单个较长的句子拆分为单独的
Tj
指令;例如,将相同字体和大小的文本分组在一起

类似地,
TJ
数组可能只包含单独文本片段之间非常小的调整,以实现字符级紧排或跟踪;但它也可能包含更大的距离来创建自定义空格、模拟制表符或套印字符

您所指的“文本块”是字符串操作数:

文本显示运算符的字符串操作数被解释为识别要绘制的图示符的字符代码序列

呈现给文本显示运算符的字符串可以是任意长度,甚至每个字符串只有一个字符代码,并且可以按任意顺序放置在页面上。将图示符分组为字符串对于文本的显示没有意义。通过一次调用文本显示操作符(如Tj)来显示多个glyph,产生的结果与通过单独调用每个glyph来显示这些glyph相同

一个可能的问题是
TJ
/
TJ
字符串的定位。通常,文本按阅读顺序呈现:从左到右,从上到下。但是,诸如页眉和页脚、数字或表格之类的项目可能总是首先呈现或最后呈现。此外,如果文本片段按字体/大小呈现,您可能会首先找到(例如)所有罗马文本,然后是所有斜体文本,最后是所有粗体文本

在大多数情况下,从PDF中准确提取原始文本是不可能的。
TJ
TJ
[a]都只格式化文本的水平跨距(实际上它们也可以渲染垂直文本),并且文本跨距之间的原始关系没有保留,因为虚拟打印机从一开始就没有意识到这一点

[a] 另外还有两个文本呈现命令:
执行与
TJ
TJ
相同的操作,但是除了将“当前点”定位到“下一行的开始”之外,还需要解释“前导”和“当前行的开始”的值

另一个警告是,文本操作数中的字符编码可能不是您所期望的。PDF打印机可以自由地重新排序或更改字符编码,例如,当字体已被子集时,或者访问默认字体编码之外的特殊字符。因此,您可能会将字符串作为

[ (\251 1985\205) 6.4 (2006 A) 24 (d) 1 (o) 9.7 (b) -12.3 (e) ] TJ
(PDF参考1.7第2页的第一行)。八进制字符
\251
(十进制为169)和
\205
(十进制为133)是字符
;第一个也是常规的ISO-Latin1代码,但第二个不是-本文本采用PDFEncoding(附录D,字符集和编码)。在文档中,不同字体的编码可能不同(也可能有不同编码的重复字体)。编码也可能是完全自定义的(使用
\000
表示“a”,使用
\001
表示“d”,等等),或者存储为与标准编码之一的差异:

7 0 obj @ 319814        % Encoding
<<
  /Type         /Encoding
  /Differences  [ 32 /space 38 /ampersand 44 /comma /hyphen /period /slash /zero /one /two /three 53 /five /six /seven /eight /nine /colon /semicolon 65 /A /B /C /D
      /E /F /G /H /I 75 /K /L /M /N /O /P 82 /R /S /T /U /V /W /X 90 /Z 95 /underscore 97 /a
      /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z 133
      /endash 141 /quotedblleft /quotedblright 169 /copyright ]
>>
endobj
“25”是底部的页码,“第1章”是显而易见的;但为什么“1简介”?这是一个解码错误吗?进一步检查显示“1”设置为1.98 pt大小,填充颜色为“白色”(当我在整页后面放置一个黑色矩形时,它实际显示出来)我猜这只是排版工人的一个技巧:通过在同一行中包含章节号,他可以让他的软件(Framemaker)自动从该行生成正确的“书签”文本,包括“1”。当然,“1”不应该在页面本身上可见,所以他将其设置为小而白

25
CHAPTER 1
1Introduction
The Adobe Portable Document Format (PDF) is the native file format of the ..