编程语言
首页 > 编程语言> > java – 飞碟(xhtmlrenderer)没有加粗我的字体?

java – 飞碟(xhtmlrenderer)没有加粗我的字体?

作者:互联网

我在飞碟xhtmlrenderer生成的pdf中使用自定义truetype字体.

ITextRenderer renderer = new ITextRenderer();
renderer.getFontResolver().addFont("myfont.ttf", BaseFont.CP1252, BaseFont.EMBEDDED);
renderer.setDocument(XMLResource.load(in).getDocument(), url);
renderer.layout();
renderer.createPDF(out);

在正在呈现的html中,我有以下(例如)

<html>
<head>
<style type="text/css">
*{font-family:myfont;} /* <-- this works, trust me */
</style>
</head>
<body>
<p>some plain text<b>some bold text</b> <span style="font-weight:bold;">more bold</span></p>
</body>
</html>

但即使使用< b>和font-weight:bold我不能让文字大胆出来.

现在,我知道这应该工作,因为我有一个类似的(遗留)项目使用相同的字体,和普通的旧itext(即没有xhtmlrenderer),它确实生成pdfs与粗体文本通过:

myFont = BaseFont.createFont("myfont.ttf", BaseFont.CP1252, BaseFont.EMBEDDED);
Font boldFont = new Font(myFont);
boldFont.setStyle(Font.BOLD);

com.lowagie.text.Document document = ...;
document.add(new Paragraph("plain", myFont));
document.add(new Paragraph("bold", boldFont));

任何人都可以解释为什么我不能使用xhtmlrenderer粗体,也许是一种克服这个问题的方法?

谢谢,p.

解决方法:

我不是专家,但如果你的字体没有大胆的变体,那么Flying Saucer可能只是“没有大胆”.当您以编程方式使字体变粗时,您使用的字体类可以(在幕后)使用某种内部机制使字体“更大胆”.在现实世界中,这是一个很好的例子:Photoshop:如果你的字体没有大胆的变化,你就不能把它变成粗体,但Photoshop有一个“模拟的粗体”选项,它会进入并加厚没有真正使用“真实”粗体的符号.

一个很好的诊断方法是切换你在Flying Saucer中使用的字体,但保留相同的文件.如果新字体也不是粗体,那么问题就不那么热门了.如果它变为粗体,则是因为没有粗体版本的字体.

希望这可以帮助.

标签:java,itext,xhtmlrenderer,flying-saucer
来源: https://codeday.me/bug/20190606/1190286.html