Html to pdf在Asp.Net MVC应用程序中缺少某些字符(itextsharp)

时间:2014-06-27 07:09:56

标签: asp.net-mvc-4 pdf utf-8 character-encoding itextsharp

我想使用itextsharp库将razor视图导出为pdf。问题是在pdf文档中缺少一些土耳其字符,如İ,ı,Ş,ş等。用于导出pdf的代码是:

  public PdfActionResult(object model)
    {
        Model = model;
    }
 public override void ExecuteResult(ControllerContext context)
    {
        IView viewEngineResult;
        ViewContext viewContext;

        if (ViewName == null)
        {
            ViewName = context.RouteData.GetRequiredString("action");
        }

        context.Controller.ViewData.Model = Model;


        var workStream = new MemoryStream();
        var document = new Document();

        PdfWriter writer = PdfWriter.GetInstance(document, workStream);
        writer.CloseStream = false;

        document.Open();

        viewEngineResult = ViewEngines.Engines.FindView(context, ViewName, null).View;
        var sb = new StringBuilder();
        TextWriter tr = new StringWriter(sb);

        viewContext = new ViewContext(context, viewEngineResult, context.Controller.ViewData,
        context.Controller.TempData, tr);
        viewEngineResult.Render(viewContext, tr);

        CultureInfo ci = new CultureInfo("az-Latn-AZ");
        Encoding enc = Encoding.GetEncoding(ci.TextInfo.ANSICodePage);

        Stream stream = new MemoryStream(enc.GetBytes(sb.ToString()));

        XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, stream, null);

        document.Close();

        new FileContentResult(workStream.ToArray(), "application/pdf").ExecuteResult(context);
    }
}

然后我将其视为:

 public ActionResult StudentPdf(Guid studentId)
    {
        var model = _studentRepository.GetByIdGuid(studentId);

        return new PdfActionResult(model);
    }

感谢您的回复

1 个答案:

答案 0 :(得分:2)

通过这种方式你可以打印所有土耳其人的角色。

String htmlText = html.ToString();

        Document document = new Document();

        string filePath = HostingEnvironment.MapPath("~/Content/Pdf/");
        PdfWriter.GetInstance(document, new FileStream(filePath + "\\pdf-"+Name+".pdf", FileMode.Create));
        document.Open();

        iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document);
        FontFactory.Register(Path.Combine(_webHelper.MapPath("~/App_Data/Pdf/arial.ttf")),  "Garamond");   // just give a path of arial.ttf 
        StyleSheet css = new StyleSheet();
        css.LoadTagStyle("body", "face", "Garamond");
        css.LoadTagStyle("body", "encoding", "Identity-H");
        css.LoadTagStyle("body", "size", "12pt");

        hw.SetStyleSheet(css);

         hw.Parse(new StringReader(htmlText));

希望这会有所帮助 问候, Vinit Patel