有什么办法可以避免在 iText 7 中加载 XMP 元数据?
Is there any way to avoid loading XMP metadata in iText 7?
我有一个包含大量 xmp 元数据的 PDF 文件。我用itext7处理的时候,程序卡在语句var pdfdocument origpdf = new pdfdocument (pdfreader);
看source code,发现在Pdfdocument对象的构造函数中执行了open(null)方法,最后卡住了在 reader.pdfaconformancelevel = pdfaconformancelevel.getconformancelevel (xmpmatafactory. Parsefrombuffer (xmpmetadata));
并且没有避免它的选项,xmp 元数据对我没用。
使用 itextSharp,基于 Remove XMP Metadata on PDF/A,我可以获得没有元数据的 pdf 文件。
PdfReader reader = new PdfReader(src);
PdfDictionary dict = reader.Catalog;
dict.Remove(PdfName.METADATA);
dict.Remove(PdfName.PROPERTIES);
reader.RemoveUnusedObjects();
PdfStamper stamper = new PdfStamper(reader, new FileStream(target, FileMode.Create, FileAccess.ReadWrite));
stamper.Close();
我试图创建 PdfReader 或 PdfDocument 的子类,试图干扰加载元数据,但都失败了。
使用itext7,有没有办法避免加载元数据?或者有什么方法可以删除 XMP 元数据?
这是您可以覆盖 PdfReader
并跳过读取元数据对象的方法。事实上,对象已被读取,但我们 reader 将表现得好像没有元数据并且它不会告诉任何人它存在。
自定义 PdfReader
实现:
private static class MetadataFreePdfReader extends PdfReader {
public MetadataFreePdfReader(String filename) throws IOException {
super(filename);
}
@Override
protected PdfObject readObject(PdfIndirectReference reference) {
PdfObject obj = super.readObject(reference);
if (obj instanceof PdfStream && PdfName.Metadata.equals(((PdfStream) obj).getAsName(PdfName.Type))) {
// skip metadata object
return null;
}
return obj;
}
}
这就是您将重载实例传递给 PdfDocument
的方式:
PdfDocument pdfDocument = new PdfDocument(new MetadataFreePdfReader("C:/path/to/140mmX90mm-2000BGJCV1M.pdf"));
我有一个包含大量 xmp 元数据的 PDF 文件。我用itext7处理的时候,程序卡在语句var pdfdocument origpdf = new pdfdocument (pdfreader);
看source code,发现在Pdfdocument对象的构造函数中执行了open(null)方法,最后卡住了在 reader.pdfaconformancelevel = pdfaconformancelevel.getconformancelevel (xmpmatafactory. Parsefrombuffer (xmpmetadata));
并且没有避免它的选项,xmp 元数据对我没用。
使用 itextSharp,基于 Remove XMP Metadata on PDF/A,我可以获得没有元数据的 pdf 文件。
PdfReader reader = new PdfReader(src);
PdfDictionary dict = reader.Catalog;
dict.Remove(PdfName.METADATA);
dict.Remove(PdfName.PROPERTIES);
reader.RemoveUnusedObjects();
PdfStamper stamper = new PdfStamper(reader, new FileStream(target, FileMode.Create, FileAccess.ReadWrite));
stamper.Close();
我试图创建 PdfReader 或 PdfDocument 的子类,试图干扰加载元数据,但都失败了。
使用itext7,有没有办法避免加载元数据?或者有什么方法可以删除 XMP 元数据?
这是您可以覆盖 PdfReader
并跳过读取元数据对象的方法。事实上,对象已被读取,但我们 reader 将表现得好像没有元数据并且它不会告诉任何人它存在。
自定义 PdfReader
实现:
private static class MetadataFreePdfReader extends PdfReader {
public MetadataFreePdfReader(String filename) throws IOException {
super(filename);
}
@Override
protected PdfObject readObject(PdfIndirectReference reference) {
PdfObject obj = super.readObject(reference);
if (obj instanceof PdfStream && PdfName.Metadata.equals(((PdfStream) obj).getAsName(PdfName.Type))) {
// skip metadata object
return null;
}
return obj;
}
}
这就是您将重载实例传递给 PdfDocument
的方式:
PdfDocument pdfDocument = new PdfDocument(new MetadataFreePdfReader("C:/path/to/140mmX90mm-2000BGJCV1M.pdf"));