.pptx 슬라이드를 내 서버의 .pdf 문서로 변환하는 데 문제가 있습니다. .pptx 파일에 대해 itextpdf 5.5.10 및 apache poi 3.15를 사용합니다. 텍스트에 중국어 문자가 포함되어 있으면 모든 문자의 위치가 잘못되었습니다. 내 로컬 컴퓨터 (Windows 7)에는 아무런 문제가 없습니다. 이것은 내 컴퓨터itextpdf로 .pptx를 .pdf로 변환 중입니다. 중국어 문자로 잘못된 문자 배치
(CentOS는 리눅스가 설치된 우분투 글꼴 가족과 함께) 1708년 7월 4일 (코어를 해제)
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 클래스 :
이것은 (자바) 코드 내가 변환을 수행하는 데 사용하는 것입니다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