如何使用 itext7 从 PDF 中提取附件
How to extract attached files from PDF with itext7
如何使用 itext7 从 PDF 中提取附件?
我找到的 itext5 示例代码都不能用了。
每个文件 byte[]
就是我所需要的,如下面的 itext5 示例所示:
PdfReader reader = new PdfReader(SRC);
Map<String, byte[]> files = new HashMap<String,byte[]>();
PdfObject obj;
for (int i = 1; i <= reader.getXrefSize(); i++) {
obj = reader.getPdfObject(i);
if (obj != null && obj.isStream()) {
PRStream stream = (PRStream)obj;
byte[] b;
try {
b = PdfReader.getStreamBytes(stream);
}
catch(UnsupportedPdfException e) {
b = PdfReader.getStreamBytesRaw(stream);
}
files.put(Integer.toString(i), b);
}
}
谢谢/马库斯
您正在使用蛮力搜索附件,而不是通过查询目录中的嵌入式文件和查询页面词典中的附件注释。
无论如何,如果我将您的代码移植到 iText 7,它将如下所示:
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC));
PdfObject obj;
for (int i = 1; i <= pdfDoc.getNumberOfPdfObjects(); i++) {
obj = pdfDoc.getPdfObject(i);
if (obj != null && obj.isStream()) {
byte[] b;
try {
b = ((PdfStream) obj).getBytes();
} catch (PdfException exc) {
b = ((PdfStream) obj).getBytes(false);
}
FileOutputStream fos = new FileOutputStream(String.format(DEST, i));
fos.write(b);
fos.close();
}
}
pdfDoc.close();
我所做的唯一更改是将流写入文件。
如何使用 itext7 从 PDF 中提取附件?
我找到的 itext5 示例代码都不能用了。
每个文件 byte[]
就是我所需要的,如下面的 itext5 示例所示:
PdfReader reader = new PdfReader(SRC);
Map<String, byte[]> files = new HashMap<String,byte[]>();
PdfObject obj;
for (int i = 1; i <= reader.getXrefSize(); i++) {
obj = reader.getPdfObject(i);
if (obj != null && obj.isStream()) {
PRStream stream = (PRStream)obj;
byte[] b;
try {
b = PdfReader.getStreamBytes(stream);
}
catch(UnsupportedPdfException e) {
b = PdfReader.getStreamBytesRaw(stream);
}
files.put(Integer.toString(i), b);
}
}
谢谢/马库斯
您正在使用蛮力搜索附件,而不是通过查询目录中的嵌入式文件和查询页面词典中的附件注释。
无论如何,如果我将您的代码移植到 iText 7,它将如下所示:
PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC));
PdfObject obj;
for (int i = 1; i <= pdfDoc.getNumberOfPdfObjects(); i++) {
obj = pdfDoc.getPdfObject(i);
if (obj != null && obj.isStream()) {
byte[] b;
try {
b = ((PdfStream) obj).getBytes();
} catch (PdfException exc) {
b = ((PdfStream) obj).getBytes(false);
}
FileOutputStream fos = new FileOutputStream(String.format(DEST, i));
fos.write(b);
fos.close();
}
}
pdfDoc.close();
我所做的唯一更改是将流写入文件。