python で日本語の pdf を作成する
reportlab というのを使うのが良いらしい。
ただ、一つだけよくわからなくて少し探したので、書いておく。
基本的に英語前提なので、改行や空白が入っていないと、改行をしてくれない。
なので、スタイルには、wordWrap = 'CJK' を指定しないといけません。
以下、ベースになる様にサンプル。
環境は、Linux Mint Debian の、64bit。takaoGothic はあとから入れています。
#!/usr/bin/python # -*- coding: utf-8 -*- import os,sys from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfbase import pdfmetrics from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.rl_config import defaultPageSize #from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY from reportlab.lib.pagesizes import A4 # フォント読み込み pdfmetrics.registerFont(TTFont('Gothic','TakaoPGothic.ttf')) # スタイル設定 def setStyleParam2J( style ): style.fontName = 'Gothic' style.wordWrap ='CJK' styles = getSampleStyleSheet() for name in ('Normal', 'BodyText', 'Title', 'Heading1', 'Heading2', 'Heading3', 'Heading4', 'Heading5', 'Heading6', 'Bullet', 'Definition', 'Code', ): setStyleParam2J(styles[name]) # 本文の作成 Story = [] Story.append(Paragraph("タイトルです", styles['Title'])) Story.append(Paragraph("Heading 1", styles['Heading1'])) Story.append(Paragraph("Heading 2", styles['Heading2'])) Story.append(Paragraph("Heading 3", styles['Heading3'])) Story.append(Paragraph("Heading 4", styles['Heading4'])) Story.append(Paragraph("Heading 5", styles['Heading5'])) Story.append(Paragraph("Heading 6", styles['Heading6'])) Story.append(Paragraph("Bullet", styles['Bullet'])) txt = ("長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。\n" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。" "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。") Story.append(Paragraph("Normal"+txt, styles['Normal'])) Story.append(Paragraph("Definition"+txt, styles['Definition'])) Story.append(Paragraph("Code:"+txt, styles['Code'])) Story.append(Paragraph("Body:"+txt,styles['BodyText'])) # 出力 doc = SimpleDocTemplate('doc.pdf', pagesize=A4 ) doc.build(Story)
このあたりなどを参考に。
http://mogawa.blogspot.jp/2008_04_01_archive.html
http://www.blog.pythonlibrary.org/2010/03/08/a-simple-step-by-step-reportlab-tutorial/