Shape(シェイプ)#

This class is for PDF only.

このクラスは、PDFページ上で相互に接続されたグラフィカル要素を作成できるようにします。このクラスのメソッドは、対応する Page (ページ) クラスのメソッドと同じ意味と名前を持っています。

実際には、各 Page (ページ) クラスの描画メソッドは、(1)シェイプの描画メソッド、(2) Shape.finish() メソッド、(3) Shape.commit() メソッドの3つの要素の便利なラッパーです。ページテキストの挿入に関しては、Shape.commit() メソッドのみが呼び出されます。ページで多くの描画およびテキスト操作を実行する場合、常にShapeオブジェクトの使用を検討することをお勧めします。

このクラスのいくつかの描画メソッドは、連続して実行でき、それぞれが1つの描画に貢献します。描画が完了したら、Shape.finish() メソッドを呼び出して色、破線、幅、変形などの属性を適用する必要があります。

このクラスの 描画 メソッド(および Shape.insert_textbox() )は、カバーしている領域を矩形 (Shape.rect)で記録します。このプロパティは、Page.cropbox_position を設定するために使用できます。

テキストの挿入 操作である Shape.insert_text() および Shape.insert_textbox() は、暗黙的に「finish」を実行し、効果を発揮するために Shape.commit() のみが必要です。その結果、両方のメソッドには色などのプロパティを制御するためのパラメータが含まれています。

メソッド / 属性

説明

Shape.commit()

ページの内容を更新します

Shape.draw_bezier()

キュービックベジエ曲線を描画します

Shape.draw_circle()

指定した点を中心に円を描画します

Shape.draw_curve()

ヘルパーポイントを使用してキュービックベジエ曲線を描画します

Shape.draw_line()

直線を描画します

Shape.draw_oval()

楕円を描画します

Shape.draw_polyline()

一連の点を接続します

Shape.draw_quad()

四角形を描画します

Shape.draw_rect()

長方形を描画します

Shape.draw_sector()

円形セクターまたはパイの一部を描画します

Shape.draw_squiggle()

波線を描画します

Shape.draw_zigzag()

ジグザグ線を描画します

Shape.finish()

描画コマンドのセットを完了します

Shape.insert_text()

テキスト行を挿入します

Shape.insert_textbox()

テキストを長方形に合わせて挿入します

Shape.doc

ページのドキュメントを格納します

Shape.draw_cont

Shape.finish() 以降の描画コマンドを格納します

Shape.height

ページの高さを格納します

Shape.lastPoint

現在のポイントを格納します

Shape.page

所有するページを格納します

Shape.rect

描画を囲む長方形を格納します

Shape.text_cont

累積テキスト挿入を格納します

Shape.totalcont

contents に格納する累積文字列を格納します

Shape.width

ページの幅を格納します

クラスAPI

class Shape#
__init__(self, page)#

新しい描画を作成します。PyMuPDFをインポートする際、pymupdf.Page オブジェクトには Shape オブジェクトを構築するための便利なメソッド new_shape() が提供されます。インスタンス化中に、PDFページが存在するかどうかのチェックが行われます。それ以外の場合は例外が発生します。

パラメータ:

page (Page (ページ)) -- PDFドキュメントの既存のページ。

draw_line(p1, p2)#

point_like オブジェクト p1 から p2 への直線を描画します。

パラメータ:
  • p1 (point_like) -- 開始点

  • p2 (point_like) -- 終了点

戻り値の型:

Point (ポイント)

戻り値:

終了点 p2

draw_squiggle(p1, p2, breadth=2)#

point_like オブジェクト p1 から p2 への波線(うねり、曲線)を描画します。常に整数回の完全な波の周期が描画され、1つの周期の長さは4 * breadthです。必要に応じて幅パラメータが調整され、この条件を満たします。描かれる線は常に p1 を離れる際に「左」に曲がり、p2 には常に「右」から接続します。

パラメータ:
  • p1 (point_like) -- 開始点

  • p2 (point_like) -- 終了点

  • breadth (float) -- 各波の振幅。条件 2 * breadth < abs(p2 - p1) が少なくとも1つの波に収まる必要があります。次の図は、1つの完全な周期で接続された2つの点を示しています。

戻り値の型:

Point (ポイント)

戻り値:

終了点 p2

_images/img-breadth.png

