PDF上的內容無法復制粘貼


起因也記錄一下,在考慮mmwave idea的時候,想着找一些雷達的書補充基礎知識。我電的雷達原理找不到高清的電子書,真的找不到。參考網上建議找了Radar Handbook這本書。

書打開了開始看,媽的里面的內容adobe acrobat復制粘貼不了,emmm,都是􀁎􀀀。

開始了兩天的PDF學習之路。

1.如何查看pdf.

  第一層:在PDF閱讀器里面,我能看到pdf的字體是aa,bb, encoding是cc,dd之類的。

  第二層:PDF用文本編輯器打開,能看到更具體的文件格式,但是里面內容被壓縮了,導致有點問題,我自己觀察到的就是obj的數量不准確之類的。

  第三層:PDF文件先進行解壓縮,再用文本編輯器打開,就可以了。

解壓縮的軟件,下載之后要從命令行才能進行解壓操作,這個有點意外。

以上知識來自luoyunhai

2.PDF顯示內容,存儲內容,編碼之間的關系

  PDF繪制的是字符的圖案(glyph),但是存儲時,可以存儲自定義的CID序列,比如<1E2S3R4R>代表一個雙字節的字符的CID。

  有了字體(包含一個glyph庫)和CID序列后,就可以繪制PDF。這里有兩種形式,1)定義一個CID到GID(glyph在庫里的ID)的map,叫做CMAP,把CID轉化為GID再使用。2)使用和GID相同的CID,感覺上1)是沒必要的方法。

  但是!這樣的pdf還是只讓看不讓摸,如果想用copy/paste操作來獲取里面的內容,並沒有什么有意義的內容,CID只代表了字符在字體的glyph庫里面的位置,和本身的意義無關了。所以這里一般需要

       TOUNICODE CMAP,記錄CID到UNICODE的映射,有了這個東西,復制粘貼的時候就知道返回給你什么UNICODE了。以上知識來自於luoyunhai這里這里

OK,結合一和二定位到問題,在PDF源文件里面搜索,沒有TOUNICODE這個obj,關於obj的定義參考luoyunhai

思路:

為PDF添加上TOUNICODE obj。

待解決:

1.如何提取一份可用的TOUNICODE,TOUNICODE是否對每個字體一樣,是否和編碼方式有關,畢竟我win下面生成的PDF是winansi編碼,radar handbook是identity-H編碼。

2.怎么把TOUNICODE加上去,按luoyunhai的思路似乎是在后面加量式的修改,但是還不知道怎么改。

3.如何把以上代碼完成自動化。

 

stackoverflow里面的這個例子似乎符合我的需求。但是是java環境,pdfbox是java的一個庫。

但是我連它的運行環境都不知道,而且pdfbox,pdfdebnugger又是什么。而且很sb的要對每一個字符寫一下。

emmm,現在看來,還是要全部都加在后面,假如對原有obj進行改動,xref會變得很厲害。

手動進行了初步實驗,效果很差,同樣文件foxit和chrome還能打開,adobe直接說文件出錯(懷疑可能用了tounicode cmap的subset。

debug1, 改變新字體的時候弄錯順序了,導致顯示錯誤,修改后adobe仍然報錯,foxit和chrome效果和原來一樣

debug2, cmap有一個/length屬性,這個/length我還沒有修改到對應值,

拿原始數據驗證之后,/length 的大小是stream [start]...[end]endstream之間的長度。

xref里面obj的順序是按照編號來的

debug2, startxref的數值忘記改了

 

FANCY! 

原文:Tracking radar

未添加cmap: 􀀴􀁒􀁁􀁃􀁋􀁉􀁎􀁇􀀀 􀁒􀁁􀁄􀁁􀁒􀀎

添加cmap后: 4RACKING RADAR. 中間空格是一個有問題的字符。

可以看到,小寫字母被映射到對應的大寫字母,而大寫字母被映射到其它字符,空格被映射到不知道哪里。

這貌似需要一個手動修改的過程,怎么這么傻逼呢,關鍵我不知道怎么補充一個cmap,在已經用了一個cmap的基礎上,怎么補充

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM