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