以下は、閉じた塗りつぶされた三角形を形成する三つの連結した線の例です。小さな矢印はストロークの方向を示しています。

>>> import pymupdf
>>> doc=pymupdf.open()
>>> page=doc.new_page()
>>> r = pymupdf.Rect(100, 100, 300, 200)
>>> shape=page.new_shape()
>>> shape.draw_squiggle(r.tl, r.tr)
>>> shape.draw_squiggle(r.tr, r.br)
>>> shape.draw_squiggle(r.br, r.tl)
>>> shape.finish(color=(0, 0, 1), fill=(1, 1, 0))
>>> shape.commit()
>>> doc.save("x.pdf")
_images/img-squiggly.png

注釈

描かれる波は三角関数(正弦/余弦)**ではありません**。それが必要な場合は draw.py を参照してください。

draw_zigzag(p1, p2, breadth=2)#

point_like オブジェクト p1 から p2 へジグザグのラインを描画します。それ以外は Shape.draw_squiggle() とまったく同じです。

パラメータ:
  • p1 (point_like) -- 開始点

  • p2 (point_like) -- 終了点

  • breadth (float) -- 動きの振幅。1つの周期に収まるように振幅を調整します。条件は 2 * breadth < abs(p2 - p1) である必要があります。

戻り値の型:

Point (ポイント)

戻り値:

終了点 p2

draw_polyline(points)#

シーケンス points に含まれるポイント間にいくつかの接続されたラインを描画します。これを使用して、最後のアイテムを最初のアイテムと等しく設定することで、任意の多角形を作成できます。

パラメータ:

points (sequence) -- point_like オブジェクトのシーケンス。その長さは少なくとも2である必要があります(この場合、draw_line() と同等です)。

戻り値の型:

Point (ポイント)

戻り値:

引数シーケンスの最後のポイント、points[-1]

draw_bezier(p1, p2, p3, p4)#

p1 から p4 への標準的な立方ベジエ曲線を p2*と *p3 を制御ポイントとして描画します。

すべての引数は point_like です。

戻り値の型:

Point (ポイント)

戻り値:

終了点 p4

注釈

ポイントは異なる必要はありません。一部のポイントが等しい場合も試してみてください!

例:

_images/img-drawBezier.png
draw_oval(tetra)#

指定された四角形(四辺形)内に「楕円」を描画します。正方形の場合、正円が描かれ、一般的な長方形は楕円になります。四角形が使用される場合、さまざまな形状が結果として得られる可能性があります。

描画は、反時計回りの動きで、左下隅 -> 左上隅の中間点で開始し、終了します。

パラメータ:

tetra (rect_like,quad_like) --

rect_like または quad_like

バージョン1.14.5で変更: 四角形もサポートされるようになりました。

戻り値の型:

Point (ポイント)

戻り値:

rect.bl -> rect.tl 、または quad.ll -> quad.ul の線の中間点。いくつかの例はこちら、またはPyMuPDF-Utilitiesリポジトリの quad-show?.py スクリプトをご覧ください。

_images/img-drawquad.jpg
draw_circle(center, radius)#

指定された中心と半径で円を描きます。描画は、反時計回り の動きで、ポイント center - (radius, 0) で始まり、終了します。このポイントは、包括的な正方形の左側の中央です。

これは draw_sector(center, start, 360, fullSector=False) のショートカットです。時計回り に同じ円を描画するには、度数として -360 を使用してください。

パラメータ:
  • center (point_like) -- 円の中心。

  • radius (float) -- 円の半径。正である必要があります。

戻り値の型:

Point (ポイント)

戻り値:

Point(center.x - radius, center.y).

_images/img-drawcircle.jpg

draw_curve(p1, p2, p3)#

draw_bezier() の特殊なケース: p1 から p3 までの三次ベジエ曲線を描きます。各ライン p1 -> p2 および p3 -> p2 に制御点が生成されます。したがって、両方の制御点はライン p1 -> p3 の同じ側にあります。これにより、曲線の曲率が符号を変更しないことが保証されます。p2 へのラインが90度で交差する場合、結果の曲線は四分の楕円(同じ長さの場合は四半期の円)です。

すべての引数は point_like です。

戻り値の型:

Point (ポイント)

戻り値:

