MyT*_*tle 8 java printing pdf applet jbig2
请给我一些库,它们可以帮助我打印包含JBIG2编码图像的PDF文件.PDFRenderer
,PDFBox
不要帮助我.这些库可以打印简单的PDF,但不能打印包含JBIG2图像的PDF.PDFRenderer
尝试修复它(根据PDFRedndrer的bug跟踪器上的bug问题),但仍然有些页面(特别是条形码存在的地方)不想打印.
PS我javax.print
在applet中使用API
谢谢!
更新:也试过ICEPdf,太不想工作了.
我得出结论,所有这些库(PDFRenderer,ICEPdf,PDFBox)都使用 JPedals
jbig2解码器.Bug(某些页面未打印)来自此解码器库.该解码器的开源版本(用于PDFRenderer,ICEPdf,PDFBox)不再受支持,但是JPedal
该项目有一个新的商业分支,他们写道,这个bug已在新的商业版本中修复,售价9美元ķ.
有任何想法吗?
更新2:昨天我试图用其他开源库取代JPedal的免费jbig2-imageio
库.但是我没有取得任何成功的结果,所以我在他们项目的页面上创建了一个新主题(google-code的论坛 - 这里).将不胜感激任何帮助.
Borisvl 的 JPedal 库的一个分支位于
https://github.com/Borisvl/JBIG2-Image-Decoder#readme
其中包含速度改进,我相信它也应该修复您的错误。
编辑:该错误与简单的范围检查有关。基本上,您需要防止 GetPixel 访问位图范围之外的 x,y 值。
调用getPixel之前需要确保满足以下条件
col >= 0 且 col < bitmap.width row >= 0 且 row < bitmap.height
这是一些带有一些小范围检查的 Delphi 代码。我无法自己测试 Java 代码,但您需要更改 src/org/jpedal/jbig2/image/JBIG2Bitmap.java
procedure TJBIG2Bitmap.combine(bitmap: TJBIG2Bitmap; x, y: Integer; combOp: Int64);
...
...
var
begin
srcWidth := bitmap.width;
srcHeight := bitmap.height;
srcRow := 0;
srcCol := 0;
if (x < 0) then x := 0;
if (y < 0) then y := 0;
for row := y to Min(y + srcHeight - 1, Self.height - 1) do // <<<<<<<< HERE
begin
for col := x to x + srcWidth - 1 do
begin
srcPixel := bitmap.getPixel(srcCol, srcRow);
Run Code Online (Sandbox Code Playgroud)
安德鲁。