Как установить шрифт в itextSharp для HTML в PDF

Мне нужно создать pdf-файл времени выполнения из html в веб-приложении, разработанном в VB.Net и MSSQL 2005, используя itextSharp.

HTML сохраняется в базе данных. который содержит гуджарати, хинди и английский контент.

Может ли кто-нибудь сказать мне, как установить шрифт для html и какие шрифты я должен использовать для отображения английского, гуджарати и хинди. Я пробовал Arial Unicode MS, но он не отображает хинди точно.

заранее спасибо

вот код метода, который я использую для преобразования строки html в файл pdf, который пользователь может сохранить на локальном компьютере.

Private Sub ExporttoPDF(ByVal FullHtml As String, ByVal fileName As String)
    Try
            Response.Clear()    ' Clear Response and set content type and disposition so that user get save file dialogue. 
            Response.ContentType = "application/pdf"
            Response.AddHeader("content-disposition", String.Format("attachment;filename={0}.pdf", fileName))
            Response.Cache.SetCacheability(HttpCacheability.NoCache)


            Dim sr As StringReader = New StringReader(FullHtml)
            Dim pdfDoc As iTextSharp.text.Document = New iTextSharp.text.Document(PageSize.A4.Rotate, 10, 10, 10, 10)
            Dim htmlparser As HTMLWorker = New HTMLWorker(pdfDoc)
            PdfWriter.GetInstance(pdfDoc, Response.OutputStream)
            pdfDoc.Open()
            Dim fontpath As String = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "\fonts\ARIALUNI.TTF" 
            '  "ARIALUNI.TTF" file copied from fonts folder and placed in the folder
            Dim bf As BaseFont = BaseFont.CreateFont(fontpath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED)

            FontFactory.RegisterDirectory( System.Web.HttpContext.Current.Request.PhysicalApplicationPath , True)

            FontFactory.Register(fontpath, "Arial Unicode MS")
            FontFactory.RegisterFamily("Arial Unicode MS", "Arial Unicode MS", fontpath)    

            'parse html from String reader "sr"
            htmlparser.Parse(sr)
            pdfDoc.Close()
            Response.Write(pdfDoc)
            Response.End()

    Catch ex As Exception
        Throw ex
    End Try
End Sub

Вот как я использую код

dim htmlstring as string = "<html><body encoding=""" + BaseFont.IDENTITY_H + """ style=""font-family:Arial Unicode MS;font-size:12;""> <h2> set Font in itextSharp for HTML to PDF  </h2> <span> I (aneel/અનિલ/अनिल) am facing problem to create a pdf from html that contains enlish, ગુજરાતી, हिंदी and other unicode characters.  </span> </body></html>"         
ExporttoPDF(htmlstring ,"sample.pdf")   

В результате для гуджарати отображается અનલિ, где, как и ожидалось, અનિલ.

Где, что касается хинди, отображается अनलि, где должно быть अनिल.


person Aneel Mehta    schedule 05.03.2012    source источник
comment
решение этой проблемы от Vinit_Patel отсюда: stackoverflow.com/questions/21423993/   -  person user2913925    schedule 21.04.2014


Ответы (2)


пытаться

pdfDoc.Add(New Header(iTextSharp.text.html.Markup.HTML_ATTR_STYLESHEET, “yourcssfile.css”)) // or path to your css file

тогда

Dim styles As iTextSharp.text.html.simpleparser.StyleSheet
styles = New iTextSharp.text.html.simpleparser.StyleSheet
styles.LoadTagStyle("ol", "leading", "16")

вы можете добавить все в стили. затем замените html.parse на это

HTMLWorker.ParseToList(New StreamReader("htmlpath.html", Encoding.Default), styles);
person Stefan    schedule 05.03.2012

К сожалению, вам не повезло. см. здесь. По сути, разработчики iText много раз обращались с призывами внести свой код для поддержки лигатур, необходимых для правильного отображения индийских языков в PDF, но никто не вызвался помочь.

person kuujinbo    schedule 05.03.2012
comment
спасибо, что напомнили мне о моей ответственности, то есть не всегда пытаться использовать только разработанные вещи, а также давать что-то сообществу. Я постараюсь разработать лигатуры для инидского языка. Хотя я не являюсь носителем индийского языка, но однажды я работал на языке урду около 12 лет назад. Я надеюсь, что мои знания и опыт помогут мне в разработке лигатур для индийского языка. - person Aneel Mehta; 06.03.2012
comment
Было бы замечательно, если бы вы могли внести свой вклад в проект. Если вы решите, что это что-то стоящее, подпишитесь на список рассылки для получения дополнительной информации. о том, как отправить свой код. - person kuujinbo; 06.03.2012
comment
@ Анил Мехта, я знаю, что ты сделал бы людей очень, очень счастливыми, если бы сделал это! Как сказал kuujinbo, запросов на это очень много. - person Chris Haas; 06.03.2012
comment
@AneelMehta - Видел ваш пост в списке рассылки :) Удачи! - person kuujinbo; 08.03.2012