我在 Windows 窗体程序中遇到了来自 iTextSharp 的 HTMLWorker.Parse 的问题。每次我执行代码并以 HTMLWorker.Parse 开头时,它都会给出 objectDisposedException。异常表示它无法访问已关闭的文件。但是我检查了很多次,都找不到关闭的文件。这是代码:
class HtmlToPdfConverter
{
private iTextSharp.text.Document doc = new iTextSharp.text.Document();
public HtmlToPdfConverter()
{
this.doc.SetPageSize(PageSize.A4);
}
public string Run(string html, string pdfName)
{
try
{
using (doc)
{
StyleSheet styles = new StyleSheet();
using (PdfWriter writer = PdfWriter.GetInstance(this.doc, new FileStream(@"Z:\programs\" + pdfName + ".pdf", FileMode.Create)))
{
this.doc.Open();
this.doc.OpenDocument();
this.doc.NewPage();
if (this.doc.IsOpen() == true)
{
StringReader reader = new StringReader(html);
//XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, reader);
this.doc.Add(new Paragraph(" "));
HTMLWorker worker = new HTMLWorker(this.doc);
worker.Open();
worker.StartDocument();
worker.NewPage();
worker.Parse(reader);
worker.SetStyleSheet(styles);
List<IElement> ie = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(reader, null);
foreach (IElement element in ie)
{
this.doc.Add((IElement)element);
}
worker.EndDocument();
worker.Close();
}
}
}
return string.Empty;
}
catch (Exception ex)
{
return ex.Message;
}
}
}
这是一个例外:
System.ObjectDisposedException was caught
Message=Cannot access a closed file.
Source=mscorlib
ObjectName=""
StackTrace:
at System.IO.__Error.FileNotOpen()
at System.IO.FileStream.Write(Byte[] array, Int32 offset, Int32 count)
at iTextSharp.text.pdf.OutputStreamCounter.Write(Byte[] buffer, Int32 offset, Int32 count)
at iTextSharp.text.pdf.PdfIndirectObject.WriteTo(Stream os)
at iTextSharp.text.pdf.PdfWriter.PdfBody.Add(PdfObject objecta, Int32 refNumber, Boolean inObjStm)
at iTextSharp.text.pdf.PdfWriter.PdfBody.Add(PdfObject objecta, Int32 refNumber)
at iTextSharp.text.pdf.PdfWriter.PdfBody.Add(PdfObject objecta, PdfIndirectReference refa)
at iTextSharp.text.pdf.PdfWriter.AddToBody(PdfObject objecta, PdfIndirectReference refa)
at iTextSharp.text.pdf.Type1Font.WriteFont(PdfWriter writer, PdfIndirectReference piref, Object[] parms)
at iTextSharp.text.pdf.FontDetails.WriteFont(PdfWriter writer)
at iTextSharp.text.pdf.PdfWriter.AddSharedObjectsToBody()
at iTextSharp.text.pdf.PdfWriter.Close()
at iTextSharp.text.DocWriter.Dispose()
at WebPageExtraction.HtmlToPdfConverter.Run(String html, String pdfName)
InnerException: