首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在.NET应用程序中使用pdfbox从pdf中提取嵌入式文件

在.NET应用程序中使用pdfbox从pdf中提取嵌入式文件
EN

Stack Overflow用户
提问于 2013-06-10 16:43:50
回答 2查看 1.2K关注 0票数 0

我正在开发.NET应用程序使用PDF.I从PDF.I中提取元数据,内容和附件。我能够提取元数据和内容,但在提取附件/嵌入文件时被卡住。

我有一个嵌入/附加文档文件的pdf文件,并希望检索该文件。我已经看过了java示例-- http://svn.apache.org/repos/asf/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractEmbeddedFiles.java。但是当我尝试在.Net中使用它时,我在以下代码片段中得到了“非泛型类型'java.util.Map‘不能用于类型参数”

代码语言:javascript
运行
复制
java.util.Map<String, COSObjectable> names = efTree.getNames();

所以,如果有人能帮我从pdf中提取这个文件,我将不胜感激。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-20 12:32:55

我已经通过省略泛型并尝试如下所示的方式解决了这个问题:

java.util.Map names = efTree.getNames();

现在,我可以解压位于附件标签中的附件,但是不能解压位于页面中的附件。在这种情况下,我得到的efTree为空。

代码语言:javascript
运行
复制
PDDocumentNameDictionary namesDictionary = new PDDocumentNameDictionary(pdfDoc.getDocumentCatalog());
PDEmbeddedFilesNameTreeNode efTree=namesDictionary.getEmbeddedFiles();

所以如果有人知道如何提取附加/嵌入在页面中的文件,可以帮助我在.NET应用程序中做到这一点。

票数 0
EN

Stack Overflow用户

发布于 2013-06-11 15:27:52

代码语言:javascript
运行
复制
import java.io.FileOutputStream;
import java.io.IOException;

import com.itextpdf.text.pdf.PRStream;
import com.itextpdf.text.pdf.PdfArray;
import com.itextpdf.text.pdf.PdfDictionary;
import com.itextpdf.text.pdf.PdfName;
import com.itextpdf.text.pdf.PdfReader;

public class PDFAttachments {

    public PDFAttachments() {

    }

    public void extractAttachments(String src, String dest) throws IOException {
        PdfReader reader = new PdfReader(src);
        PdfArray array;
        PdfDictionary annot;
        PdfDictionary fs;
        PdfDictionary refs;
        String fName;
        try {
            for (int i = 1; i <= reader.getNumberOfPages(); i++) {
                array = reader.getPageN(i).getAsArray(PdfName.ANNOTS);
                if (array == null)
                    continue;
                for (int j = 0; j < array.size(); j++) {
                    annot = array.getAsDict(j);
                    if (PdfName.FILEATTACHMENT.equals(annot
                            .getAsName(PdfName.SUBTYPE))) {
                        fs = annot.getAsDict(PdfName.FS);
                        refs = fs.getAsDict(PdfName.EF);
                        for (PdfName name : refs.getKeys()) {
                            fName = dest + fs.getAsString(name).toString();
                            /*
                             * FileOutputStream fos = new
                             * FileOutputStream(String.format(dest,
                             * fs.getAsString(name).toString()));
                             */
                            FileOutputStream fos = new FileOutputStream(fName);
                            fos.write(PdfReader.getStreamBytes((PRStream) refs
                                    .getAsStream(name)));
                            fos.flush();
                            fos.close();
                        }
                    }
                }
            }
        } catch (Exception e) {
            System.err.println("exception " + e.getMessage());
        }
    }

}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17019960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档