PDFBox又濑耶

今天PDFBox又罢.工了,某个扫描的pdf无法解析,报告错误如下:

Unknown stream filter:COSName{JBIG2Decode}

搜了一下,发现是不支持JBIG2格式的图片导致,https://issues.apache.org/jira/browse/PDFBOX-81 似乎提供了补丁,试了一下,没用,虽然不再报错了,但是导出来的是一半黑色的图片,似乎还是图片格式的问题,或者还是因为jai不支持这种新的图片格式吧。(实际上是导出的图片完全是黑色,再加上坐标映射错误导致)

关于JBIG2的说明:

JBIG2 is a format for black and white images that produces files "3-5 times smaller" than Group 4 FAX.  JBIG2 is particularly useful for businesses with large volumes of scanned paper, as the space savings is multiplied by millions of pages, for storage online and archival and network transmission.  It has been adopted by  customer  in the version of PDF that is supported in Acrobat 5.

 

It was great to see JPEG2000 support in the JAI Image I/O   Tools 1.0 beta, and it would be nice if its, in a sense, companion for black and white images were provided too.

 

See this web page for more information:

http://www.jpeg.org/jbigpt2.html

 

似乎是jpeg的一种格式?http://www.jpeg.org/public/fcd14492.pdf

目前还在积极寻找解决方案,ghost script似乎是一种,不过我倾向与开源的。目前连jbig2是一种什么样的图片都不知道,foxit editor都无法显示(最新版可以显示),也不要说导出来了。

//***************************************************

拿到图片了,这种格式古怪的图片windows无法预览,图片查看器无法打开,acdsee32无法打开,连ps8都无法处理。我了的去的!可以下载附件后去掉jpg后缀改为jb2,他实际上不是jpeg格式的。(实际上windows不支持这种图片,多数图片浏览软件也不支持它)

//***************************************************101220

JBIG2Viewer集成了一个本地的jbig2图片处理小工具,通过它可以查看一些jbig2的图片,从显示效果上看确实是只有黑白二色的图片,不过我的扫描图显然是更进一步的灰度图,这真的是jbig2格式的图片吗?还是它的一种进阶格式?套用jpedal的decoder发现无法解码,怀疑根本不是这种编码,茫然ing...

    黔驴技穷了丫,nnd,pdf的封闭性太好了,找了n个编辑工具都无法导出里面的图片,现在怀疑图片格式根本不是jbig2的,但是替换了几个原有的encoder都无法正常解析出图片,是虾米原因呢,难道要考虑用用gs?

//***************************************************

    有点转折了,g到icepdf论坛上提到jbig2的解析,某答复曰icepdf4.1是增加了jbig2并且可以显示的,这个是开源的,应该看看,按图索骥,可惜利用的还是jpedal,结果毫无疑问还是一样,看看所谓的icepdf pro表现如何吧。viewer表现一般,解析速度较慢,除了jbig2,其它的显示还ok,不过很多中文数字重叠在一起,文字解析应该还有问题,出错误没有抛出而是被吃掉。

//***************************************************

显然pdfbox的JBig2Filter是有问题的,在解码数据前没有设置setGlobalData,这似乎是应该从options中获取的,对于pdf的结构和各种解码器都没有太多的了解,所以看的很费劲。setGlobalData似乎是为了设置segment。或者他适合处理一种简单格式的jbig2图片,或者他在之前缺少对压缩数据的处理,例如增加header之类的预处理。

//***************************************************

    在debug状态下调试icepdf4.1.1,终于可以了,里面还是有个小bug的.原因也是globalData没有设置,不过和pdfbox的类之间差异较大,头疼,明天应该可以解决吧,总好过看几百页的英文文档在比对类去学习.

//***************************************************

http://hackipedia.org/File%20formats/Adobe%20PDF/Adobe%20Portable%20Document%20Format%20v1.7.pdf.raw-conversion.utf-8.txt

尽管很头疼的啃了一天资料并做debug,虽然大致了解了一些基本的数据结构,不过死活找不到存放globaldata的流,感觉上应该是options的filterStream,不过读取后全部是0,globaldata的filterstream也不行,接近崩溃了丫,了解和动手差别太大了,指望我一两天就了解pdf的结构显然不太现实.(成功和失败实际上之差了一点点阿:<)

//***************************************************101228

解决了,参考icepdf的代码,不过两者的类差别还是很大的,icepdf的结构比较简单,思路教直接. 正常设置了globaldata后可以解码出图像,imageIO是无法处理jbig2的.

不过又发现pdfbox的坐标平移出现了问题,另外还发现了乱码问题(文字),处理大图片的内存溢出的情况.

嗯,先把这些问题解决了,再参考一下其它软件的处理效果.

//***************************************************

实际上page对象中的content属性除了放置文字内容,如果是放图片对象时,里面会存放坐标投影信息(映射矩阵,cm).文字用BT+ET包含.

//***************************************************

关于bb平移的问题解决了,实际上这又是bb的一个bug,忘记剪掉页边距,虽然大多数文件的页边距都是0,但是不意味着所有的都是这样。没想到问题拖了一年才解决了

//***************************************************110107

再次fix bb的一个bug,处理某些早期转换的tiff图片时(显示客户的pdf是由acrobat5制作的),会把tiff图片显示为黑底白字,实际上导入tiff图片时会把它的文件头拆解出来,这和jbig2一样,然后导出时在组装header,其中有一个BlackIs1参数是作为反色的,不过客户的pdf文件没有这个参数,查询了adobe的官方格式文档,也没有发现有另外的参数设置反色,后来自己发现有一个Decode的数组参数,用两位数组分别代表北京和文字的颜色,相当奇怪adobe的文档中没有找到对应参数的说明,bb当然更不会有了,增加了对应参数的判断后,显示正常。

你可能感兴趣的:(apache,数据结构,windows,浏览器,Adobe)