根据pdf_reference_1-7,ToUnicode CMap具有比编码更高的优先级,但是在这里我有一个相反的文件,我该怎么办

时间:2019-07-01 08:02:57

标签: pdf pdfminer

原始代码:(\ 037)Tj

CID 31应该根据编码差异which is right

映射到“✓”

BaseEncoding:WinAnsiEncoding

差异:[31,uni2713]

CID 31根据ToUnicode CMap映射为“ 3”,这是错误的

CMap:

/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<< /Registry (Adobe)
/Ordering (UCS) /Supplement 0 >> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
2 beginbfchar
<1F> <0033>
<0020> <0020>
endbfchar
endcmap CMapName currentdict /CMap defineresource pop end end

1 个答案:

答案 0 :(得分:0)

在PDF格式中,渲染和文本提取是两个单独的路径。与HTML不同,在PDF中,这是两个单独的操作。

根据您提供的内容,页面内容流具有字符代码\ 037(八进制)。为了进行渲染,使用了编码,而差分是其中的一部分,因此使用字体编码uni2713的字形索引。

但是,对于文本提取,使用ToUnicode CMap。您可以通过在各种PDF阅读器中打开PDF并将其复制并粘贴到文本编辑器中来进行验证。

这样做的原因是,虽然字符代码只能映射到特定字体中的一个字形,但相同的字符代码却可以映射到多个unicode值。说出U + FB01(连字)。

  

发现没有足够好的程序可以从pdf中提取文本和表格。

您可能没有看到我所工作的公司开发的文本和表格提取工具。 https://www.pdftron.com/document-understanding

https://www.pdftron.com/pdf-tools/pdf-table-extraction