我使用html生成PDF文档,因为它的EMR记录必须使用等宽字体。
PDF生成的很好,但是粗体和斜体的css样式被忽略了,因为我使用单个.otf文件作为字体,因此没有粗体和斜体。
我想知道如何启用相同的功能。以下是代码片段。
字体工厂:
public static class MyFontFactory implements FontProvider,Serializable {
public Font getFont(String fontname,
String encoding, boolean embedded, float size,
int style, BaseColor color) {
BaseFont bf3 = null;
try {
bf3 = BaseFont.createFont("Inconsolata.otf",BaseFont.CP1252, BaseFont.EMBEDDED);
} catch (Exception e) {
e.printStackTrace();
}
return new Font(bf3, 6);
}
public boolean isRegistered(String fontname) {
return false;
}
}
PDF生成代码:
public void createPdf(Object object) throws Exception, DocumentException{
// step 1
Document document = new Document();
// step 2
PdfWriter.getInstance(document, new FileOutputStream(new File("test.pdf")));
// step 3
document.open();
// create extra properties
HashMap<String,Object> map = new HashMap<String, Object>();
map.put(HTMLWorker.FONT_PROVIDER, new MyFontFactory());
// step 4
String snippet;
// create the snippet
snippet = createHtmlSnippet(object);
Map<Object,Object> model = new HashMap<Object,Object>();
model.put("object", object);
StyleSheet css = new StyleSheet();
Map<String, String> stylemap = new HashMap<String, String>();
stylemap.put("font-style", "italic");
stylemap.put("font-size", "small");
stylemap.put("font-weight", "bold");
css.loadStyle("header",(HashMap<String, String>) stylemap);
css.loadStyle("strongClass", "text-decoration", "underline");
List<Element> objects = HTMLWorker.parseToList(new StringReader(snippet), css, map);
for (Element element : objects)
document.add(element);
// step 5
document.close();
}
在上面的代码中,提供的CSS不会对输出产生任何影响
正如我提到的,由于定义了单个字体,如果我想使用粗体和
斜体字如何实现?
如果有人提供有关的指针或帮助,我将不胜感激。
谢谢。
注意:如果我删除等宽字体,将应用css。
最佳答案
您正在将字体系列与字体混淆。
Inconsolata是一个字体家族,由不同的字体组成:
inconsolata.ttf中定义的常规Inconsolata
inconsolata-Bold.ttf中定义的Inconsolata粗体
见http://code.google.com/p/googlefontdirectory/source/browse/ofl/inconsolata/
我不知道任何粗体,斜体或粗斜体版本,因为我假设"there is no bold or italic for Inconsolata."并且如果没有用于其他样式的字体程序,则不应指望iText支持这些样式(*)。
然后,我找到了一个带有TTF粗体字体的存储库:http://code.google.com/p/googlefontdirectory/source/browse/ofl/inconsolata/
搜索StackOverflow我在StackOverflow上阅读了有关Inconsolata Italic in MacVim的问题;不幸的是,这些字体不能在iText中使用。
(*)当字体不支持粗体或斜体时,iText可以通过更改渲染模式和/或倾斜来模仿这些样式。但是,通过选择其他等宽字体,您将获得更好的结果。
关于java - HTML View 中的iText等宽字体在CSS样式中带有粗体,斜体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15195257/