首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >html视图中的iText单频字体,粗体,斜体来自css样式

html视图中的iText单频字体,粗体,斜体来自css样式
EN

Stack Overflow用户
提问于 2013-03-04 05:40:08
回答 1查看 1.8K关注 0票数 1

我使用html来生成PDF文档,因为它是EMR记录,所以我必须使用单频字体。

PDF的生成很好,但是粗体和斜体的css样式被忽略了,因为我使用单个.otf文件作为字体,因此没有粗体和斜体。

我想知道如何实现同样的功能。下面是代码片段。

字体工厂:

代码语言:javascript
复制
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生成代码:

代码语言:javascript
复制
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不会对输出产生任何影响,如果我想要有粗体和斜体,如何实现这一点?

如果有人提供关于同一方面的指示或帮助,真的很感激。

谢谢。

注意:如果我删除单个字体,css就会被应用.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-04 11:48:06

你把字体系列和字体混淆了。

Inconsolata是一个由不同字体组成的字体系列:

  • inconsolata.ttf中定义的正则自整律
  • 在Inconsolata Bold.ttf中定义的inconsolata粗体

请参阅http://code.google.com/p/googlefontdirectory/source/browse/ofl/inconsolata/

我不知道任何粗体、斜体或粗体斜体版本,因为我假定是“不能用粗体或斜体字来表示”,如果没有其他样式的字体程序,您就不应该期望iText支持这些样式(*)。

然后,我找到了一个存储库,其中包含一个用于粗体字体的TTF:http://code.google.com/p/googlefontdirectory/source/browse/ofl/inconsolata/

在搜索StackOverflow时,我阅读了关于意大利语在MacVim中的表现 on StackOverflow的问题;不幸的是,这些字体不能在iText中使用。

(*)当字体不支持粗体或斜体时,iText可以通过更改呈现模式和/或倾斜来模拟这些样式。但是,通过选择另一种单间距字体,您将获得更好的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15195257

复制
相关文章

相似问题

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