HTML To PDF Турецкая Проблема Символов
Я хочу преобразовать веб-страницу ASP.NET в pdf, используя ITextSharp. Я написал какой-то код, но не могу показать турецкие символы. Может кто-нибудь мне помочь?
Вот код:
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Web.UI;
using System.Web;
using iTextSharp.text.html.simpleparser;
using System.Text;
using System.Text.RegularExpressions;
namespace Presentation
{
public partial class TemporaryStudentFormPrinter : System.Web.UI.Page
{
protected override void Render(HtmlTextWriter writer)
{
MemoryStream mem = new MemoryStream();
StreamWriter twr = new StreamWriter(mem);
HtmlTextWriter myWriter = new HtmlTextWriter(twr);
base.Render(myWriter);
myWriter.Flush();
myWriter.Dispose();
StreamReader strmRdr = new StreamReader(mem);
strmRdr.BaseStream.Position = 0;
string pageContent = strmRdr.ReadToEnd();
strmRdr.Dispose();
mem.Dispose();
writer.Write(pageContent);
CreatePDFDocument(pageContent);
}
public void CreatePDFDocument(string strHtml)
{
string strFileName = HttpContext.Current.Server.MapPath("test.pdf");
Document document = new Document(PageSize.A4, 80, 50, 30, 65);
PdfWriter.GetInstance(document, new FileStream(strFileName, FileMode.Create));
StringReader se = new StringReader(strHtml);
HTMLWorker obj = new HTMLWorker(document);
document.Open();
obj.Parse(se);
document.Close();
ShowPdf(strFileName);
}
public void ShowPdf(string strFileName)
{
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "inline;filename=" + strFileName);
Response.ContentType = "application/pdf";
Response.WriteFile(strFileName);
Response.Flush();
Response.Clear();
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
3 ответа
iTextSharp.text.pdf.BaseFont STF_Helvetica_Turkish = iTextSharp.text.pdf.BaseFont.CreateFont("Helvetica", "CP1254", iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED);
iTextSharp.text.Font fontNormal = new iTextSharp.text.Font(STF_Helvetica_Turkish, 12, iTextSharp.text.Font.NORMAL);
Вы должны передать шрифт в качестве аргумента в командах манипулирования itextsharp, например:
pdftable.AddCell(new Phrase(nn.InnerText.Trim(), fontNormal));
Возможно, вы захотите рассмотреть возможность работы с инструментами отчетности с возможностью экспорта в pdf, а не с директивой, работающей с pdf, что может быть головной болью.
Вам нужно убедиться, что вы пишете текст шрифтом, который поддерживает турецкий набор символов (или, по крайней мере, символы, которые вы пытаетесь выписать).
Я не знаю, что делает HtmlTextWriter с точки зрения использования шрифтов - он, вероятно, будет использовать один из стандартных встроенных шрифтов, которые вряд ли будут поддерживать символы, которые вы хотите напечатать, если выходят за пределы Unicode с расширенным диапазоном Latin1 или Latin1,
я использую BaseFont.createFont(...)
чтобы внешний шрифт был включен в мой PDF в iText (Java) - тот, который поддерживает все символы, которые я пишу. Возможно, вам удастся создать объект Font и затем передать его в HtmlTextWriter?
PdfFont font = PdfFontFactory.CreateFont("Helvetica", "CP1254",PdfFontFactory.EmbeddingStrategy.FORCE_NOT_EMBEDDED);
doc.Add(new Paragraph("P").SetFont(font));