簡體   English   中英

iTextSharp System.NullReferenceException

[英]iTextSharp System.NullReferenceException

我正在嘗試創建一個獲取PDF字節的方法:

public static Byte[] HtmlToBytes(string htmlText)
    {
        Byte[] bytes;

        using (var ms = new MemoryStream())
        {
            using (var doc = new Document(PageSize.A4, 10, 10, 10, 10))
            {
                using (var writer = PdfWriter.GetInstance(doc, ms))
                {
                    writer.CloseStream = false;
                    doc.Open();
                    using (var msHtml = new MemoryStream(Encoding.UTF8.GetBytes(htmlText)))
                    {
                        XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msHtml, Encoding.UTF8);
                    }
                }
            }
            bytes = ms.ToArray();
        }

        return bytes;
    }

但它在這部分給出了NullReferenceException

XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msHtml, Encoding.UTF8);

在我傳遞的字符串上只有簡單的html,如表格和標簽。

這是堆棧跟蹤:

[NullReferenceException: Object reference not set to an instance of an object.]
iTextSharp.tool.xml.pipeline.html.HtmlPipeline.Close(IWorkerContext context, Tag t, ProcessObject po) +76
iTextSharp.tool.xml.XMLWorker.EndElement(String tag, String ns) +186
iTextSharp.tool.xml.parser.XMLParser.EndElement() +111
iTextSharp.tool.xml.parser.state.ClosingTagState.Process(Char character) +61
iTextSharp.tool.xml.parser.XMLParser.ParseWithReader(TextReader reader) +247
iTextSharp.tool.xml.parser.XMLParser.Parse(TextReader reader) +5
iTextSharp.tool.xml.XMLWorkerHelper.ParseXHtml(PdfWriter writer, Document doc, TextReader inp) +453
TCC.Globals.HtmlToBytes(String htmlText) in C:\Users\Felipe\Source\Workspaces\Workspace\SgLeitos\TCC\TCC\Helpers\Globals.cs:118
TCC.Controllers.RelatoriosController.Leitos(Nullable`1 id) in C:\Users\Felipe\Source\Workspaces\Workspace\SgLeitos\TCC\TCC\Controllers\RelatoriosController.cs:34
lambda_method(Closure , ControllerBase , Object[] ) +107
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +157 ...

我嘗試過休耕:

public static Byte[] HtmlToBytes(string htmlText)
    {
        Byte[] bytes;

        using (var ms = new MemoryStream())
        {
            using (var doc = new Document(PageSize.A4, 10, 10, 10, 10))
            {
                using (var writer = PdfWriter.GetInstance(doc, ms))
                {
                    writer.CloseStream = false;
                    doc.Open();
                    using (var msHtml = new MemoryStream(Encoding.UTF8.GetBytes(htmlText)))
                    {
                        XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msHtml, Encoding.UTF8);
                    }
                }
            }
            bytes = ms.ToArray();
        }

        return bytes;
    }

    private static void Main(string[] args)
    {
        var str = @"<!DOCTYPE html><html lang=""en"" xmlns=""http://www.w3.org/1999/xhtml""><head><meta charset=""utf-8"" /><title></title></head><body><table border=""1"" style=""width:100%""><tr><td>Jill</td><td>Smith</td><td>50</td></tr><tr><td>Eve</td><td>Jackson</td><td>94</td></tr></table></body></html>";
        var s = HtmlToBytes(str);
        var str2 = @"<table border=""1"" style=""width:100%""><tr><td>Jill</td><td>Smith</td><td>50</td></tr><tr><td>Eve</td><td>Jackson</td><td>94</td></tr></table>";
        s = HtmlToBytes(str2);
        var str3 = @"<tabl=""width:100%""><tr><td>Jill</td><td>Smith</td><td>50</td></tr><tr><td>Eve</td><td>Jackson</td><td>94</td></tr></table>";
        s = HtmlToBytes(str3); //NULL HERE with corrupted html
    }

所以可能的答案是, 你的HTML已損壞

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM