Python」カテゴリーアーカイブ

プログラミング言語「Python」に関するカテゴリーです。

PythonでPDFを作成したい場合はReportLabが便利

PythonでPDFを作成したい場合はReportLabを使うのが便利です。

使い方は次のような感じです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
c = canvas.Canvas('reportlab-sample.pdf', pagesize=A4)

# 直線
from reportlab.lib.units import cm
p = c.beginPath()
p.moveTo(2*cm, 2*cm)
p.lineTo(5*cm, 2*cm)
c.drawPath(p)

# 四角形
c.rect(4*cm, 4*cm, 1*cm, 1*cm)

# テキスト
from reportlab.pdfbase.pdfmetrics import registerFont
from reportlab.pdfbase.ttfonts import TTFont
registerFont(TTFont('M+ 1p:style=light', 'mplus-1p-light.ttf'))
c.setFont('M+ 1p:style=light', 24)
c.drawString(2*cm, 8*cm, u'こんにちは世界!')

c.stringWidth(u'こんにちは世界!')

c.save()

出力されるPDFファイルのサンプルはこちらです。

ReportLabは純粋なPythonで書かれたオープンソースのライブラリになっていますので、Webサービスに組み込んで使うことも簡単です。

リンク

ReportLab Toolkit – ReportLab.com
https://www.reportlab.com/software/opensource/rl-toolkit/

M+ FONTS
https://mplusfonts.github.io/

gettextを使った多言語対応

gettextを使うとPythonのスクリプトを多言語対応することができます。

gettextを使った多言語対応のサンプル

gettext-sample.py

#!/usr/bin/env python
# coding: utf-8

import gettext

_ = gettext.translation( \
      domain='message',
      localedir='locale',
      languages=['ja'],
      fallback=True).ugettext

print(_(u'hello, world!'))

message.po

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2013-03-22 00:57+JST\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"


#: gettext-sample.py:12
msgid "hello, world!"
msgstr "こんにちは世界!"

ファイルの配置

.
|-- gettext-sample.py
|-- locale
    `-- ja
        `-- LC_MESSAGES
            `-- message.mo

3 directories, 2 files

スクリプトの実行結果

$ python gettext-sample.py
こんにちは世界

PythonでQRコードのスキャン方法

PythonでQRコードの読み取り方

使用するライブラリ

ZBar
http://zbar.sourceforge.net/

Pillow (Python Imaging Library)
http://python-pillow.github.io/

使い方

QRコードの画像qrcode.pngを読み込む

>>> from PIL import Image
>>> pil = Image.open('qrcode.png').convert('L')
>>> width, height = pil.size
>>> data = pil.tobytes()

tostring()は廃止されたので、代わりにtobytes()を使います。

ZBarを使ってQRコードをスキャン

>>> import zbar
>>> scanner = zbar.ImageScanner()
>>> scanner.parse_config('enable')
>>> image = zbar.Image(width, height, 'Y800', data)
>>> scanner.scan(image)

スキャンした内容

>>> for symbol in image:
>>>   print symbol.type, ':', symbol.data