Ich habe Probleme mit der Konvertierung von .pptx-Folien in .pdf-Dokumente auf meinem Server. Ich benutze itextpdf 5.5.10 und apache poi 3.15 für .pptx-Dateien. Wenn der Text chinesische Zeichen enthält, ist die Positionierung aller Zeichen schlecht. Auf meinem lokalen Rechner (Windows 7) habe ich keine Probleme. Dies ist, wie es auf meinem Rechner siehtKonvertieren von .pptx zu .pdf mit itextpdf. Falsche Zeichenpositionierung mit chinesischen Zeichen
Und das ist, wie es auf dem Server sucht (CentOS Linux-Version 1708.04.07 (Core) mit installiert ubuntu Schriftfamilie)
das ist die (Java) Code, den ich um die Konvertierung zu tun verwenden:
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 Klasse:
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();
}
Ich verwende ArialUni.ttf Schriftart. Wie ich verstehe, vermisse ich etwas auf meinem Server, aber ich weiß nicht genau was.
Dank Verwendung ausgeführt werden. Die Installation von arialuni.ttf auf dem Server hat das Problem gelöst. Ich war verwirrt und habe nicht darüber nachgedacht, weil Charaktere mit richtigen Glyphen, aber in falschen Positionen gerendert wurden, so dachte ich, dass Neeed Schrift bereits auf dem Server installiert ist. – JaneXQ