【问题标题】:HTML To PDF Turkish Character ProblemHTML 到 PDF 土耳其语字符问题
【发布时间】:2010-10-26 11:22:20
【问题描述】:

我想使用 ITextSharp 将 ASP.NET 网页转换为 pdf。我确实写了一些代码,但我不能让它显示土耳其字符。谁能帮帮我?

代码如下:

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)
        {

        }
    }
}

【问题讨论】:

  • 标题无需使用大写锁定...
  • 不,抱歉。我不会说 ASP..
  • 据我所知,itextsharp 的 html 解析器非常原始。

标签: pdf character-encoding itextsharp turkish


【解决方案1】:
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,这可能会让人头疼..

【讨论】:

  • 头疼了 5 天后,我认为您对报告工具的看法完全正确。
  • 什么是“pdftable”。每个人都将这个解决方案粘贴到任何地方。我如何将该字体设置为我的 pdf 文档。你能解释一下什么是“pdftable”???
  • @MahmutEFE 我不记得了,这不是问题的重点。关键是你需要在必要时传递你的土耳其字体。
  • 这适用于独立构建,但不适用于 Android 设备。关于如何在 Android 设备上使用土耳其语字符有什么建议吗?
【解决方案2】:

您需要确保使用支持土耳其语字符集的字体(或至少是您尝试写出的字符)编写文本。

我不知道 HtmlTextWriter 在字体使用方面做了什么-它可能会使用一种标准的内置字体,如果落在 Latin1 或 Latin1 之外,它不太可能支持您要打印的字符-扩展的 Unicode 范围。

我使用BaseFont.createFont(...) 在 iText (Java) 中的 PDF 中包含一个外部字体 - 一种支持我正在编写的所有字符的字体。您也许可以创建您的 Font 对象,然后将其传递给 HtmlTextWriter?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 2021-08-25
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多