Sun也会坑人,使用pdfrenderer生成图片之爬坑

        功能目的:要开发一个将PDF文件每一页切分成一张图片的功能。

        因为项目之前是使用的 pdfrenderer,客户上传了一个PDF文件之后,表示切分的有问题,全是空白图片。然后查后台,似乎是jar包内包的错,然后换了个jar,在 mvnrepository.com 上搜的,如下网址下载的:

        https://artifacts.alfresco.com/nexus/content/repositories/public/com/sun/pdfview/pdfrenderer/0.9.1-patched/

 

新的jar换上后,依旧报错,还是jar 包内部的错误:

java.nio.BufferUnderflowException
	at java.nio.Buffer.nextGetIndex(Unknown Source)
	at java.nio.HeapByteBuffer.get(Unknown Source)
	at com.sun.pdfview.PDFFile.readName(PDFFile.java:906)
	at com.sun.pdfview.PDFFile.readObject(PDFFile.java:448)
	at com.sun.pdfview.PDFFile.readObject(PDFFile.java:405)
	at com.sun.pdfview.PDFFile.dereference(PDFFile.java:315)
	at com.sun.pdfview.PDFObject.dereference(PDFObject.java:698)
	at com.sun.pdfview.PDFObject.getType(PDFObject.java:207)
	at com.sun.pdfview.colorspace.PDFColorSpace.getColorSpace(PDFColorSpace.java:136)
	at com.sun.pdfview.PDFImage.createImage(PDFImage.java:232)
	at com.sun.pdfview.PDFParser.doImage(PDFParser.java:947)
	at com.sun.pdfview.PDFParser.doXObject(PDFParser.java:932)
	at com.sun.pdfview.PDFParser.iterate(PDFParser.java:697)
	at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:102)
	at java.lang.Thread.run(Unknown Source)

        怒摔啊,要不要这么坑!好吧。看看日志,既然是 PDFFile 的 906 行报错,那么,把源文件下载下来改改吧。

PDFFile 906行如下:

while (isRegularCharacter(c = buf.get())) {

        一上眼,感觉是 get() 方法报的错!那么,在get 前是否可以做做判断啥的呢,这些类真不是常用的类,翻开java API 文档慢慢找。终于找到你:hasRemaining() ,看这个方法的描述,似乎就是那么回事儿。把 906 行修改如下:

while (buf.hasRemaining() && isRegularCharacter(c = buf.get())) {

 

        把 PDFFile  直接丢项目源码里面,当然路径用eclipse自动生成一下,重启tomcat,pdf上去重新切图,Oh~~GOOD! :)    问题解决。

        Sun出的 jar 包啊,即使它不是常用的标准包,但你这么坑我,真的合适么?

 

转载于:https://my.oschina.net/sxgkwei/blog/1609788

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值