【问题标题】:PDFBox : small pdf file can't be open in PDFormXObjectPDFBox:无法在 PDFormXObject 中打开小型 pdf 文件
【发布时间】:2021-07-01 16:37:00
【问题描述】:

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

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

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

【问题讨论】:

标签: java pdf pdfbox


【解决方案1】:

确实,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;
          }

防止无限循环。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多