3
我必須將多個1頁PDF合併爲一個pdf。我正在使用iTextSHarp 5.5.5.0來完成這個任務,但是當我合併超過900-1000個pdf時,我收到了一個內存不足異常。我注意到即使我釋放我的閱讀器並關閉它,內存也不會被正確清理(進程使用的內存量永遠不會減少),所以我想知道我可能會做錯什麼。這是我的代碼:ITextSharp內存不足異常合併多個pdf
using (MemoryStream msOutput = new MemoryStream())
{
Document doc = new Document();
PdfSmartCopy pCopy = new PdfSmartCopy(doc, msOutput);
doc.Open();
foreach (Tuple<string, int> file in filesList)
{
PdfReader pdfFile = new PdfReader(file.Item1);
for (int j = 0; j < file.Item2; j++)
for (int i = 1; i < pdfFile.NumberOfPages + 1; i++)//in this case it's always 1.
pCopy.AddPage(pCopy.GetImportedPage(pdfFile, i));
pCopy.FreeReader(pdfFile);
pdfFile.Close();
File.Delete(file.Item1);
}
pCopy.Close();
doc.Close();
byte[] content = msOutput.ToArray();
using (FileStream fs = File.Create(Out))
{
fs.Write(content, 0, content.Length);
}
}
而不會繼續寫文件,我的p.Copy()時出現內存不足的異常AddPage()的一部分。我甚至嘗試刷新pCopy變量,但沒有改變任何東西。我查看了iText的文檔以及圍繞StackOverflow的各種問題,但在我看來,我正在採取每個建議來保持內存使用率較低,但這並未發生。 有關於此的任何想法?
使用'PdfCopy'而不是'PdfSmartCopy'。 'PdfSmartCopy'是「聰明的」,因爲它可以保存大量內存。 – 2015-04-02 14:09:59
也可以直接寫入'FileStream'而不是'MemoryStream'。你可能真的會用完內存。 – 2015-04-02 14:10:27
Hy,非常感謝你非常快速的迴應,PdfCopy代替了PdfSmartCopy很好,並且將內存使用減少到接近一半,但FileStream好得多,我現在只用了15 MB的內存而不是1GB,而不是壞。我可以使用PDfSmartCopy生成更小的PDF。如果你作出回答,我會贊成並接受,謝謝。 – 2015-04-02 14:18:05