我正在开发一个应用程序,该应用程序必须创建具有不同字体样式(有时是粗体,有时是斜体,有时是常规字体)的PDF文件。我必须使用的字体是Eras Medium BT(True Type),我使用一个名为“ erasm.TTF”的本地文件加载它。我的问题是,如何使用我的Eras字体文件以粗体或斜体绘制文本?
我有一个使用iText生成类似PDF的旧代码,并且要获取粗体字体,我只需要调用此函数即可:
public Font getFontErasMDBTBold9(){
FontFactory.register(fontPath + "erasm.TTF", "ERASM");
fontErasMDBT9 = FontFactory.getFont("ERASM", 9, Font.BOLD, Color.BLACK);
return fontErasMDBT9;
}
编辑: 在其他问题中,我看到可以使用不同的字体变体来完成,也可以使用原始命令来人为地完成。我想要的是使用原始字体,并将一些文本设置为粗体,将其他文本设置为斜体,其余的设置为常规。
是否可以像在iText中那样以粗体或斜体样式打开字体?
答案 0 :(得分:0)
感谢您的评论和建议。最后,我使用PDFPageContentStream类的setRenderingMode方法设置文本的不同样式。这是一种使用所需的渲染模式编写一些文本的私有方法:
private void writeText(PDPageContentStream contentStream, String text, PDFont font,
int size, float xPos, float yPos, RenderingMode renderMode = RenderingMode.FILL) {
contentStream.beginText()
contentStream.setFont(font, size)
contentStream.newLineAtOffset(xPos, yPos)
contentStream.setRenderingMode(renderMode)
contentStream.showText(text)
contentStream.endText()
}
这是编写常规文本和粗体文本的代码。
private void addFrontPage(PDDocument document) {
PDPage frontPage = newPage()
PDPageContentStream contentStream = new PDPageContentStream(document, frontPage)
// Write text
String text = "This is a bold text"
writeText(contentStream, text, eras, 18, 25, 500, RenderingMode.FILL_STROKE)
text = "and this is a regular text"
writeText(contentStream, text, eras, 9, 25, 480)
contentStream.close()
document.addPage(frontPage)
}
注意:该代码是用Groovy语言编写的。
答案 1 :(得分:0)
这里有一个完整的例子来解释如何将使用的字体呈现为斜体和粗体:
String message = "This is a message in the page.";
PDDocument document = new PDDocument();
PDPage page = new PDPage();
PDPageContentStream contentStream = new PDPageContentStream( document, page, AppendMode.APPEND, true, true);
contentStream.beginText();
contentStream.setFont( font, fontSize ); // set font and font size.
contentStream.setNonStrokingColor( 1f, 0, 0 ); // set text color to red
// Modify font to appear in Italic:
Matrix matrix = new Matrix( 1, 0, .2f, 1, 7, 5 );
contentStream.setTextMatrix( matrix );
// Modify the font to appear in bold:
contentStream.setRenderingMode( RenderingMode.FILL_STROKE );
contentStream.setStrokingColor( 1f, 0, 0 );
// Write text:
contentStream.showText( message );
contentStream.endText();
contentStream.close();
document.addPage( page );
document.save( PDF_FILE_PATH );
document.close();