2017-07-09 24 views
2

reportlabをpython 3で使用して、マクロン(ēēōū)を含む文書を作成しようとしていますが、マクロンがボックス(■)として表示されています。ドキュメントはArialフォントで書かれていますが、ワードプロセッサでファイルを開いてフォントを確認すると、ボックスは「Segoe UI Symbol」フォントになります。私が開いたときにこのような何かを探して、私もJSON経由辞書をインポートReportlab - Unicode文字がUnicode対応のフォントでボックスとして表示される

import reportlab.rl_config 
reportlab.rl_config.warnOnMissingFontGlyphs = 0 
from reportlab.pdfbase import pdfmetrics 
from reportlab.pdfbase.ttfonts import TTFont 
pdfmetrics.registerFont(TTFont('Arial', 'Arial.ttf')) 

:(働いているようだ)Unicode文字の広い範囲をサポートしているフォントとしてArialの中にインポートするための

メモ帳でJSONファイル:

{"example1":"b\u0101s"} 

プログラムは、この辞書を読み込みと書き込み:

from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer 
from reportlab.lib.styles import getSampleStyleSheet 
doc = SimpleDocTemplate("hello.pdf") 
Story = [Spacer(1,2*inch)] 
style = styles["Normal"] 
with open('CompDict.json','r') as f: 
     m_dic=json.load(f) 
for key,value in m_dic: 
    p=Paragraph(key+":"+value,style) 
    Story.append(p) 
doc.build(Story) 

結果は、このリンクの下に自分のキャラクターを探すexample1:bāsでPDFなるが、代わりにexample1:b■s

+0

JSONスニペットが有効なJSON(二重引用符を必要とする)ではありません。しかし、それはおそらくあなたの問題に関連していないでしょう。 – lenz

+0

Python 2.xまたは3? –

+0

私はPython 3.6を使用しています – tiramisu

答えて

0

として出てくるはずです。

UTF-8 encoding table and Unicode characters

  1. ゴー(リテラルUTF-中)テーブルの行へ。

  2. \xc3\x85のような文字が表示されます。あなたのキャラクターは、あなたのコードタイプで、...のようなものテキスト出力のためのその後

  3. を選択してください:

    Canvas.drawString(x,y,'\xc3\x85') =>を、それはあなたが変更する必要がÅ ...

を印刷しますUTF-8リテラルにあなたの辞書のアイテム、それはそうする多くの方法があります"b\u0101s" Unicodeを、...理解しないので

よろしく

0
#Here I am writing chunks of code, hope you will understand 

from reportlab.platypus import Paragraph, SimpleDocTemplate, Spacer 
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle 
from reportlab.lib.enums import TA_CENTER,TA_JUSTIFY  
from reportlab.pdfbase import pdfmetrics  
from reportlab.pdfbase.ttfonts import TTFont 
from reportlab.lib.fonts import addMapping 

pdfmetrics.registerFont(TTFont('devaNagri', 'NotoSerifDevanagari.ttf')) # devaNagri is a folder located in **/usr/share/fonts/truetype** and 'NotoSerifDevanagari.ttf' file you just download it from https://www.google.com/get/noto/#sans-deva and move to devaNagri folder. 

addMapping('devaNagri', 0, 0, 'NotoSerifDevanagari') #devnagri is a folder name and NotoSerifDevanagari is file name 

style = getSampleStyleSheet() 
style.add(ParagraphStyle(name="ParagraphTitle", alignment=TA_JUSTIFY, fontName="devaNagri")) # after mapping fontName define your folder name. 
paragraph = Paragraph('your unicode string', style["ParagraphTitle"]) 
関連する問題