gpt4 book ai didi

java - 使用 itextpdf 将 .pptx 转换为 .pdf。汉字字符定位错误

转载 作者:行者123 更新时间:2023-11-29 04:24:48 25 4
gpt4 key购买 nike

我在将服务器上的 .pptx 幻灯片转换为 .pdf 文档时遇到问题。我将 itextpdf 5.5.10 和 apache poi 3.15 用于 .pptx 文件。如果文本中包含汉字,则所有字符的定位都不好。在我的本地机器(Windows 7)上我没有问题。这是我机器上的样子

enter image description here

这是它在服务器上的样子(CentOS Linux 版本 7.4.1708(核心版),安装了 ubuntu 字体系列) enter image description here

这是我用来进行转换的 (java) 代码:

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 字体。据我所知,我的服务器上丢失了一些东西,但我无法弄清楚到底是什么。

最佳答案

Arial unicode 并非在所有系统上都存在。这会导致 iText 无法呈现您在该字体中指定的字符。 (类似地,如果字体不包含字形)。

可选地,如果您使用的是 OpenJDK,您可能想要查看 graphics2D 的工作原理。也许您在 Windows 上使用 Oracle 版本的 JDK,在 CentOS 上使用 OpenJDK。尽管 JDK 的两个版本应该以相同的方式工作,但在某些方面可能存在细微差别,例如 Graphics2D

您可以通过运行 java -version

轻松检查您使用的 JDK 版本

关于java - 使用 itextpdf 将 .pptx 转换为 .pdf。汉字字符定位错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46940505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com