2017-10-25 16 views
1

.pptxスライドを自分のサーバー上の.pdfドキュメントに変換する際に問題があります。私は、.pptxファイルには、extpdf 5.5.10とapache poi 3.15を使用します。テキストに漢字が含まれていると、すべての文字の位置が正しくありません。私のローカルマシン(Windows 7)には何の問題もありません。 enter image description hereitextpdfを使用して.pptxを.pdfに変換します。中国語の文字の位置が正しくない

これは、私のマシン上でどのように見えるか

enter image description here

であり、これは、それは(CentOSのLinuxのインストールUbuntuのフォントファミリを1708年4月7日(コア)を放出)サーバー上のように見えるものです

PdfContentByte canvas = writer.getDirectContent(); 
UnicodeFontMapper mapper = new UnicodeFontMapper(); 
    for (XSLFSlide slide : ppt.getSlides()) { 
     PdfTemplate template = canvas.createTemplate(width, height); 
     Graphics2D g2d = new PdfGraphics2D(template, width, height, mapper); 
     // default rendering options 
     DrawFactory.getInstance(g2d).fixFonts(g2d); 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
     g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); 
     g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); 
     //Draw slide 
     slide.draw(g2d); 
     canvas.addTemplate(template, 0, 0); 
     g2d.dispose(); 
     document.newPage(); 
    } 

UnicodeFontMapperクラス:

これは、私は、変換を行うために使用(Java)のコードです
public class UnicodeFontMapper extends DefaultFontMapper { 

@Override 
public BaseFont awtToPdf(Font font) { 
    //using own fonts 
    String fontFamily = "ArialUni"; 
    registerFontFamily(fontFamily); 
    int style = com.itextpdf.text.Font.NORMAL; 
    if (font.isBold()) { 
     if (font.isItalic()) { 
      style = com.itextpdf.text.Font.BOLDITALIC; 
     } else { 
      style = com.itextpdf.text.Font.BOLD; 
     } 
    } 
    com.itextpdf.text.Font pdfFont = FontFactory.getFont(fontFamily, BaseFont.IDENTITY_H, true, font.getSize(), style); 
    return pdfFont.getBaseFont(); 
} 

私はArialUni.ttfフォントを使用します。私が理解しているように私はサーバー上に何かを見逃していますが、私は正確に何が分かりません。

答えて

3

すべてのシステムにArialユニコードがありません。 これにより、iTextはそのフォントで指定した文字を表示しなくなる可能性があります。 (フォントにグリフが含まれていない場合も同様です)。

OpenJDKを使用している場合は、graphics2Dの動作を調べることができます。おそらく、あなたはWindows上でOracleのJDKのバージョンを使用していて、CentOSではOpenJDKを使用しています。両方のバージョンのJDKは同じ方法で動作するはずですが、Graphics2Dのように一部の部分に小さな違いがあるかもしれません。

あなたは簡単にjava -version

+1

感謝を実行することにより、使用しているJDKのバージョンを確認することができます。サーバーにarialuni.ttfをインストールすると問題が解決しました。私は混乱していて、文字は右のグリフでレンダリングされていたが、間違った位置に表示されていたので、考えていなかったので、nedeedフォントがすでにサーバーにインストールされていると思った。 – JaneXQ

関連する問題