如何使用 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();

我所做的唯一更改是将流写入文件。