【问题标题】:PDF: How to change/decode stream into text?PDF:如何将流更改/解码为文本?
【发布时间】:2015-04-04 04:45:34
【问题描述】:

该文档仅包含文本,没有图像 PDF 的相关部分如下:

 trailer
 <</Root 1 0 R>>

1 0 obj
<</Type/Catalog/Pages 3 0 R>>
endobj

3 0 obj
<</Type/Pages/Kids[4 0 R]/Count 1/Rotate 0/ITXT(5.0.6)>>
endobj

4 0 obj
<</Type/Page
  /MediaBox[0 0 612 1008]
  /Rotate 0
  /Parent 3 0 R
  /Resources<<
      /ProcSet[/PDF/Text]
      /ExtGState 12 0 R
      /Font 13 0 R>>
  /Contents 5 0 R
  /Annots[24 0 R]>>
 endobj

 12 0 obj
 <</R7 7 0 R>>
 endobj

 7 0 obj
<</Type/ExtGState /OPM 1>>
endobj

13 0 obj
<</R8 8 0 R
  /R10 10 0 R>>
endobj

8 0 obj
<</BaseFont /LRSXWR+TimesNewRoman
  /FontDescriptor 9 0 R
  /Type/Font
  /FirstChar 1
  /LastChar 41
  /Widths[ 
       333 722 250 611 722 611 722 667 722 722 667 556 556 389 
       722 667 722 722 500 333 444 389 500 278 278 500 333 500 
       444 500 278 250 889 250 500 500 444 500 278 778 500]
   /Encoding 16 0 R
   /Subtype/TrueType>>
   endobj

16 0 obj
<</Type/Encoding
  /BaseEncoding/WinAnsiEncoding
  /Differences[
            1/I/N/space/T/H/E/G/C/O/U/R/F/P/J/A/B
            /D/Y/asterisk/r/e/s/n/t/colon/o/f/h/a/p/l/period
            /M/comma/d/v/c/two/i/m/u]
  >>
  endobj

以上信息是出于需求目的,我要解码的内容对象为:

  5 0 obj 
  <</Length 5950>>
  stream
  q 0.12 0 0 0.12 0 0 cm
  /R7 gs
  0 0 0 RG
  0 0 0 rg
  q
  8.33333 0 0 8.33333 0 0 cm BT
  /R8 14.0388 Tf
  0.997231 0 0 1 90.1533 922.927 Tm
   [
    (SOH)-0.762768(STX)10.3078(ETX)10.019(EOT)10.888
    (ENQ)-6.34593(ACK)10.888(ETX)-7.12126(ENQ)2.22552
    (SOH)7.32006(BEL)-6.34489(ENQ)10.797(ETX)-7.1223
    (BS)7.04592(    )-6.34489(\n)10.797(VT)49.899
    (EOT)28.0288(ETX)-7.12126(  )2.22552(FF)-0.944827
    (ETX)10.0196(\r)-0.945874(\n)-5.8573(STX)10.3083
    (SQ)-13.6649(SI)10.798(DLE)-10.097(ETX)52.8727
    (SI)11.2835(STX)-6.83247(DC1)2.22657(ETX)10.0175
    (ENQ)-6.34489(SI)10.798(VT)49.8969(DC2)105.076
    (SI)11.2856(STX)-6.83457(SI)53.6511(ETX)61.442
    (SI)105.076(EOT)28.0288(ETX)-7.12335(BS)-1.52554
    (ENQ)2.22657(SI)11.2835(STX)-6.83247(DC1)10.798
    (SOH)-9.82286(BEL)2.22657(SI)
   ]TJ
   412.949 0 Td
   [(VT)-1.52763(ENQ)722.166]TJ
   .......
   .......

【问题讨论】:

  • (SOH)(例如)并没有出现在 PDF 中,对吧?也就是说,我猜测这是将值为 1 的字节转换为“可读”的结果(也可能是ctl-A)。因为否则,我希望 PDF 处理器呈现与字体索引 SOH 对应的三个字符(该字体中不存在这些字符,afaics)。

标签: pdf fonts


【解决方案1】:

将 PDF 流解码为文本并不是很简单,因为那里没有文本之类的东西。 你有一系列意义非常可变的字形。在您的情况下,您使用字体 13 0,它由 /LRSXWR+TimesNewRoman 的 41 个字符组成,并在 obj 16 0 中定义了更改,并解释了字形的含义。你必须有一些从“空格”到“”的翻译表(我很惊讶,在你的情况下有一个空格字形)。在其他情况下,这可能不是那么简单。我见过很多次,有一种嵌入字体,其字形按使用情况排序,除了视觉证据外,没有其他迹象表明哪个字形可能代表什么。

您确定要从 pdf 文件中读取文本吗?

【讨论】:

  • 是的,我肯定会这样做..你的意思是我必须先解码字体并更改字体,然后创建一些表格来这样做..你能举一些步骤来做这些事情吗跨度>
  • 问题是,您需要如何处理可变文档?是否都将来自同一来源或任何形式的 PDF 格式?我认为实现其他 PDF 阅读程序的全部功能可能没有意义。
  • 我的项目需要从这些类型的 pdf 文件中提取文本,并且 pdf 的体积很大,因此需要。请建议解码流的方式
  • 这是对一个坏问题的好答案。我看到您复制/粘贴一些 sn-ps 的文件是使用 iText 创建的。为什么不使用 iText 提取文本?
猜你喜欢
  • 2022-01-09
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 2019-10-20
相关资源
最近更新 更多