0

我有一个程序需要几个 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();
4

1 回答 1

1

请下载iText in Action - Second Edition第 6 章。您会发现您使用了错误的类来连接 PDF。我一遍又一遍地重复这一点,我真的很想知道是什么让你使用PdfWriter而不是Pdf(Smart)Copy连接 PDF。您是否在网站的某处找到了该代码示例?如果是这样,请让我知道,以便我们可以一起打那个页面的作者!

如果您使用代码示例,则将页面作为 XObjects 导入。这增加了嵌套级别,可能会导致麻烦,因为嵌套级别有限制。此外,当您逐页添加时PdfWriter,您的 PDF 可能会包含过多的冗余信息:您的文件可能会膨胀。这可以通过使用来避免PdfSmartCopy

最后(书中没有提到的东西):您应该在从对象FreeReader()复制所有页面后使用该方法。PdfReader这将显着加快您的代码速度,并减少所需的内存。

我意识到以上都没有解释为什么不同的线轴被发送到打印机,但是让我们先从代码中明显的缺陷开始,然后从那里开始。

于 2012-12-04T10:31:36.957 回答