終点、p3。以下は塗りつぶされた四分の楕円セグメントです。黄色の領域は 時計回り に向いています:

_images/img-drawCurve.png

draw_sector(center, point, angle, fullSector=True)#

円のセクタを描き、必要に応じて円の中心に弧を接続します(パイの一片のように)。

パラメータ:
  • center (point_like) -- 円の中心。

  • point (point_like) -- パイの弧セグメントの2つの端点のうちの1つ。角度 から他の端点が計算されます。

  • angle (float) -- その符号に応じて、弧は反時計回り(正の値)または時計回りに描かれます。

  • fullSector (bool) -- 弧の端点から円の中心に接続線を描くかどうか。塗りつぶし色が指定されている場合、完全な「パイ」が色付けされ、それ以外の場合はセクタのみが色付けされます。

戻り値の型:

Point (ポイント)

戻り値:

弧のもう一方の端点。論理的に接続されたパイチャートを作成するための次の呼び出しの開始点として使用できます。以下は例です:

_images/img-drawSector1.png_images/img-drawSector2.png

draw_rect(rect, *, radius=None)#
  • 変更された v1.22.0 で:パラメーター radius が追加されました。

長方形を描画します。描画は、上部左隅から反時計回りの動きで始まり、終了します。

パラメータ:
  • rect (rect_like) -- ページ上の長方形の配置先。

  • radius (multiple) -- 角の丸みを付けた長方形を描画します。None でない場合、曲線の半径を長方形の辺の長さのパーセンテージとして指定します。これは 1 つまたは 2 つの浮動小数点数、0 < radius <= 0.5 でなければなりません。0.5 は、対応する辺の 50% に相当します。浮動小数点数の場合、曲線の半径は radius * min(width, height) として計算され、角の周囲を 1/4 円で描画します。タプル (rx, ry) が指定された場合、曲線は水平および垂直方向に対して非対称です。radius=(0.5, 0.5) は楕円を描画します。

戻り値の型:

Point (ポイント)

戻り値:

長方形の上部左隅。

draw_quad(quad)#

四角形を描画します。描画は、上部左隅 (Quad.ul) から反時計回りの動きで始まり、終了します。これは Shape.draw_polyline() の引数 (ul, ll, lr, ur, ul) を使用したショートカットです。

パラメータ:

quad (quad_like) -- ページ上の四角形の配置先。

戻り値の型:

Point (ポイント)

戻り値:

Quad.ul.

finish(width=1, color=(0,), fill=None, lineCap=0, lineJoin=0, dashes=None, closePath=True, even_odd=False, morph=(fixpoint, matrix), stroke_opacity=1, fill_opacity=1, oc=0)#

次の draw*() メソッドの一連の描画を、共通パラメータ をそれらすべてに適用して終了します。

Shape.insert_text() および Shape.insert_textbox() には 影響を与えません

このメソッドは、Point (ポイント) fixpointMatrix (マトリックス) matrix を使用して、テキストまたは 複合描画を変形させること もサポートしています。

パラメータ:
  • morph (sequence) -- テキストまたは複合描画を、任意の Point (ポイント) fixpointMatrix (マトリックス) matrix を適用して変形します。これにより、fixpoint はこの操作の 固定ポイント であることを意味します。その位置は変わりません。デフォルトは変形なし(None)です。ただし、matrixの最初の4つの成分には任意の値を含めることができ、matrix.e == matrix.f == 0 である必要があります。これは、スケーリング、シアリング、回転、反転など、移動以外の組み合わせが可能であることを意味しますが、移動はできません。

  • stroke_opacity (float) -- (v1.18.1で新規追加) ストロークの透明度を設定します。値が0未満または1を超える場合は無視されます。デフォルトは1(不透明)です。

  • fill_opacity (float) -- (v1.18.1で新規追加) 塗りつぶしの色の透明度を設定します。デフォルトは1(不透明)です。

  • even_odd (bool) -- 塗りつぶし操作に対して 「even-oddルール」 を要求します。デフォルトは False で、したがって 「非ゼロのワインディング数ルール」 が使用されます。これらのルールは、領域が重なる場所で塗りつぶし色を適用するための代替メソッドです。複雑な形状では、これらのルールに異なる振る舞いが期待されることはほとんどありません。詳細な説明については、Adobe PDFリファレンス の137ページ以降を参照してください。以下はその違いを示す例です。

  • oc (int) -- (v1.18.4で新規追加) この描画を条件付きで表示可能にする OCG または OCMDxref 番号。

