java 端口映射 Jenkins nlp xampp vb6 ddos压力测试 arduino程序 python编程练习题 windows杀死进程命令 websocket库 div字体加粗 python类和对象 python实战 python简易教程 python中time java编程环境 java文件写入 java中的数据类型 java获取ip地址 java判断文件是否存在 java集合类 javaenum java连接sql java停止线程 java当前日期 java删除数组中的某个元素 linuxtail命令 linux中grep linux硬盘 python的用途 凯恩与林奇2下载 java获取时间戳 lol卡米尔 win10wifi dnf95b套 平原门下客三千 dnf胜利的证明有什么用 一键root软件下载 studioone
当前位置: 首页 > 学习教程  > 编程学习

PDF格式水很深

2021/1/9 1:54:39 文章标签: xmp格式

前一段时间接了个PDF数据提取的活, 之前也做了许多文件格式解析的事情, 只要拿到格式规范基本都没有出现搞不定的情况。何况原来就有pdf的第三方组件, 所以满口答应2天搞定。 谁知道做进去才发现,PDF真的水很深。光有第三方库还是远远不够的,对着ISO3200…

前一段时间接了个PDF数据提取的活, 之前也做了许多文件格式解析的事情, 只要拿到格式规范基本都没有出现搞不定的情况。何况原来就有pdf的第三方组件, 所以满口答应2天搞定。


谁知道做进去才发现,PDF真的水很深。光有第三方库还是远远不够的,对着ISO32000标准来回看,才发现这个东西真的是一个大杂烩,什么技术都用上了。解码、格式解析、数据提取一样一样的,每一个让人省心。光说个字体,就够人烦的了。细节我就不多说了,总之,PDF水很深。


不过坐了半天也算小有所成,这里给后来人指点指点路数吧。


PDF格式的规范现在用的是ISO32000-1,对应的PDF版本是1.7,要解析PDF建议首先来看看这个,下载地址就不贴了,搜一下吧,反正官方是要钱的,不过我这里还是搞到了免费的,拿这个文档问题不大。不过如果英文不过关,估计就得打消念头了。


然后是用点第三方库,本身PDF结构解析的开源库还是有一些的,有些质量好点,功能多点,有些差点。我这里试了一下,针对.net, 比较满意的有两个: iTextSharp 和 PdfSharp。iTextSharp没有主动帮你构建结构树, 所以构建结构树得从PdfReader上一步一步来, 先找到root然后按图索骥, 不过其实直接枚举所有Object也是个办法, 当然前提是pdf不是很大的时候可以这样做. PdfSharp帮你把初步的根结够弄好了, 不过下面的自己结构还是要自己一点一点沿着引用去找. 两者相比较, iTextSharp功能更全面一些, 不过如果是用来做基本功能, 也差不多够了.


至于如何按图索骥, 看ISO32000吧。


然后另外一个很重要的东西是XMP,这个是Adobe做的一款用于描述metadata的XMP架构,它也不是个省油的灯。如果你是用XmlElement的读写方式去做,也就没必要看我这里了,那个是苦力活。我一般用的是xsd描述架构,然后生成对应的类,最后直接进行序列化、反序列化操作,流程比较简便,也更安全一些,毕竟有架构在那里保障着。


不过这套办法对于XMP是行不通的,除非能够把XMP所有的schema文档全弄来,这个可不是个轻松的事情。所以得绕点路。幸亏Adobe发布了个XmpToolKit,这个给C++和Java用的,另外SourceForge上有CS转换版本的CsXmlToolKit,总算帮忙解决了问题. 另外XMP的规范文档也在下载包里面,还是帮助不小的. 具体用法就参照里面的specification和document吧。不多说了。


最后给个小工具的链接,就是我用iTextSharp做的PDF文件结构查看器,分析数据内容挺有用:

http://download.csdn.net/detail/esmool/4919927


本文链接: http://www.dtmao.cc/news_show_1100079.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?