6

reportlab pdfgen を使用して、印刷用の動的な PDF ドキュメントを作成しています。それは何年もの間非常にうまく機能しています。

募金イベントが近づいており、使用している「テーマ」フォント (具体的には talldeco.ttf) を使用して PDF 領収書を生成したいと考えています。

以下を使用して問題なくフォントを設定しました。

        from reportlab.pdfbase import pdfmetrics 
        from reportlab.pdfbase.ttfonts import TTFont 
        ttfFile = "/usr/share/fonts/truetype/ttf-tall-deco/TALLDECO.TTF"
        pdfmetrics.registerFont(TTFont("TallDeco", ttfFile))
        p.setFont("TallDeco", 18) # Was Times-Bold...

ここで問題が発生します。一部のテキストは太字で斜体にする必要があり、トールデコには 1 つのファイルしか付属していません (他のフォントとは異なります)。openoffice でこのフォントのテキストを太字および斜体にすることができます。

reportlab ユーザー ガイド (http://www.reportlab.com/software/opensource/rl-toolkit/guide/) の 53 ページによると、それは可能であるはずであり、コードと結果が表示されますが、当社のソフトウェアは drawString 呼び出しを使用しています。段落の代わりに。上記のサンプルに基づくテスト アプリ:

        from reportlab.pdfbase import pdfmetrics 
        from reportlab.pdfbase.ttfonts import TTFont 
        from reportlab.pdfbase.pdfmetrics import registerFontFamily
        ttfFile = "/usr/share/fonts/truetype/ttf-tall-deco/TALLDECO.TTF"
        pdfmetrics.registerFont(TTFont("TallDeco", ttfFile))
        registerFontFamily('TallDeco',normal='TallDeco',bold='TallDeco-Bold',italic='TallDeco-Italic',boldItalic='TallDeco-BoldItalic')
        p.setFont("TallDeco-Bold", 18) # Was Times-Bold...

「TallDeco-Bold」でキーエラーが発生するだけです。

助言がありますか?

4

2 に答える 2

5

TTFont にはsubfontIndexパラメーターがあります。

以下は私にとってはうまくいきます(OS Xでreportlab 3.0を使用):

menlo_path = "/System/Library/Fonts/Menlo.ttc"
pdfmetrics.registerFont(ttfonts.TTFont("Menlo", menlo_path,
                                       subfontIndex=0))
pdfmetrics.registerFont(ttfonts.TTFont("Menlo-Bold", menlo_path,
                                       subfontIndex=1))
pdfmetrics.registerFont(ttfonts.TTFont("Menlo-Italic", menlo_path,
                                       subfontIndex=2))
pdfmetrics.registerFont(ttfonts.TTFont("Menlo-BoldItalic", menlo_path,
                                       subfontIndex=3))
pdfmetrics.registerFontFamily("Menlo", normal="Menlo", bold="Menlo-Bold",
                              italic="Menlo-Italic",
                              boldItalic="Menlo-boldItalic")
于 2014-02-20T18:45:04.690 に答える
-2

bold、italic、boldItalic フォントを定義する必要があります。

pdfmetrics.registerFont(TTFont("TallDeco-Bold", ttfFile))
pdfmetrics.registerFont(TTFont("TallDeco-Italic", ttfFile))
pdfmetrics.registerFont(TTFont("TallDeco-BoldItalic", ttfFile))

しかし、それらはすべて同じttfFileを指しているため、出力はすべてデフォルトの TallDeco のように見えます。つまり、太字や斜体はありません。

于 2013-03-26T13:35:15.767 に答える