PDFBox True Type字体粗体

时间:2018-10-01 15:43:18

标签: pdfbox

我正在开发一个应用程序,该应用程序必须创建具有不同字体样式(有时是粗体,有时是斜体,有时是常规字体)的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中那样以粗体或斜体样式打开字体?

2 个答案:

答案 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();