2013-10-23 5 views
0

itextsharp XMLWorker 라이브러리를 사용하여 일부 HTML을 PDF로 구문 분석하려고합니다. 그것은 잘 작동하지만 내 PDF로 일부 유니 코드 문자 (터키어) 렌더링 할 수 없습니다.iTextSharp에서 글꼴 패밀리를 설정할 수 없습니다. XMLWorker

나는이 문제에 대해 여러 블로그를 읽고 모두 유니 코드 문자를 지원하는 글꼴을 등록 할 것을 제안합니다. 그런 다음 외부 CSS 파일에서 사용할 글꼴 패밀리를 지정해야합니다.

html 
{ 
    font-family: 'Arial Unicode MS'; 
} 

나는 또한 모두 Arial을 가족으로 시도했습니다. 나는 html로 가족을 설정하려고 시도했다.

<body face = 'Arial'> 

누구도 작동하지 않습니다. 글꼴은 문제없이 등록되며 외부 CSS 파일도 작동합니다.

이 내가 PDF로 HTML로 변환하는 방법이다,

string arialuniTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF"); 
FontFactory.Register(arialuniTff); 

// Resolve CSS 
var cssResolver = new StyleAttrCSSResolver(); 
var cssFile = XMLWorkerHelper.GetCSS(new FileStream(Server.MapPath("~/Content/Editor.css"), FileMode.Open)); 
cssResolver.AddCss(cssFile); 

// HTML 
CssAppliers ca = new CssAppliersImpl(); 
HtmlPipelineContext hpc = new HtmlPipelineContext(ca); 
hpc.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); 

// PIPELINES 
PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer); 
HtmlPipeline htmlPipe = new HtmlPipeline(hpc, pdf); 
CssResolverPipeline css = new CssResolverPipeline(cssResolver, htmlPipe); 

XMLWorker worker = new XMLWorker(css, true); 
XMLParser p = new XMLParser(worker); 
StringReader sr = new StringReader("<html><head></head><body>" + topMessage.Replace("<br>", "<br></br>") + "</body></html>"); 
p.Parse(sr); 

답변

0

난 당신이 매개 변수를 사용하지 않고 CssAppliersImpl 인스턴스를 만들 것을 알 수있다. 글꼴을 처리하려면 'FontProvider '구현을 만들고 CssAppliersImpl 생성자에 대한 매개 변수로 해당 구현의 인스턴스를 사용해야합니다. 예를 들어, TestFontProvider 클래스를 생성하면 HTML을 파싱 할 때 필요한 글꼴 이름을 알 수 있습니다. 그러면 올바른 글꼴이 등록되어 있는지 이해하는 데 도움이됩니다. 필요한 모든 글꼴이 등록되어있는 것을 확인하면 다른 글꼴로 인해 문제가 발생한 것일 수 있습니다. 예를 들어, HTML이 잘못된 인코딩을 사용하여 구문 분석 된 것일 수 있습니다.

관련 문제