我想用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)
        {

        }
    }
}
有帮助吗?

解决方案

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它可以是一个很头疼的工作报告工具的工作..

其他提示

您将需要确保你正在写的字体支持土耳其字符集的文字(或至少caracters您尝试写出来)。

我不知道是什么的HtmlTextWriter确实在字体使用条件 - 它大概会使用内置的是不太可能支持的字符要打印的字体的标准之一,如果和latin1,秋季外Latin1-扩展的Unicode的范围内。

我用BaseFont.createFont(...)已包括在我的iText(Java)的PDF外部字体 - 一个支持,我写的所有字符。你也许可以创建你的字体对象,然后把它传递到HtmlTextWriter的?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top