_images/img-even-odd.png

注釈

各ピクセルの場合、以下のことが起こります:

  1. ルール 「even-odd」 は、ピクセルを含むエリアの数をカウントします。このカウントが 奇数 の場合、ピクセルは形状の 内部 と見なされ、偶数の場合は 外部 と見なされます。

  2. デフォルトのルール 「nonzero winding」 では、ピクセルを含む各エリアの 「方向」 も考慮されます。エリアが反時計回りに描かれている場合は 1を追加し 、時計回りのエリアは 1を引きます 。結果がゼロの場合、ピクセルは 外部 と見なされ、非ゼロのカウントを持つピクセルは形状の 内部 と見なされます。

上記の画像の4つの形状のうち、上の2つはそれぞれ標準的な方法で描かれた3つの円を示しています(反時計回り、矢印を参照)。下の2つの形状には時計回りに描かれた1つ(左上)の円が含まれています。右の列では、エリアの方向は無視されることがわかります(even-oddルール)。

insert_text(point, text, fontsize=11, fontname='helv', fontfile=None, set_simple=False, encoding=TEXT_ENCODING_LATIN, color=None, lineheight=None, fill=None, render_mode=0, border_width=1, rotate=0, morph=None, stroke_opacity=1, fill_opacity=1, oc=0)#

テキスト行を point で開始します。

パラメータ:
  • point (point_like) --

    テキストの最初の文字の下部左位置(ピクセル単位)。rotate パラメータとの連携方法を理解することが重要です。以下の画像をご覧ください。小さな赤い点は、各ケースでの point の位置を示しています。

    _images/img-inserttext.jpg

  • text (str/sequence) -- 挿入するテキスト。文字列型または文字列のシーケンス型として指定できます。シーケンスの場合、または改行文字 n を含む文字列の場合、複数の行が挿入されます。ただし、行があまりにも幅が広い場合、挿入される行数はページ上の「垂直」スペース(回転 パラメータによって確立される読み取り方向の意味で)によって制限されます。テキスト の残り部分は破棄されますが、戻りコードには挿入された行数が含まれます。

  • lineheight (float) -- フォントのプロパティから計算された行の高さをオーバーライドするためのファクター。None でない場合、fontsize * lineheight の行の高さが使用されます。

  • stroke_opacity (float) -- (v1.18.1で新規追加) ストロークの透明度を設定します。値が0未満または1を超える場合は無視されます。デフォルトは1(不透明)です。

  • fill_opacity (float) -- (v1.18.1で新たに追加) 塗りつぶしカラーの透明度を設定します。デフォルトは1(不透明)です。テキストカラーの透明度を制御するためにこの値を使用します。ストロークの透明度は文字の境界線に のみ 影響します。

  • rotate (int) -- テキストを回転させるかどうかを決定します。許容される値は90度の倍数です。デフォルトは0(回転なし)で、左から右への水平テキストが表示されます。180は、右から左 への上下逆さテキストを意味し、90は反時計回りの回転で、テキストが 上向き に表示されます。270(または-90)は時計回りの回転で、テキストが 下向き に表示されます。いずれの場合も、pointは最初の文字の矩形の左下の座標を指定します。存在する場合、複数行は常にこのパラメータによって確立された読み取り方向に従います。したがって、 rotate = 180 の場合、行2は行1の 上に 配置されます。

  • oc (int) -- (v1.18.4 新機能) OCG または OCMDxref 番号、テキストを条件付きで表示可能にするためのものです。

戻り値の型:

int

戻り値:

挿入された行数。

他のパラメータの説明については 共通パラメータ を参照してください。

insert_textbox(rect, buffer, fontsize=11, fontname='helv', fontfile=None, set_simple=False, encoding=TEXT_ENCODING_LATIN, color=None, fill=None, render_mode=0, border_width=1, expandtabs=8, align=TEXT_ALIGN_LEFT, rotate=0, lineheight=None, morph=None, stroke_opacity=1, fill_opacity=1, oc=0)#

PDFのみ:指定された矩形にテキストを挿入します。テキストは行と単語に分割され、回転 に応じて異なる矩形の角から始まり、利用可能なスペースに挿入されます。行送りと複数のスペースは尊重されます。

