0

我花了很多时间为我整理的 PDF 调整表格,所以与其等到整个报告完成,不如下载它,打开它,向下滚动到相关部分......我整理了以下调试功能:

        public static void PreviewItextObject(PdfPTable table, PageStyle pageStyle)
        {
            using (PdfWriterChunk writerChunk = new PdfWriterChunk(pageStyle))
            {
                writerChunk.Document.NewPage();                    
                writerChunk.Document.Add(table);
                PreviewDocument(writerChunk.Document, writerChunk.memoryStream);
            }
        }
        public static void PreviewDocument(Document doc, MemoryStream ms)
        {
            doc.Close(); // have to close doc before embedding PDF
            var data = ms.ToArray();
            var filename = Path.GetTempFileName();
            filename += ".pdf";
            System.IO.File.WriteAllBytes(filename, data);
            System.Diagnostics.Process.Start(filename);
        }

我的 PDFWriterChunk 类如下所示:

        public PdfWriterChunk(PageStyle pageStyle)
        {
            memoryStream = new MemoryStream();
            var margin = GetMarginFromStyle(pageStyle);


            Document = new Document(pageStyle == PageStyle.LandScape ? PageSize.A4.Rotate() : PageSize.A4,
                margin.Left, margin.Right, margin.Top,
                margin.Bottom);
            Writer = PdfWriter.GetInstance(Document, memoryStream);
            Writer.SetPdfVersion(PDF_VERSION);
            Writer.CompressionLevel = PdfStream.BEST_COMPRESSION;
            Writer.SetFullCompression();

            PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 0, Document.PageSize.Height, 0.75f);

            Document.Open();

            PdfAction action = PdfAction.GotoLocalPage(1, pdfDest, Writer);
            Writer.SetOpenAction(action);
      }

让我自己从即时窗口调用。然而,真正令人沮丧的是,当我从即时窗口调用它时,几乎每次我第一次得到以下异常,这需要很长时间才能抛出:

itextsharp.dll 中出现“iTextSharp.text.DocumentException”类型的未处理异常附加信息:操作已超时

一旦我忽略该错误并再次运行它,它就会起作用!

很明显,有些东西导致了 document.add 上的某种等待或锁定,这导致了导致异常的长时间等待。但我不确定是什么,有人知道如何避免它吗?它总是发生在添加中,新页面似乎很好。我总是在代码即将将其添加到真实文档时调用它,这在正常运行时也可以正常工作。

4

0 回答 0