1

htmlを使用してPDFドキュメントを生成しています。これは、EMRレコードであるため、等幅フォントを使用する必要があるためです。

PDFは正常に生成されていますが、フォントに単一の.otfファイルを使用しているため、太字と斜体のcssスタイルは無視されています。したがって、太字と斜体は使用されていません。

同じことをどのように有効にするのか疑問に思いました。以下はコードスニペットです。

フォントファクトリ:

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が適用されます。

4

1 に答える 1

1

フォントファミリーとフォントを混同しています。

Inconsolataは、さまざまなフォントで構成されるフォントファミリです。

  • inconsolata.ttfで定義されている通常のInconsolata
  • inconsolata-Bold.ttfで定義されているInconsolatabold

http://code.google.com/p/googlefontdirectory/source/browse/ofl/inconsolata/を参照してください

「Inconsolataには太字または斜体はない」と思ったので、太字、斜体、または太字-斜体のバージョンを知りませんでした。また、他のスタイルのフォントプログラムがない場合は、iTextがそれらのスタイルをサポートすることを期待しないでください(*)。

次に、太字フォントのTTFを含むリポジトリを見つけました:http ://code.google.com/p/googlefontdirectory/source/browse/ofl/inconsolata/

StackOverflowの検索StackOverflowのMacVimでInconsolataItalicに関する質問を読みました。残念ながら、これらのフォントはiTextでは使用できません。

(*)フォントが太字または斜体をサポートしていない場合、iTextは、レンダリングモードやスキューを変更することにより、これらのスタイルを模倣できます。ただし、別の等幅フォントを選択すると、より良い結果が得られます。

于 2013-03-04T11:48:06.897 に答える