パラメータ:
  • rect (rect_like) -- 使用する領域。有限でかつ空でなければなりません。

  • buffer (str/sequence) -- 挿入するテキスト。文字列または文字列のシーケンスとして指定する必要があります。シーケンスエントリ内の行送りも尊重されます。

  • align (int) -- 各テキスト行を整列させます。デフォルトは0(左揃え)。センタリング、右揃え、ジャスティファイドがサポートされている他のオプションです。詳細は テキストの配置 を参照してください。なお、パラメータ値 TEXT_ALIGN_JUSTIFY の効果は、「シンプル」(単一バイト)フォント(PDFベース14フォント を含む)でのみ達成できます。

  • lineheight (float) -- フォントのプロパティから計算された行の高さをオーバーライドするためのファクター。None でない場合、fontsize * lineheight の行の高さが使用されます。

  • stroke_opacity (float) -- (v1.18.1で新たに追加) ストロークカラーの透明度を設定します。負の値や1より大きい値は無視されます。デフォルトは1(不透明)です。

  • fill_opacity (float) -- (v1.18.1で新たに追加) 塗りつぶしカラーの透明度を設定します。デフォルトは1(不透明)です。テキストカラーの透明度を制御するためにこの値を使用します。ストロークの透明度は文字の境界線に のみ 影響します。

  • rotate (int) -- テキストを矩形内で回転させるように要求します。受け入れ可能な値は90度の倍数です。デフォルトは0(回転なし)、つまり左から右への水平なテキスト行です。180は、右から左に逆さまに表示されることを意味します。90は反時計回りの回転で、テキストは上に向かって表示されます。270(または-90)は時計回りの回転で、テキストは下に向かって表示されます。いずれの場合も、pointは最初の文字の矩形の左下の座標を指定します。複数行がある場合は、常にこのパラメータで確立された読み取り方向に従います。したがって、rotate = 180の場合、行2は行1の上に配置されますなど。

  • oc (int) -- (v1.18.4 新機能) OCG または OCMDxref 番号、テキストを条件付きで表示可能にするためのものです。

戻り値の型:

float

戻り値:

正またはゼロの場合 :正常な実行。返される値は使用されていない矩形行のスペース(ピクセル単位)です。これを安全に無視するか、矩形を最適化したり、後続のアイテムの位置を調整したりするために使用できます。

負の場合: 実行なし。返される値はテキスト行を格納するためのスペース不足です。矩形を拡大したり、フォントサイズを減少させたり、テキストの量を減少させたりする必要があります。

_images/img-rotate.png _images/img-rot%2Bmorph.png

他のパラメータの説明については 共通パラメータ を参照してください。

commit(overlay=True)#

ページの contents を蓄積された描画に更新し、その後テキスト挿入が続きます。テキストが描画と重なる場合、テキストは描画の上に書き込まれます。

警告

このメソッドを実行しないことは忘れないでください:

シェイプが 確定されていない 場合、無視され、ページは変更されません!

このメソッドは、属性 Shape.rectlastPointdraw_conttext_cont 、および totalcont をリセットします。その後、シェイプオブジェクトは 同じページ で再利用できます。

パラメータ:

overlay (bool) -- コンテンツを前面(デフォルト)または背面に配置するかどうかを決定します。ページに既存の非空の contents オブジェクトがある場合のみ関連します。

属性

doc#

参照専用:ページの文書。

Type:

Document (ドキュメント)

page#

参照専用:所属するページ。

Type:

Page (ページ)

height#

ページの高さのコピー

Type:

float

width#

ページの幅のコピー。

Type:

float

draw_cont#

最後のfinish以降の 描画メソッド の蓄積コマンドバッファ。各finishメソッドはそのコマンドを Shape.totalcont に追加します。

Type:

str

text_cont#

蓄積されたテキストバッファ。すべての テキスト挿入 はここに行われます。このバッファは totalcont Shape.commit() に追加されるため、テキストは同じShape内の描画に覆われることはありません。

Type:

str

rect#

描画を囲む矩形。この属性はあなたの自由に使用でき、いつでも変更できます。シェイプが作成または確定されたとき、その値は None に設定されます。すべての draw* メソッド、および Shape.insert_textbox() はこのプロパティを更新します(必要に応じて矩形を 拡大します )。ただし、変形 操作(Shape.finish()Shape.insert_textbox() )は無視されます。

