C# 如何使用iTextSharp阅读PDF公文包
我正在使用iTextSharp,它是一款C#应用程序,可以读取PDF文件并将页面分成单独的PDF文档。它运行良好,但投资组合除外。现在,我正试图找出如何读取包含两个嵌入PDF文档的PDF文件包(或集合,在iText中似乎是这样称呼的)。我只想打开公文包,枚举嵌入的文件,然后将它们保存为单独的简单PDF文件 这里有一个关于如何通过编程创建PDF公文包的好例子:C# 如何使用iTextSharp阅读PDF公文包,c#,pdf,itextsharp,C#,Pdf,Itextsharp,我正在使用iTextSharp,它是一款C#应用程序,可以读取PDF文件并将页面分成单独的PDF文档。它运行良好,但投资组合除外。现在,我正试图找出如何读取包含两个嵌入PDF文档的PDF文件包(或集合,在iText中似乎是这样称呼的)。我只想打开公文包,枚举嵌入的文件,然后将它们保存为单独的简单PDF文件 这里有一个关于如何通过编程创建PDF公文包的好例子: 但我没有看到任何阅读投资组合的例子。任何帮助都将不胜感激 您引用的示例将嵌入的文件添加为文档级附件。因此,您可以按如下方式提取文件: P
但我没有看到任何阅读投资组合的例子。任何帮助都将不胜感激 您引用的示例将嵌入的文件添加为文档级附件。因此,您可以按如下方式提取文件:
PdfReader reader = new PdfReader(readerPath);
PdfDictionary root = reader.Catalog;
PdfDictionary documentnames = root.GetAsDict(PdfName.NAMES);
PdfDictionary embeddedfiles =
documentnames.GetAsDict(PdfName.EMBEDDEDFILES);
PdfArray filespecs = embeddedfiles.GetAsArray(PdfName.NAMES);
for (int i = 0; i < filespecs.Size; ) {
filespecs.GetAsString(i++);
PdfDictionary filespec = filespecs.GetAsDict(i++);
PdfDictionary refs = filespec.GetAsDict(PdfName.EF);
foreach (PdfName key in refs.Keys) {
PRStream stream = (PRStream) PdfReader.GetPdfObject(
refs.GetAsIndirectObject(key)
);
using (FileStream fs = new FileStream(
filespec.GetAsString(key).ToString(), FileMode.OpenOrCreate
)){
byte[] attachment = PdfReader.GetStreamBytes(stream);
fs.Write(attachment, 0, attachment.Length);
}
}
}
PdfReader reader=新的PdfReader(readerPath);
PdfDictionary root=reader.Catalog;
PdfDictionary documentnames=root.GetAsDict(PdfName.NAMES);
PdfDictionary嵌入文件=
documentnames.GetAsDict(PdfName.EMBEDDEDFILES);
PdfArray filespecs=embeddedfiles.GetAsArray(PdfName.NAMES);
对于(int i=0;i
如果要测试此功能,请将Kubrick集合示例中的输出文件传递给PdfReader
构造函数(readerPath
)
- Java版本:
希望本月我能有时间从5.2.0.0版(iTextSharp版本现在比Java版本落后大约三周)更新C#示例。你是最棒的!这很好用,非常感谢。我觉得这和目录下的字典有关,但我不可能弄清楚所有的细节。将其添加到在线C#示例中会很好。上面的代码有一行“byte[]attachment=PdfReader.GetStreamBytes(stream);”,它将附件内容加载到字节数组中。如果附件是PDF文件,我可以打开附件的PdfReader作为“PdfReader reader=new PdfReader(附件)”。这样做的一个问题是,我们将整个附件文件加载到内存中(字节数组)。是否可以在不将整个附件文件加载到内存的情况下访问附件的PdfReader?