2014-06-06 109 views
1

我想從一堆PDF文件和一些他們的挖掘一些文字輸出嵌入式CID fonts解碼CID字體代碼爲等價的ASCII字符

(cid:80)(cid:72)(cid:87)(cid:68)(cid:70)(cid:76)(cid:87)(cid:76)(cid:72)(cid:86)(cid:3) 
(cid:177)(cid:3)(cid:71)(cid:72)(cid:191)(cid:81)(cid:72)(cid:71)(cid:3)(cid:69)(cid:92 
(cid:3)(cid:56)(cid:49)(cid:3)(cid:43)(cid:68)(cid:69)(cid:76)(cid:87)(cid:68)(cid:87) 
(cid:3)(cid:68)(cid:86)(cid:3)(cid:70)(cid:76)(cid:87)(cid:76)(cid:72)(cid:86)(cid:3) 
(cid:90)(cid:76)(cid:87)(cid:75)(cid:3)(cid:80)(cid:82)(cid:85)(cid:72)(cid:3)(cid:87) 
(cid:75)(cid:68)(cid:81)(cid:3)(cid:20)(cid:19)(cid:3) 

當我看那個確切的片斷在PDF中的文字,字母肯定是轉換爲ASCII:

screenshot of corresponding portion of pdf

這可能表明,強力解碼將工作(閱讀snippe t的文本與一組CID代碼相對應,並以此方式創建映射),但這對於大量不同的PDF是否可靠?是否有從這些CID代碼到ASCII字符的可靠映射,還是會高度依賴PDF中的字體?如何確定像(cid:72)這樣的CID代碼對應的ASCII字符?

對於它的價值,我是extracting the text using PDFminer,它似乎是唯一真正報告CID代碼的工具。如果有更好的工具將PDF轉換爲HTML或任何其他可分析文本格式,我願意接受其他建議!

作爲額外的獎勵,這個問題似乎涉及到一些其他的懸而未決的問題,所以有聲譽的豐富的賞金放在這裏行:

回答

1

儘管你可以通過猜測來做這個簡單的例子,但要真正做到這一點,你需要2個額外的信息:

1)正在討論的字體的註冊表排序 - 補充(ROS)信息。這通常是'Adobe-Japan1-5'或其他類似的東西,是存儲在字體中的信息屬性。 ROS決定如何解釋CID。一個字體中的給定CID不一定與另一個字體中的CID相同,除非這些ROS是相同的。這就是說:Adobe-Japan1-5中的CID12345與Adobe-GB1-3中的CID12345不一樣!

2)用ROS信息武裝起來,選擇一個兼容的CMap並通過它進行解碼。 ASCII是有點短視的;我會去使用哪個ASCII是一個子集的Unicode。您可以在CID http://sourceforge.net/projects/cmap.adobe/files/

更多信息,找到用於Adobe定義玫瑰的CMap文件和CMap的從發明者直接可在http://www.adobe.com/content/dam/Adobe/en/devnet/font/pdfs/5014.CIDFont_Spec.pdf