注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

郁夫的博客

我爱你们,只是你们不知道!

 
 
 

日志

 
 
 
 

reportlab 生成含有中文和日文的PDF - 转  

2011-02-22 16:09:14|  分类: Django |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
PythonのPDF生成ライブラリスイート「reportlab」CommentsAdd Star

python, reportlab, pdf

reportlab を使って日本語を含む PDF を作る試み。ドキュメントがほとんどないので予想以上に苦労してしまったが、一応日本語なんかが使えるようだ。初めに JavaiText とか作って作ろうかと一瞬思ったが、やめといてよかった~。

でも、作者がきちんとエンコーディングのセマンティクスを理解していないので無用な変換が必要。もうちょっとコードを読み進めたらパッチをつくってみよう。本来であれば CMap をパースした結果から CID ベースのコーデックを作って、TextObject が作られたらフォント名から自動的に変換をかけるべきなんだけど。

フォント名がHeiseiKakuGoとか決め打ちのものしか指定できないのと、なぜか簡体字中国語フォントが一覧に入ってないのも気になる。使えるフォントの一覧は以下。

* STSong-Light (繁体字中国語)

* MSung-Light (繁体字中国語)

* HeiseiMin-W3 (日本語)

* HeiseiKakuGo-W5 (日本語)

* HYSMyeongJo-Medium (韓国語)

* HYGothic-Medium (韓国語)

追記: ここにあるように、CIDFont クラスではなく UnicodeCIDFont クラスを使ったところ変換なしでいけましたる場合もありました。

f:id:moriyoshi:20080205193243p:image

# vim: encoding=UTF-8  import os  import codecs  from reportlab.pdfbase import pdfmetrics, cidfonts  from reportlab.pdfgen import canvas  from reportlab.lib.units import cm    pdfmetrics.registerFont(cidfonts.CIDFont('HeiseiKakuGo-W5', '90ms-RKSJ-H'))  pdfmetrics.registerFont(cidfonts.CIDFont('MSung-Light', 'UniCNS-UCS2-H'))    c = canvas.Canvas('hello.pdf')  c.setFont('HeiseiKakuGo-W5-90ms-RKSJ-H', 20);  c.drawString(4*cm, 26*cm, codecs.getencoder('cp932')(u'俺は日本人, and you?'))0]]  c.setFont('MSung-Light-UniCNS-UCS2-H', 20);  c.drawString(4*cm, 22*cm, codecs.getencoder('utf_16')(u'我是日本人、〓〓?')[0])  c.showPage()  c.save()  
  评论这张
 
阅读(1022)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017