打印包含JBIG2图像的PDF

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)都使用 JPedalsjbig2解码器.Bug(某些页面未打印)来自此解码器库.该解码器的开源版本(用于PDFRenderer,ICEPdf,PDFBox)不再受支持,但是JPedal该项目有一个新的商业分支,他们写道,这个bug已在新的商业版本中修复,售价9美元ķ.

有任何想法吗?

更新2:昨天我试图用其他开源库取代JPedal的免费jbig2-imageio库.但是我没有取得任何成功的结果,所以我在他们项目的页面上创建了一个新主题(google-code的论坛 - 这里).将不胜感激任何帮助.

我还发现了一些关于Apache PDFBoxbug-tracker的有用讨论:这里这里.

And*_*ash 1

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)

安德鲁。