我在一个C#应用程序中使用iTextSharp,该应用程序读取PDF文件并将页面分成单独的PDF文档。除投资组合外,它运作良好。现在,我正在试图弄清楚如何阅读包含两个嵌入式PDF文档的PDF组合(或者像在iText中调用的Collection)。我想简单地打开产品组合,枚举嵌入的文件,然后将它们保存为单独的简单PDF文件。
有一个很好的例子,说明如何以编程方式创建 PDF文件夹,在这里: Kubrick Collection Example
但我没有看到任何阅读投资组合的例子。任何帮助将不胜感激!
答案 0 :(得分:3)
您引用的示例将嵌入文件添加为文档级附件。所以你可以像这样提取文件:
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);
}
}
}
如果要对此进行测试,请将您引用的 Kubrick Collection示例中的输出文件传递给PdfReader
构造函数(readerPath
)。
希望我有时间从5.2.0.0版本更新C#示例(iTextSharp版本现在比Java版本晚了大约三周)。