この属性の典型的な使用法は、後でまたは外部で使用するためにシェイプを作成する場合、Page.cropbox_position をこの値に設定することです。自分で属性を操作していない場合、これはこれまでのすべての描画を含む矩形を反映するはずです。

変形を使用し、変形されたオブジェクトを含む矩形が必要な場合、次のコードを使用します:

>>> # assuming ...
>>> morph = (point, matrix)
>>> # ... recalculate the shape rectangle like so:
>>> shape.rect = (shape.rect - pymupdf.Rect(point, point)) * ~matrix + pymupdf.Rect(point, point)
Type:

Rect (矩形)

totalcont#

描画およびテキスト挿入のための累積コマンドバッファです。これは Shape.commit() で使用されます。

Type:

str

lastPoint#

参照用: 描画パスの現在のポイントです。Shape の作成時、および各 finish() および commit() の後には None です。

Type:

Point (ポイント)

使用法#

drawingオブジェクトは shape = page.new_shape() によって構築されます。その後、必要なだけ多くのdraw、finish、およびテキスト挿入メソッドが続きます。描画をコミットする前に、各描画シーケンスを終了する必要があります。全体のコーディングパターンは次のようになります:

>>> shape = page.new_shape()
>>> shape.draw1(...)
>>> shape.draw2(...)
>>> ...
>>> shape.finish(width=..., color=..., fill=..., morph=...)
>>> shape.draw3(...)
>>> shape.draw4(...)
>>> ...
>>> shape.finish(width=..., color=..., fill=..., morph=...)
>>> ...
>>> shape.insert_text*
>>> ...
>>> shape.commit()
>>> ....

注釈

  1. finish() メソッドは、前の描画を1つの論理的なシェイプに結合し、共通の色、線の幅、変形などを設定します。closePath が指定されている場合、最後の描画のエンドポイントを最初の描画のスタートポイントと接続します。

  2. 複合グラフィックを正常に作成するには、各 draw メソッドが前の描画のエンドポイントを次の描画のスタートポイントとして使用してください。上記の疑似コードでは、draw2draw1 の戻り値である Point (ポイント) を次の描画のスタートポイントとして使用すべきです。そうしないと、自動的に新しいパスが開始され、finish() が期待どおりに動作しないかもしれません(ただし、エラーは発生しません)。

  3. テキストの挿入は、コミット(commit)の前にどこでも発生できます Shape.draw_cont または Shape.lastPoint に触れません)。テキストは直接 Shape.totalcont に追加されますが、描画は Shape.finish によって追加されます。

  4. コミット は、すべてのテキスト挿入とシェイプをページの前面または背面に配置し、グラフィックのレイヤーを制御する方法を提供します。

  5. コミット のみ がページのコンテンツを 更新します。他のメソッドは基本的に文字列の操作です。

#

  1. 異なる色のピースを使用して円形のパイを作成します:

    shape = page.new_shape()  # start a new shape
    cols = (...)  # a sequence of RGB color triples
    pieces = len(cols)  # number of pieces to draw
    beta = 360. / pieces  # angle of each piece of pie
    center = pymupdf.Point(...)  # center of the pie
    p0 = pymupdf.Point(...)  # starting point
    for i in range(pieces):
        p0 = shape.draw_sector(center, p0, beta,
                              fullSector=True) # draw piece
        # now fill it but do not connect ends of the arc
        shape.finish(fill=cols[i], closePath=False)
    shape.commit()  # update the page
    

以下は5つの色の例です。

_images/img-cake.png
  1. 正則なn角形を作成します(塗りつぶしは黄色、赤い境界線)。周囲の点を計算するために draw_sector() を使用し、多角形を描く前に描画コマンドバッファを空にします:

    shape = page.new_shape() # start a new shape
    beta = -360.0 / n  # our angle, drawn clockwise
    center = pymupdf.Point(...)  # center of circle
    p0 = pymupdf.Point(...)  # start here (1st edge)
    points = [p0]  # store polygon edges
    for i in range(n):  # calculate the edges
        p0 = shape.draw_sector(center, p0, beta)
        points.append(p0)
    shape.draw_cont = ""  # do not draw the circle sectors
    shape.draw_polyline(points)  # draw the polygon
    shape.finish(color=(1,0,0), fill=(1,1,0), closePath=False)
    shape.commit()
    

