我正在构建一个应用程序,其中允许用户使用图层将文本插入 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,因此无论修改什么代码,我都需要为用户提供真正的所见即所得体验。
我尝试了其他字体和类型,但它们之间仍然存在一些差异。我想我缺少一些配置。
谢谢。