itext 文本域 字体样式设置

最近在做的项目中使用itext对pdf文件进行操作,使用adobe acrobat在pdf上添加文本域,并在文本域中填充值,使用的是acroFields.setField(key, value)
现在需要对文本域中填充的值设置样式,使用

BaseFont baseFont = BaseFont.createFont("SIMSUN.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
acroFields.setFieldProperty(nameField, "textfont", baseFont, null);

设置字体后,还需要对字体加粗,该怎么设置?

阅读 16.2k
1 个回答

使用acroFields.setFieldProperty(nameField, "textfont", baseFont, null);的方式不能加粗,因为第三个参数必须是BaseFont类型,不能是Font类型。
可以使用下面的方式加粗:

BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(bf, 12, Font.BOLD);
//Font font = FontFactory.getFont(FontFactory.COURIER, 20, Font.BOLD, BaseColor.RED);
AcroFields s = ps.getAcroFields();

// 设置加粗只能用这种方式
List<AcroFields.FieldPosition> multiLinePosition = s.getFieldPositions("name");
int page = multiLinePosition.get(0).page;
Rectangle rectangle = multiLinePosition.get(0).position;
float left = rectangle.getLeft();
float right = rectangle.getRight();
float top = rectangle.getTop();
float bottom = rectangle.getBottom();
PdfContentByte pdfContentByte = ps.getOverContent(page);
ColumnText columnText = new ColumnText(pdfContentByte);

Rectangle r = new Rectangle(left, bottom, right, top);
columnText.setSimpleColumn(r);

//FontFactory.getFont(FontFactory.COURIER, 20, Font.BOLD, BaseColor.RED)
Chunk chunk = new Chunk("在路上");
Paragraph paragraph = new Paragraph(12, chunk);
//paragraph.setSpacingBefore(16);
columnText.addText(paragraph);
// 设置字体,如果不设置添加的中文将无法显示
paragraph.setFont(font);
columnText.addElement(paragraph);
columnText.go();

这种方式比较笨重,但是暂时未找到好的方式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题