Nie można uzyskać CSS do pracy w iTextSharp (5.4.3) podczas tworzenia pliku PDF
Mam problem z próbą zastosowania pliku css do mojego pliku PDF za pomocą biblioteki generacji iTextSharp (5.4.3). zasadniczo css nie jest w ogóle stosowany.
Mam następujący sposób w moim pliku vb.net
Protected Sub btnPreview_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPreview.Click
Dim bytes As Byte()
bytes = System.Text.Encoding.UTF8.GetBytes(letterRadEdit.Content)
Dim tagProcessor As tool.xml.html.DefaultTagProcessorFactory()
Using input As New MemoryStream(bytes, False)
Dim ms As New MemoryStream()
Dim document As New iTextSharp.text.Document(iTextSharp.text.PageSize.LETTER, 36, 36, 36, 36)
Dim writer As PdfWriter = PdfWriter.GetInstance(document, ms)
writer.CloseStream = False
document.Open()
Dim htmlContext As HtmlPipelineContext = New HtmlPipelineContext(Nothing)
htmlContext.SetAcceptUnknown(True)
htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory())
Dim cssResolver As ICSSResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(False)
cssResolver.AddCssFile(HttpContext.Current.Server.MapPath("/assets/css/pdf.css"), True)
Dim pipeline As New CssResolverPipeline(cssResolver, New HtmlPipeline(htmlContext, New PdfWriterPipeline(document, writer)))
Dim pdfworker As New XMLWorker(pipeline, True)
Dim p As New XMLParser(True, pdfworker, New System.Text.UTF8Encoding)
Try
'p.AddListener(pdfworker)
'p.Parse(input, Encoding.UTF8)
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, input, New FileStream(HttpContext.Current.Server.MapPath("~/assets/css/pdf.css"), FileMode.Open, FileAccess.Read))
Catch
Finally
pdfworker.Close()
End Try
document.Close()
ms.Position = 0
Response.Buffer = True
Response.Clear()
Response.ContentType = "application/pdf"
Response.AddHeader("content-disposition", "attachment; filename=preview.pdf")
Response.BinaryWrite(ms.GetBuffer())
Response.Flush()
End Using
End Sub
plik CSS zawiera po prostu:
p{color:#e10000;margin-bottom:1.2em;}
(To jest, aby sprawdzić, czy wyświetla się poprawnie, cały tekst powinien być czerwony)
Moim problemem jest to następujące polecenie
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, input, New FileStream(HttpContext.Current.Server.MapPath("~/assets/css/pdf.css"), FileMode.Open, FileAccess.Read))
poprawnie tworzy plik pdf, ale nie stosuje do niego CSS. Wiem, że czyta CSS, ponieważ miałem wyjątek uprawnień, dopóki nie zastosowałem właściwości FileAccess.Read
metoda
p.Parse(input, Encoding.UTF8)
nie tworzy żadnych plików PDF, tylko wyjątek „Element niedozwolony”, ponieważ HTML (pochodzący z pola tekstowego radeditor Q3 2013) jest starym HTML, a parse wydaje się mieć problem z tabelami.