【解決方法】iTextSharp RAM (メモリ) オーバーフロー

プログラミングQA


やあ。 テンプレートに基づいて PDF ドキュメントを生成しています。 ドキュメントには複数のページがあります。 ドキュメントには約 5000 ページを含めることができます。 500 番目のページを作成すると、オーバーフロー RAM (メモリ) が発生します。 何か案が? 前もって感謝します。

C#
public static void CreateBankBlank2012Year(string pdfTemplatePath, string directoryOutPdf, string nameOutPdf, AnnualReportsFilterParameters filterParametrs, string serverPath)
{
    // Get details salary
    IEnumerable<SalayDetailsForPdf> dataSalaryDetails = (IEnumerable<SalayDetailsForPdf>) GetSalaryData(filterParametrs);

    String fontPath = Path.Combine(serverPath + "\\Fonts", "STSONG.ttf");
    Font font = FontFactory.GetFont(fontPath, BaseFont.IDENTITY_H, 8);

    using (Document document = new Document())
    {
        using (PdfSmartCopy copy = new PdfSmartCopy(
            document, new FileStream(directoryOutPdf + nameOutPdf, FileMode.Create))
        )
        {
            document.Open();

            foreach (var data in dataSalaryDetails)                    
            {
                PdfReader reader = new PdfReader(pdfTemplatePath + @"\EmptyTemplateBankBlank_2012.pdf");
                using (var ms = new MemoryStream())
                {
                    using (PdfStamper stamper = new PdfStamper(reader, ms))
                    {
                        stamper.AcroFields.AddSubstitutionFont(font.BaseFont);
                        AcroFields form = stamper.AcroFields;
                                                                                                                            form.SetField("t1_address1", data.Address1);

                        form.SetField("t1_name", data.NameHieroglyphic);

                        // Other field ...

                        stamper.FormFlattening = true;
                    }
                    reader = new PdfReader(ms.ToArray());

                    copy.AddPage(copy.GetImportedPage(reader, 1));
                }
            }
        }                
    }
}

解決策 2

やあ! 解答を見つける? 私は同じ問題を抱えており、これをサポートする必要があります。

解決策 1

私は次のように私の問題を解決しようとしています:
テンプレートに基づいて空のページを生成する

C#
private static void GeneratePdfFromTemplate(string directoryOutPdf, string nameOutPdf, string pdfTemplatePath, int countPages)
        {                                   
            using (Document document = new Document())
            {
                using (PdfSmartCopy copy = new PdfSmartCopy(
                    document, new FileStream(directoryOutPdf + nameOutPdf, FileMode.Create))
                    )
                {
                    document.Open();                                        
                    PdfReader reader = new PdfReader(pdfTemplatePath + @"\EmptyTemplateBankBlank_2012.pdf");
                    for (int i = 0; i < countPages; i++)                    
                    {                                                    
                        copy.AddPage(copy.GetImportedPage(reader, 1));                                                 
                    }
                    reader.Close();
                    copy.Close();
                }
                document.Close();
            }            
            GC.Collect();            
        }

しかし、生成後、フィールドに値を設定できません。

コメント

タイトルとURLをコピーしました