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)));
}
其中 base
、array
和 target
指向相同的 COSArray
。
如果在 cloneMerge
的顶部扩展检查
if( base == null )
{
return;
}
至
if( base == null || base == target )
{
return;
}
防止无限循环。
不过,必须检查一下这是否有不良副作用。
我有一个 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)));
}
其中 base
、array
和 target
指向相同的 COSArray
。
如果在 cloneMerge
if( base == null )
{
return;
}
至
if( base == null || base == target )
{
return;
}
防止无限循环。
不过,必须检查一下这是否有不良副作用。