Java 飞碟(xhtmlrenderer)不';我的字体不能加粗吗?

Java 飞碟(xhtmlrenderer)不';我的字体不能加粗吗?,java,itext,flying-saucer,xhtmlrenderer,Java,Itext,Flying Saucer,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

我在飞碟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中,我有以下内容(例如)

有人能解释一下为什么我不能在xhtmlrenderer中使用bold,或者是一种克服这个问题的方法吗


谢谢,p.

我不是专家,但如果你的字体没有加粗的变体,飞碟可能只是“不加粗”。当您以编程方式使字体加粗时,您使用的字体类可以(在幕后)使用某种内部机制自行使字体“加粗”。在现实世界中,Photoshop就是一个很好的例子:如果你的字体没有加粗,你就不能加粗,但是Photoshop有一个“模拟加粗”选项,它可以在不使用“真实”加粗字体的情况下加粗符号

一个很好的诊断方法是切换你在飞碟中使用的字体,但保留相同的文档。如果新字体也不是粗体,那么问题就不那么突出了。如果它确实变为粗体,那是因为您的字体没有粗体版本


希望这能有所帮助。

如果您的传统iText代码可以生成粗体字体,那么TTF文件似乎确实包含粗体变体,即使飞碟没有使用它。如果在CSS样式表中指定粗体变体的确切名称,则可以在飞碟中使用粗体变体

例如:

<style type="text/css"> 
* {font-family:myfont;}
b {font-family:"myfont bold";}
</style> 

*{字体系列:myfont;}
{font系列:“myfont粗体”;}

通过在AdobeReader中打开由遗留代码生成的PDF,您应该能够找到字体的确切名称。转到文件-->属性…-->字体以查看文档中所有字体的列表。可能会有一个“myfont”条目和一个“myfont bold”条目或类似条目。在样式表中使用后者。

飞碟使用itext生成pdf。我假设飞碟将使用相同的机制(即font.setStyle)来应用
bold
变换。很明显,我错了,我不反对你的答案,事实上我100%同意,但我在寻找解决方案,而不是解释。我的下一站是浏览“飞碟”源代码,不过我愿意为其他人支付50美元;)无论如何,谢谢。我发现了一个提供粗体变体的ttf文件,添加它解决了我的问题。对于您提供的示例代码,我会在这个问题中添加+10,因为我有相同的问题,但更重要的是,我必须在呈现文档时动态更改文档。我已经花了很多时间浏览了saurcer的飞行代码,但直到看到你的代码片段时,我才意识到直接使用itext会容易得多。非常感谢。
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));
<style type="text/css"> 
* {font-family:myfont;}
b {font-family:"myfont bold";}
</style>