我花了很多时间为我整理的 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 上的某种等待或锁定,这导致了导致异常的长时间等待。但我不确定是什么,有人知道如何避免它吗?它总是发生在添加中,新页面似乎很好。我总是在代码即将将其添加到真实文档时调用它,这在正常运行时也可以正常工作。