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的基础上,怎么补充

 

posted @ 2020-12-21 23:25  zherlock  阅读(1325)  评论(0编辑  收藏  举报