.pptxスライドを自分のサーバー上の.pdfドキュメントに変換する際に問題があります。私は、.pptxファイルには、extpdf 5.5.10とapache poi 3.15を使用します。テキストに漢字が含まれていると、すべての文字の位置が正しくありません。私のローカルマシン(Windows 7)には何の問題もありません。 itextpdfを使用して.pptxを.pdfに変換します。中国語の文字の位置が正しくない
これは、私のマシン上でどのように見えるか
であり、これは、それは(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フォントを使用します。私が理解しているように私はサーバー上に何かを見逃していますが、私は正確に何が分かりません。
感謝を実行することにより、使用しているJDKのバージョンを確認することができます。サーバーにarialuni.ttfをインストールすると問題が解決しました。私は混乱していて、文字は右のグリフでレンダリングされていたが、間違った位置に表示されていたので、考えていなかったので、nedeedフォントがすでにサーバーにインストールされていると思った。 – JaneXQ