2015-01-05 2 views
3

이 문제에 관해 다른 질문을했지만 작동하지 못했습니다. 코드를 변경 했으므로 이제 다음과 같이됩니다.itextpdf 키릴 문자가 포함 된 HTML 로의

import java.io.FileOutputStream; 
import java.io.StringReader; 

import com.itextpdf.text.Document; 
import com.itextpdf.text.PageSize; 
import com.itextpdf.text.pdf.PdfWriter; 
import com.itextpdf.tool.xml.XMLWorkerHelper; 
public class HTM { 

    public static void main(String ... args) { 
     try { 
      Document document = new Document(PageSize.LETTER); 
      PdfWriter pdfWriter = PdfWriter.getInstance 
          (document, new FileOutputStream("C:\\testpdf.pdf")); 
      document.open(); 

      XMLWorkerHelper worker = XMLWorkerHelper.getInstance(); 

      String htmlString = "<html><head>" 
        + "<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=UTF-8\" />" 
        + "</head><body>" 
        + "<h1>Zdravo Кристијан!</h1>" 
        + "</body></html>"; 


      worker.parseXHtml(pdfWriter, document, new StringReader(htmlString)); 
      document.close(); 
      System.out.println("Done."); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

내 문제는 pdf에 키릴 문자가 표시되지 않는다는 것입니다. 나는 다른 문자셋과 글꼴을 가진 간단한 pdf를 만드는 방법을 알고 있지만 html 파일이나 문자열을 pdf로 변환하려고한다. (필자의 경우에는 html 문자열이다.) 미리 감사드립니다.

+2

사용 된 글꼴 ** ** 키릴 문자를 지원합니까? 비슷한 문제에 대해 http://stackoverflow.com/questions/26631815/cant-get-czech-characters-while-generating-a-pdf를 읽으십시오. – usr2564301

+0

또한 전체 툴체인이 UTF-8로 설정되어 있는지 확인해야합니다. –

+0

예. 문제는 내가 HTML을 pdf로 변환해야한다는 것이다. 나는 단락과 함께 성공했다. 그러나 그것은 내가 필요한 것이 아니다. 내 예제에서 글꼴을 사용하는 방법을 알고 있습니까? – Chris

답변

0

많은 것을 시도했지만 매번 뭔가를 놓쳤습니다. @BrunoLowagie 및 @SubOptimal에 감사드립니다. 여기에 내 글꼴을 사용자 지정 글꼴로 실행시키는 코드가 있습니다. 또한 간단한 html을 문자열로 포함하고 있지만 실제 html 및 css 파일로 어떻게 수행 할 수 있는지 (주석에) 표시되어 있습니다.

public class HtmlToPdf { 
    public static final String DEST = "/home/christian/Desktop/testDoc.pdf"; 

    public void createPdf(String file) throws IOException, DocumentException { 
     // step 1 
     Document document = new Document(); 

     // step 2 
     PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file)); 
     writer.setInitialLeading(12.5f); 

     // step 3 
     document.open(); 

     // step 4 

     // CSS 
     CSSResolver cssResolver = new StyleAttrCSSResolver(); 
     // CssFile cssFile = XMLWorkerHelper.getCSS(new FileInputStream(CSS)); 
     // cssResolver.addCss(cssFile); 

     // HTML 
     XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS); 
     fontProvider.register("fonts/Arimo-Regular.ttf"); 
     fontProvider.register("fonts/Arimo-Bold.ttf"); 
     fontProvider.register("fonts/Arimo-Italic.ttf"); 
     fontProvider.addFontSubstitute("lowagie", "Arimo"); 
     CssAppliers cssAppliers = new CssAppliersImpl(fontProvider); 
     HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers); 
     htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory()); 

     // Pipelines 
     PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer); 
     HtmlPipeline html = new HtmlPipeline(htmlContext, pdf); 
     CssResolverPipeline css = new CssResolverPipeline(cssResolver, html); 

     // XML Worker 
     XMLWorker worker = new XMLWorker(css, true); 
     XMLParser p = new XMLParser(worker); 

     // p.parse(new FileInputStream(HTML)); 
     String htmlContent = " HERE GOES HTML CODE "; 
     p.parse(new StringReader(htmlContent)); 
     // step 5 
     document.close(); 
    } 

    public static void main(String[] args) throws IOException, DocumentException { 
     new D06_ParseHtmlFonts().createPdf(DEST); 
    } 
} 

은 나는 CSS/HTML과 이메일 클라이언트는 항상 인라인 CSS를 사용하기 font-family: actual font that supports wished encoding;을하는 것이 중요 것으로 나타났습니다.

2

@ bruno-lowagie의 의견에 따르면 게시 된 코드를 Windows에서 작동 시키려면 약간의 변경 만 필요합니다. 특정 글꼴을 지정하는 방법에 대한 자세한 내용은 Bruno가 제안한 예제를 참조하십시오.

public class HTM { 

    public static void main(String ... args) { 
     try { 
      Document document = new Document(PageSize.LETTER); 

      PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("testpdf.pdf")); 
      document.open(); 

      XMLWorkerHelper worker = XMLWorkerHelper.getInstance(); 

      String htmlString = "<html><head>" 
        + "<meta http-equiv=\"content-type\" content=\"application/xhtml+xml; charset=UTF-8\" />" 
        + "</head><body>" 
        + "<p style=\"font-family:courier new\">" // the font to use 
        + "<h1>Zdravo Кристијан!</h1>" 
        + "</p>" 
        + "<h1>Zdravo Кристијан!</h1>" 
        + "</body></html>"; 

      worker.parseXHtml(pdfWriter, document, new StringReader(htmlString)); 
      document.close(); 
      System.out.println("Done."); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

나는 당신의 코드를 시험해 보았고 나는 해결책에 얼마나 가까이 있는지 충격을 받았다. 고맙습니다! – Chris

관련 문제