PyMuPDFでPDFに文字や線を書き込む

2022/02/04 categories:Python| tags:Python|PyMuPDF|PDF|

PyMuPDFを使ってPDFを作成してみました。

使ってみた関数

文字や円、四角、線などをPDFに描画する下記の関数を使ってみました。

点はfitz.Point(x, y)で指定して、色は(1.0, 0.0, 0.0)というように0.0~1.0のfloatの値3つでRGBを指定するようです。

PyMuPDFでPDFに日本語テキストを追加

page.insert_text()で日本語テキストを追加した場合、「…..」というように正しく表示されませんでした。正しく表示するためには、fontname=‘japan’という引数を指定すると良いようです。

実行結果

PuMuPDFで作成したドキュメントのページをpixmapに変換して、QtWidgets.QGraphicsView()に表示した結果は以下の通りです。

Pythonコード

import fitz
import sys
from PyQt5 import QtWidgets, QtCore, QtGui

app = QtWidgets.QApplication(sys.argv)
view = QtWidgets.QGraphicsView()
view.setScene( QtWidgets.QGraphicsScene() )

doc = fitz.open()
page = doc.newPage()
page.insert_text(fitz.Point(50, 50), "Hello PyMuPDF", fontsize=50)
page.draw_circle(fitz.Point(200, 200), radius=100, color=(1.0, 0.0, 0.0), width=10)
page.draw_rect(fitz.Rect(fitz.Point(300, 300), fitz.Point(400, 400)), color=(0.0, 1.0, 0.0), width=5)
page.draw_line(fitz.Point(50, 400), fitz.Point(400, 500), color=(0.0, 0.0, 1.0), width=15)
page.draw_curve(fitz.Point(50, 600), fitz.Point(200, 400), fitz.Point(400, 600), color=(1.0, 0.0, 1.0), width=20)
page.insert_text(fitz.Point(50, 700), "はろー世界", fontsize=50)
page.insert_text(fitz.Point(50, 800), "はろー世界", fontsize=50, fontname='japan')

pix = page.get_pixmap()
byte_array = QtCore.QByteArray( pix.tobytes() )
qpixmap = QtGui.QPixmap()
qpixmap.loadFromData(byte_array)
view.scene().addPixmap(qpixmap)
view.scene().setSceneRect(0, 0, pix.width, pix.height)
view.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(200,200,200)))
view.setWindowTitle('PyMuPDF Test')

view.show()
app.exec()

Share post

Related Posts

コメント