PDFBox:无法在 PDFormXObject 中打开小型 pdf 文件

PDFBox : small pdf file can't be open in PDFormXObject

我有一个 Pdfbox 无法打开的小 pdf 文件。 经过分析,PDFCloneUtility.cloneMerge()非常耗内存和计算,JavaHeapSpace虽然32Gb ram,但从未完成或退出,但图片转换不是问题,而且速度非常快。

我的 PDF 有什么特别或不好的地方? PDF File

PDDocument pdDocument = PDDocument.load(imported);
new LayerUtility(pdDocument).importPageAsForm(pdDocument, 0);

确实 importPageAsForm 似乎没有针对相同的源文档和目标文档进行全面测试。

在手头的情况下,PDF 有 OCG(可选内容组,在某些 GUI 中也称为图层),因此 LayerUtility 尝试将 OCG 从源导入目标,即导入自身。

不幸的是,这是下面使用的 PDFCloneUtility 所没有预料到的,并且在 cloneMerge 中遇到了一个永无止境的循环

                  COSArray array = (COSArray) base;
                  for (int i = 0; i < array.size(); i++)
                  {
                      ((COSArray) target).add(cloneForNewDocument(array.get(i)));
                  }

其中 basearraytarget 指向相同的 COSArray

如果在 cloneMerge

的顶部扩展检查
          if( base == null )
          {
              return;
          }

          if( base == null || base == target )
          {
              return;
          }

防止无限循环。

不过,必须检查一下这是否有不良副作用。