n = 7の場合の多角形は次のとおりです:

_images/img-7edges.png

共通パラメータ#

fontname (str)

一般的に、3つのオプションがあります:

  1. 標準の PDFベース14フォント のいずれかを使用します。この場合、fontfile を指定 してはいけず、このパラメータを省略した場合は 「Helvetica」 が使用されます。

  2. 既にページで使用されているフォントを選択します。その場合、スラッシュ「/」で前置された 参照 名を指定します。以下の例を参照してください。

  3. システムに存在するフォントファイルを指定します。この場合、任意の新しい名前をこのパラメータに選択します(「/」接頭辞なし)。

挿入されるテキストがページのフォントの1つを再利用する場合は、Page.get_fonts() に表示される参照名を次のように使用します:

フォントリストに項目 [1024, 0, 'Type1', 'NimbusMonL-Bold', 'R366'] がある場合、フォント NimbusMonL-Bold を使用するには、fontname = "/R366"、fontfile = None と指定します。


fontfile (str)

コンピューターに存在するフォントのファイルパス。fontfile を指定する場合、上記のリストに 存在しない フォント名 を使用してください。この新しいフォントは、doc.save() 時にPDFに埋め込まれます。画像と同様に、フォントファイルは1度だけ埋め込まれます。バイナリフォントコンテンツのMD5コードのテーブルが使用され、これを確実にします。


set_simple (bool)

ファイルからインストールされたフォントは、デフォルトで Type0 フォントとしてインストールされます。1バイト文字のみを使用する場合は、これをtrueに設定します。この設定は元に戻すことはできません。後続の変更は無視されます。


fontsize (float)

テキストのフォントサイズ、参照: fontsize


dashes (str)

線を破線で描画するようにします。一般的なフォーマットは、ピクセル長を示す(最大)3つの浮動小数点数の "[n m] p" です。n は破線の長さ、m (オプション)はその後のギャップの長さ、 p (「位相」 - 0であっても 必須!)は、破線が開始される前にスキップするべきピクセルの数を指定します。m が省略された場合、n にデフォルト値が設定されます。

連続線(破線なし)は "[] 0" または None または "" で描画されます。例:

  • "[3 4] 0" を指定すると、3ピクセルの破線と4ピクセルのギャップが交互に続きます。

  • "[3 3] 0""[3] 0" は同じことをします。

洗練された破線効果を実現する詳細な詳細については、Adobe PDFリファレンス の217ページを参照してください。


色/塗りつぶしリスト、タプル

線の色と塗りつぶしの色は、0から1までの浮動小数点数からなるリストまたはタプルとして指定できます。これらのシーケンスの長さは、1(GRAY)、3(RGB)、または4(CMYK)でなければなりません。GRAYカラースペースの場合、[float] や*(float,)* の代わりに単一の浮動小数点数を使用することもできます。このパラメータを受け入れるには、(デフォルト)を受け入れるか、または使用しないようにするには None を使用します。

色の指定を簡略化するために、pymupdf.utilsgetColor() メソッドを使用して、名前に対応するRGBカラートリプルを取得することができます。これは色の名前を指定する文字列を受け入れ、対応するトリプルを返します。このメソッドは540以上のカラー名を認識します。カラーデータベース のセクションを参照してください。

ご注意ください。 という用語は、通常、塗りつぶし色と組み合わせて使用される場合に「線の」色を意味します

色パラメータのデフォルト値を None にする場合、対応する色の選択コマンドは生成されません。fillcolor がどちらも None の場合、描画には色の指定が含まれません。ただし、まだ「ストローク」されているため、Adobe Acrobatや他のビューアではPDFのデフォルトカラー「ブラック」が使用されます。


width (float)

図形内の要素のストローク("枠線")の幅(適用可能な場合)。デフォルト値は1です。幅、色、塗りつぶしの値は、以下の関係/依存関係を持ちます:

  • fill=None の場合、shape要素は常に枠線で描画されます - color=None の場合(その場合、黒が使用されます)、または width=0 の場合(その場合、1が使用されます)でもです。

  • 枠線のない図形は、塗りつぶしの色が指定されている場合のみ実現できます(もちろん白色であっても構いません)。これを実現するには、 width=0 を指定します。この場合、 color パラメータは無視されます。


