【发布时间】:2012-08-28 18:40:47
【问题描述】:
我正在构建一个应用程序,它允许用户使用图层将文本插入 PDF。
可以使用应用程序设置 PDF 页面中文本的位置,该应用程序使用 JPanel 内的ICEPdf 呈现 PDF。选择图层的位置和大小后,应用使用iText (v. 5.3.2) 将其呈现为 PDF。
我面临的问题是 Swing 的字体渲染与 PDF 中的最终结果明显不同。
以下是一些屏幕截图,均在同一个边框内使用 Helvetica 纯字体:
使用 Swing 渲染文本:
protected void paintComponent(Graphics g){
//for each line...
g.drawString(text, b0, b1);
//b0 and b1 are computed from the selected bounding box for the text
}
我有这个:
使用 iText 渲染文本:
PdfTemplate t; //PdfTemplate is created elsewhere
ColumnText ct = new ColumnText(t);
ct.setRunDirection(PdfWriter.RUN_DIRECTION_NO_BIDI);
ct.setSpaceCharRatio(1);
ct.setSimpleColumn(new Phrase(text, font), b0, b1, b3, b4, font.getSize(), Element.ALIGN_BOTTOM);
//b0, b1, b2 and b3 are the bounding box of the text
ct.go();
我有这个:
所以问题是:怎样才能使 Swing 和 iText 以完全相同的方式呈现字体?我可以调整 Swing 或 iText,所以无论修改什么代码,我都需要为用户提供真正的 WYSIWYG 体验。
我尝试了其他字体和类型,但它们之间仍然存在一些差异。我想我缺少一些配置。
谢谢。
【问题讨论】:
-
您使用哪种字体?您可以尝试在 PDF 中嵌入字体。您还可以检查字符对的字距调整并在任一侧对其进行自定义。
-
我在两边都使用 Helvetica plain。 Helvetica 是核心字体之一,所以我认为我不必导入它。字距调整可能是问题之一。你知道如何在 Swing 中改变它吗?
-
你在使用 itext 的字体映射器吗?你嵌入字体了吗?