PyMuPDFでPDFに文字や線を書き込む
2022/02/04 categories:Python| tags:Python|PyMuPDF|PDF|
PyMuPDFを使ってPDFを作成してみました。
使ってみた関数
文字や円、四角、線などをPDFに描画する下記の関数を使ってみました。
- insert_text
- draw_circle
- draw_rect
- draw_line
- draw_curve
点は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()