路径不是法律形式,iTextSharp和VB.NET

时间:2014-01-06 03:28:04

标签: html asp.net vb.net pdf itextsharp

我在VB.NET中尝试了这个answer时发现了这个问题(很少修改):

Function HtmlToPDF(ByVal Url As String) As MemoryStream
     Dim wc As New WebClient
     Dim htmlText = wc.DownloadString(Url)

     Dim msOutput As New MemoryStream
     Dim reader As New StringReader(htmlText)

     Dim document As New Document(PageSize.A4, 30, 30, 30, 30)

     PdfWriter.GetInstance(document, msOutput)

     Dim worker As New HTMLWorker(document)

     document.Open()

     worker.StartDocument()

     worker.Parse(reader)

     worker.EndDocument()
     worker.Close()
     document.Close()

     Return msOutput
End Function

我在此代码中收到错误该路径不是合法格式

worker.Parse(reader)

我检查调试中的值readerNothing/NULL,但我的htmlText中有值。

然后,我尝试another code,但错误仍然与以前一样。这是代码:

Function HtmlToPDF(ByVal Url As String) As MemoryStream
     Dim wc As New WebClient
     Dim htmlText = wc.DownloadString(Url)

     Dim msOutput As New MemoryStream

     Dim document As New Document(PageSize.A4, 30, 30, 30, 30)

     PdfWriter.GetInstance(document, msOutput)

     document.Open()

     Response.Write(htmlText)

     Dim htmlArrayList As New List(Of IElement)
     htmlArrayList = HTMLWorker.ParseToList(New StringReader(htmlText), Nothing)

     For k As Integer = 0 To htmlArrayList.Count()
        document.Add(htmlArrayList(k))
     Next

     document.Close()

     Return msOutput
End Function

此代码中的错误相同:HTMLWorker.ParseToList(New StringReader(htmlText), Nothing)

问题出在哪里? VB.NET新手在这里,提前谢谢。

1 个答案:

答案 0 :(得分:0)

检查您在html中可能包含的任何图片代码中的路径。并检查<hr>标签

等内容

我目前收到相同的错误,因为该文件实际上并不存在于某些html中我试图解析的内容。

例如"/images/logo.png"在我的开发服务器上不存在。 (请注意,htmlparser无法处理相对网址。任何img标记src中的网址都必须是绝对网址

http://kuujinbo.info/iTextSharp/tableWithImageToPdf.aspx

我收到了错误。

我还得到一个带有<hr>标签的NullReferenceException,如果你在visual studio中进行调试,一直到异常发生,点击查看异常细节&#39;然后单击堆栈跟踪。在<hr>即将获得

的示例中
at iTextSharp.text.html.simpleparser.HTMLWorker.CreateLineSeparator(IDictionary`2 attrs)
   at iTextSharp.text.html.simpleparser.HTMLTagProcessors.HTMLTagProcessor_HR.StartElement(HTMLWorker worker, String tag, IDictionary`2 attrs)
   at iTextSharp.text.html.simpleparser.HTMLWorker.StartElement(String tag, IDictionary`2 attrs)
   at iTextSharp.text.xml.simpleparser.SimpleXMLParser.ProcessTag(Boolean start)
   at iTextSharp.text.xml.simpleparser.SimpleXMLParser.Go(TextReader reader)
   at iTextSharp.text.xml.simpleparser.SimpleXMLParser.Parse(ISimpleXMLDocHandler doc, ISimpleXMLDocHandlerComment comment, TextReader r, Boolean html)
   at iTextSharp.text.html.simpleparser.HTMLWorker.Parse(TextReader reader)
   at iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(TextReader reader, StyleSheet style, IDictionary`2 tags, Dictionary`2 providers)
   at iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(TextReader reader, StyleSheet style, Dictionary`2 providers)
   at Health.Management.Web.Site.FileDownload.Download(String content, iTextSharpHeaderFooter hf, Int32 type, Boolean preview, String previewText) in

顺便说一下,旧的HTMLWorker.Parse被删除了,你应该使用新的xml worker。在尝试处理遗留(格式错误的)html代码时,我只使用它(旧解析器)作为后备。

如何使用iTextSharp的优秀示例可在此处找到:

http://kuujinbo.info/code_index.aspx?tab=2