无法从pdf复制特殊字符
我只需要从pdf文件中复制一些包含特殊字符的文本,但特殊字符(如dash-get)已转换为2 PFA从下方链接无法从pdf复制特殊字符,pdf,ubuntu,text,copy,Pdf,Ubuntu,Text,Copy,我只需要从pdf文件中复制一些包含特殊字符的文本,但特殊字符(如dash-get)已转换为2 PFA从下方链接 http://www.fileconvoy.com/dfl.php?id=g6a3426746a10af3b9992384375c5923396bce3660 附件有pdf源文件,我从那里复制数据,另一个是截图图像。。 需要紧急帮助。我也尝试过使用谷歌文档和Adobe Pro从pdf复制数据,但每次都得到类似的结果 简而言之: PDF中的所有信息都表明,PDF中被视为破折号的图示符实
http://www.fileconvoy.com/dfl.php?id=g6a3426746a10af3b9992384375c5923396bce3660
附件有pdf源文件,我从那里复制数据,另一个是截图图像。。
需要紧急帮助。我也尝试过使用谷歌文档和Adobe Pro从pdf复制数据,但每次都得到类似的结果 简而言之:
PDF中的所有信息都表明,PDF中被视为破折号的图示符实际上代表一个2。因此,要以不同的方式解释这些字形,您必须从根本上更改PDF字体中该字符的unicode映射值,或者求助于光学字符识别
详细内容:
让我们看看你的PDF pg_0001.PDF内容流的那一部分,你标记的单词来自其中
创建的项目包括:
0 -1.1065 TD
[(Fibroblast)-241.2(growth)-234.1(factor-21)-237.3(\(FGF-21\))-242.3(activity)-233.9(in)-237(High-fat)-237.9(diet)-234.9(\(HFD\))-238.3(fed)-234(ApoE)]TJ
/F6 1 Tf
6.7246 0 0 5.9768 357.3354 542.4944 Tm
(2)Tj
/F4 1 Tf
.8346 0 TD
(/)Tj
/F6 1 Tf
.3372 0 TD
(2)Tj
/F4 1 Tf
8.9663 0 0 8.9663 372.9826 538.5259 Tm
[(mice)-235.6(with)-233.5(adiponectin)-240.8(\(Acrp30\))-237.6(knockdown.)]TJ
这里的特殊字符实际上由字体/F6中的字符“2”=50=0x32表示
由于从字符串中的字符到实际打印的字形的映射可能是任意的,并且可能有正确解释的提示,但是,我们应该在该页面上查看字体/F6的定义:
<<
/FirstChar 44
/ToUnicode 21 0 R
/Encoding 22 0 R
/FontDescriptor 23 0 R
/BaseFont /KAHBDA+AdvP7DA6
/Subtype /Type1
/LastChar 50
/Type /Font
/Widths [833 0 0 0 0 0 833]
>>
因此,您的字体通过/ToUnicode映射得到增强,文本提取程序应该使用该映射来解释内容流中的字符。让我们看看这个映射:
/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo <<
/Registry (F6+0) /Ordering (T1UV) /Supplement 0 >> def
/CMapName /F6+0 def
/CMapType 2 def
1 begincodespacerange <2c> <32> endcodespacerange
2 beginbfchar
<2c> <002C>
<32> <0032>
endbfchar
endcmap CMapName currentdict /CMap defineresource pop end end
因此,这里的'2'=0x32被映射为表示Unicode代码0x0032,该代码再次是'2'
如果/ToUnicode映射不存在,文本提取程序可以在PDF对象22 0中使用/Encoding定义。但这里再次强调:
22 0 obj
<<
/Type /Encoding
/Differences [44 /comma 50 /two]
>>
这里,“2”=50被映射到名为/two的glyph,它再次使该glyph成为2
因此,PDF中除了轮廓图形定义本身之外的所有信息(理论上可以通过OCR’ing进行检查)都表明虚线轮廓确实是一个双字符
要使文本提取程序更符合您的喜好来解释该glyph,您应该将的/ToUnicode映射替换为,例如。不幸的是,映射是用filter/FlateDecode编码的,因此这不是一项简单的十六进制编辑器工作,而是需要解码等。简而言之:
PDF中的所有信息都表明,PDF中被视为破折号的图示符实际上代表一个2。因此,要以不同的方式解释这些字形,您必须从根本上更改PDF字体中该字符的unicode映射值,或者求助于光学字符识别
详细内容:
让我们看看你的PDF pg_0001.PDF内容流的那一部分,你标记的单词来自其中
创建的项目包括:
0 -1.1065 TD
[(Fibroblast)-241.2(growth)-234.1(factor-21)-237.3(\(FGF-21\))-242.3(activity)-233.9(in)-237(High-fat)-237.9(diet)-234.9(\(HFD\))-238.3(fed)-234(ApoE)]TJ
/F6 1 Tf
6.7246 0 0 5.9768 357.3354 542.4944 Tm
(2)Tj
/F4 1 Tf
.8346 0 TD
(/)Tj
/F6 1 Tf
.3372 0 TD
(2)Tj
/F4 1 Tf
8.9663 0 0 8.9663 372.9826 538.5259 Tm
[(mice)-235.6(with)-233.5(adiponectin)-240.8(\(Acrp30\))-237.6(knockdown.)]TJ
这里的特殊字符实际上由字体/F6中的字符“2”=50=0x32表示
由于从字符串中的字符到实际打印的字形的映射可能是任意的,并且可能有正确解释的提示,但是,我们应该在该页面上查看字体/F6的定义:
<<
/FirstChar 44
/ToUnicode 21 0 R
/Encoding 22 0 R
/FontDescriptor 23 0 R
/BaseFont /KAHBDA+AdvP7DA6
/Subtype /Type1
/LastChar 50
/Type /Font
/Widths [833 0 0 0 0 0 833]
>>
因此,您的字体通过/ToUnicode映射得到增强,文本提取程序应该使用该映射来解释内容流中的字符。让我们看看这个映射:
/CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo <<
/Registry (F6+0) /Ordering (T1UV) /Supplement 0 >> def
/CMapName /F6+0 def
/CMapType 2 def
1 begincodespacerange <2c> <32> endcodespacerange
2 beginbfchar
<2c> <002C>
<32> <0032>
endbfchar
endcmap CMapName currentdict /CMap defineresource pop end end
因此,这里的'2'=0x32被映射为表示Unicode代码0x0032,该代码再次是'2'
如果/ToUnicode映射不存在,文本提取程序可以在PDF对象22 0中使用/Encoding定义。但这里再次强调:
22 0 obj
<<
/Type /Encoding
/Differences [44 /comma 50 /two]
>>
这里,“2”=50被映射到名为/two的glyph,它再次使该glyph成为2
因此,PDF中除了轮廓图形定义本身之外的所有信息(理论上可以通过OCR’ing进行检查)都表明虚线轮廓确实是一个双字符
要使文本提取程序更符合您的喜好来解释该glyph,您应该将的/ToUnicode映射替换为,例如。不幸的是,映射是用filter/flateCode编码的,因此这不是一个简单的十六进制编辑器工作,而是需要解码等