首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PDFBox True Type字体粗体

PDFBox True Type字体粗体
EN

Stack Overflow用户
提问于 2018-10-01 23:43:18
回答 2查看 1.2K关注 0票数 1

我正在开发一个应用程序,它必须创建一个具有不同字体样式的PDF文件(有时是粗体,有时是斜体,有时是常规字体)。我必须使用的字体是Eras Medium BT (True Type),我使用一个名为"erasm.TTF“的本地文件加载它。我的问题是,如何使用我的Eras字体文件绘制粗体或斜体文本?

我有一个遗留代码,它使用iText生成类似的PDF,为了获得粗体字体,我只需要调用这个函数:

代码语言:javascript
运行
复制
public Font getFontErasMDBTBold9(){
    FontFactory.register(fontPath + "erasm.TTF", "ERASM");
    fontErasMDBT9 = FontFactory.getFont("ERASM", 9, Font.BOLD, Color.BLACK);
    return fontErasMDBT9;
}

编辑:

我在其他问题中看到,它可以使用不同的字体变体,或者通过使用原始命令来人工完成。我想要的是使用原始字体,并设置一些文本为粗体,其他文本斜体,其余只是常规。

是否可以像在iText中那样以粗体或斜体样式打开字体?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-03 14:20:00

感谢您的评论和建议。最后,我使用PDFPageContentStream类的setRenderingMode方法来设置文本的不同样式。下面是一个私有方法,用于使用所需的呈现模式编写一些文本:

代码语言:javascript
运行
复制
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()
}

下面是编写常规文本和粗体文本的代码。

代码语言:javascript
运行
复制
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语言编写的。

票数 0
EN

Stack Overflow用户

发布于 2021-02-16 20:09:44

这里有一个完整的例子来解释如何将使用的字体呈现为斜体和粗体:

代码语言:javascript
运行
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52594576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档