使用iText XMLWorkerHelper将HTML转换为PDF时遇到了麻烦。文件很好,但最终没有一些中欧字符(克罗地亚字母如č,ć,đ,ž)。
当我在没有XMLWorkerHelper的情况下编写文本并定义字体时,databese中的相同文本被正确写入:
Dim fntArial As BaseFont = BaseFont.CreateFont("Helvetica", BaseFont.CP1250, BaseFont.NOT_EMBEDDED)
Dim fontText10 As Font = New Font(fntArial, 10)
但是当我使用XMLWorkerHelper时,CE字符丢失了。
Dim pdfDokument As New Document()
Dim docContent As String = "<style>" & _
"@font-face {font-family: 'Arial'; src: url('fonts/arial.ttf') format('truetype');}" & _
"body, td, div, span{font-family: 'Arial'; color: #253f60; font-size: 12px;}" & _
...
"</style>" & _
"HTML content from database"
Dim wrtPDF As PdfWriter = PdfWriter.GetInstance(pdfDokument, New FileStream(Request.PhysicalApplicationPath & docName, FileMode.Create))
pdfDokument.Open()
Dim worker As XMLWorkerHelper = XMLWorkerHelper.GetInstance
worker.ParseXHtml(wrtPDF, pdfDokument, New StringReader(docContent))
如何将CE字体嵌入到PDF文档中并将其设置为XMLWorkerHelper的默认字体?
答案 0 :(得分:2)
我终于想出了如何提供我想要使用的字体。 首先我指定了完整的字体路径,包括字体本身(如c:/windows/fonts/arial.ttf)并没有任何改变,然后我尝试了不同的编码和evenetually我只传递路径到字体文件夹解决了我的问题(我读了之后) XMLWorkerFontProvider类定义)。
克里斯,你指的是正确的道路。
Dim worker = XMLWorkerHelper.GetInstance()
Dim htmlContent = new MemoryStream(Encoding.UTF8.GetBytes(docContent))
Dim css As memoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(""))
worker.ParseXHtml(wrtPDF, pdfDokument, htmlContent, css, System.Text.Encoding.UTF8, new XMLWorkerFontProvider("c:/windows/fonts/"))