asp.net mvc - How can I force itextsharp ITextHandler.Parse to use UTF-8? -
i have code rendering pdf on asp.net mvc server, characters example e accent (ě) not shown correctly. library use itextsharp-lgpl nuget.
the pdf rendering code is:
protected actionresult viewpdf(object model) { // http://www.codeproject.com/articles/66948/rendering-pdf-views-in-asp-mvc-using-itextsharp // create itextsharp document. document doc = new document(); // set document write memory. memorystream memstream = new memorystream(); pdfwriter writer = pdfwriter.getinstance(doc, memstream); writer.closestream = false; doc.open(); // render view xml string, parse string xml dom. string xmltext = this.renderactionresulttostring(this.view(model)); xmldocument xmldoc = new xmldocument(); xmldoc.innerxml = xmltext.trim(); // parse xml itextsharp document. itexthandler texthandler = new itexthandler(doc); texthandler.parse(xmldoc); // close , resulted binary data. doc.close(); byte[] buf = new byte[memstream.position]; memstream.position = 0; memstream.read(buf, 0, buf.length); // send binary data browser. return new binarycontentresult(buf, "application/pdf"); }
the helper method of controller this:
public class pdfcontrollerbase : controller { protected string renderactionresulttostring(actionresult result) { // create memory writer. var sb = new stringbuilder(); var memwriter = new stringwriter(sb); // create fake http context render view. var fakeresponse = new httpresponse(memwriter); var fakecontext = new httpcontext(system.web.httpcontext.current.request, fakeresponse); var fakecontrollercontext = new controllercontext( new httpcontextwrapper(fakecontext), this.controllercontext.routedata, this.controllercontext.controller); var oldcontext = system.web.httpcontext.current; system.web.httpcontext.current = fakecontext; // render view. result.executeresult(fakecontrollercontext); // restore data. system.web.httpcontext.current = oldcontext; // flush memory , return output. memwriter.flush(); string content = sb.tostring(); return content; } }
the view looks like:
@model mynamespace.model.mymodel @{ layout = null; } <?xml version="1.0" encoding="utf-8" ?> <itext creationdate="2/4/2015 5:49:07 pm" producer="itextsharpxml"> <paragraph leading="18.0" font="arial" size="16.0" align="center"> <chunk>@model.title</chunk><newline /><newline /> </paragraph> <paragraph leading="18.0" font="arial" size="10.0" align="justify"> <chunk>@model.textdetail</chunk><newline /> </paragraph> </itext>
i tried add following code pdf rendering, not help:
string arial = path.combine(environment.getfolderpath(environment.specialfolder.fonts), "arial.ttf"); fontfactory.register(arial, "arial");
Comments
Post a Comment