stroke_opacity / fill_opacity浮動小数点数

両方の値は[0、1]の範囲の浮動小数点数です。負の値または1を超える値は(ほとんどの場合)無視されます。両方の値は、透明度を設定し、たとえば値0.5は50%の透明度を示し、0は不可視を意味し、1は不透明を意味します。たとえば四角形の場合、stroke_opacityはその境界に、fill_opacityはその内部に適用されます。

テキストの挿入(Shape.insert_text() および Shape.insert_textbox() )の場合、テキストには fill_opacity を使用してください。最初は驚くかもしれませんが、render_mode の詳細を見ると明らかになります。fill_opacity は黄色に適用され、stroke_opacity は青色に適用されます。


border_width浮動小数点数

テキスト挿入の境界線の幅を設定します。v1.14.9で新しく追加されました。render_mode引数がゼロより大きい値で使用されている場合にのみ関連します。


render_mode (整数)

バージョン1.14.9で新たに導入された range(8) 内の整数。これはテキストの外観(Shape.insert_text() および Shape.insert_textbox() )を制御します。Adobe PDFリファレンス のページ246を参照してください。バージョン1.14.9での新機能です。これらのメソッドは、塗りつぶしの色とストロークの色を区別するようになりました。

  • デフォルト値0では、テキストの塗りつぶし色のみがテキストを塗りつぶすために使用されます。color パラメーターを代わりに使用することも、後方互換性のために機能します。

  • render_mode 1では、各グリフ(つまりテキスト文字)の境界線のみが指定された border_width で描画されます。この際、color 引数で選択した色が使用され、fill パラメーターは無視されます。

  • render_mode 2では、グリフは塗りつぶされ、ストロークされ、両方の色パラメーターと指定された境界幅が使用されます。別のフォントを使用せずに 太字のテキスト をシミュレートするためにこの値を使用できます。fillcolor に同じ値を選択し、border_width に適切な値を選択します。

  • render_mode 3では、グリフはストロークも塗りつぶしもされません。テキストは見えなくなります。

以下の例では、border_width=0.3を使用し、フォントサイズは15です。ストロークの色は青で、塗りつぶしの色は黄色です。

_images/img-rendermode.jpg

オーバーレイbool

アイテムを前景( デフォルト)または背景に表示させます。


morphシーケンス

draw*() メソッドによって作成されたシェイプまたはページメソッド insert_textbox()/ insert_text() によって挿入されたテキストのいずれかの「変形」を引き起こします。 None でない場合、(fixpoint、matrix) のペアでなければなりません。ここで、fixpointPoint (ポイント) であり、matrixMatrix (マトリックス) です。行列は、matrix.e == matrix.f == 0 でない限り、移動以外の任意のものにすることができます。ポイントは、行列操作の固定ポイントとして使用されます。たとえば、行列 が回転またはスケーリングである場合、fixpoint はその中心です。同様に、行列 が左右または上下の反転である場合、鏡像化される軸は fixpoint を介して通る垂直、または水平の線です。

注釈

いくつかのメソッドには、ページに挿入されるアイテムが実際に適合するかどうかをチェックする検証が含まれています(Shape.insert_text() 、または Shape.draw_rect() など)。変形操作の結果にはそのような保証はありません。これは完全にプログラマーの責任です。


lineCap(非推奨:「roundCap」)(int

線の末端の外観を制御します。デフォルト値0は、各線の末端が鋭いエッジで正確な座標で終了することを許可します。値1は、末端に直径が線の幅で中心が末端ポイントである半円を追加します。値2は、線の幅と線の末端を中心とする辺の長さがある半正方形を追加します。

Changed in version 1.14.15


lineJoin (int)

バージョン1.14.15で新規追加: ラインの接続方法を制御します。これは、鋭いエッジ(0)、丸い接続(1)、または切り取られたエッジ(2、「butt」)のいずれかです。


closePath (bool)

描画の終点を自動的に始点に直線で接続させる原因となります。


This software is provided AS-IS with no warranty, either express or implied. This software is distributed under license and may not be copied, modified or distributed except as expressly authorized under the terms of that license. Refer to licensing information at artifex.com or contact Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States for further information.

Discord logo