我有一个程序需要几个pdf(甚至1000+)并将它们合并为一个pdf。
该程序运行良好,但我遇到了一个假脱机错误。
如果我用Acrobat打开合并的pdf并打印它,而不是向打印机发送n个页面的单个假脱机,它会发送与原始pdf数量一样多的假脱机,导致打印机处理速度非常慢。
这是班级的摘要
Document document = new Document ( iTextSharp.text.PageSize.A4 );
PdfWriter writer = PdfWriter.GetInstance ( document, new FileStream ( outputFilename, FileMode.Create ) );
writer.SetFullCompression();
document.Open();
PdfContentByte cb = writer.DirectContent;
foreach( var file in files ) {
PdfReader reader = new PdfReader ( file );
int n = reader.NumberOfPages;
int i = 0;
while ( i < n)
{
i++;
document.SetPageSize ( reader.GetPageSizeWithRotation ( i ) );
document.NewPage();
page = writer.GetImportedPage ( reader, i );
rotation = reader.GetPageRotation ( i );
cb.AddTemplate ( page, 1f, 0, 0, 1f, 0, 0 );
}
}
document.Close();
答案 0 :(得分:1)
请下载iText in Action - Second Edition的Chapter 6。你会发现你使用错误的类来连接PDF。我一遍又一遍地重复这个,我真的想知道是什么让你使用PdfWriter
而不是Pdf(Smart)Copy
来连接PDF。您是否在网站上的某处找到了代码示例?如果是这样,请告诉我们,以便我们可以一起打击该页面的作者!
如果使用代码示例,则将页面导入为XObject。这会增加嵌套级别,这可能会导致麻烦,因为嵌套级别有限。此外,当您逐页添加到PdfWriter
时,您的PDF可能会包含过多的冗余信息:您的文件可能会膨胀。使用PdfSmartCopy
可以避免这种情况。
最后(本书中没有的内容):在复制FreeReader()
对象中的所有页面后,应使用PdfReader
方法。这将显着加快您的代码速度,并减少所需的内存。
我意识到以上都没有解释为什么不同的线轴被发送到打印机,但让我们首先从你的代码中明显的缺陷开始,然后从那里拿走它。