У меня проблема с попыткой применить файл css к моему pdf с помощью библиотеки генерации iTextSharp (5.4.3). в основном, css не применяется вообще.Невозможно заставить CSS работать в iTextSharp (5.4.3) при создании pdf
я следующий метод в моем файле 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
файл CSS просто содержит:
p{color:#e10000;margin-bottom:1.2em;}
(Это, чтобы проверить является ли это правильно рендеринга, весь текст должен быть красный)
Моя проблема что следующая команда
XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, input, New FileStream(HttpContext.Current.Server.MapPath("~/assets/css/pdf.css"), FileMode.Open, FileAccess.Read))
правильно создает pdf-файл, но не применяет к нему CSS. Я знаю, что это чтение CSS, потому что у меня было исключение разрешений, пока не применяется свойство FileAccess.Read
метод
p.Parse(input, Encoding.UTF8)
не производит PDF, просто «Элемент не допускается» исключение, это потому что html (исходящий из текстового блока radeditor Q3 2013) является старым html, и, похоже, у синтаксического анализа есть проблема с таблицами.
Вы должны применить стиль границы как border-width: 1px; border-style: solid; border-color: red; Парсер CSS, похоже, не понимает составных правил. – sumitkm