Shape¶
이 클래스는 PDF 페이지에서 상호 연결된 그래픽 요소를 생성할 수 있게 합니다. 메서드는 해당 Page 메서드와 동일한 의미와 이름을 가집니다.
실제로 각 Page draw 메서드는 (1) 하나의 shape draw 메서드, (2) Shape.finish() 메서드, (3) Shape.commit() 메서드에 대한 편의 래퍼입니다. 페이지 텍스트 삽입의 경우 Shape.commit() 메서드만 호출됩니다. 페이지에 많은 그리기 및 텍스트 작업이 실행되는 경우 항상 Shape 객체 사용을 고려해야 합니다.
여러 draw 메서드를 연속으로 실행할 수 있으며 각각이 하나의 그림에 기여합니다. 그림이 완료되면 Shape.finish() 메서드를 호출하여 색상, 대시, 너비, 변형 및 기타 속성을 적용해야 합니다.
이 클래스의 Draw 메서드(및 Shape.insert_textbox())는 사각형(Shape.rect)에서 덮고 있는 영역을 기록합니다. 이 속성은 예를 들어 Page.cropbox_position 을 설정하는 데 사용할 수 있습니다.
텍스트 삽입 Shape.insert_text() 및 Shape.insert_textbox() 는 암시적으로 “finish”를 실행하므로 효과를 발휘하려면 Shape.commit() 만 필요합니다. 결과적으로 둘 다 색상 등의 속성을 제어하는 매개변수를 포함합니다.
Method / Attribute |
Description |
|---|---|
페이지의 콘텐츠 업데이트 |
|
3차 Bezier 곡선 그리기 |
|
점 주위에 원 그리기 |
|
하나의 보조 점을 사용하여 3차 Bezier 그리기 |
|
선 그리기 |
|
타원 그리기 |
|
점 시퀀스 연결 |
|
사각형 그리기 |
|
직사각형 그리기 |
|
원형 섹터 또는 파이 조각 그리기 |
|
구불구불한 선 그리기 |
|
지그재그 선 그리기 |
|
그리기 명령 세트 완료 |
|
텍스트 줄 삽입 |
|
사각형에 텍스트 맞추기 |
|
페이지의 문서 저장 |
|
마지막 |
|
페이지의 높이 저장 |
|
현재 점 저장 |
|
소유 페이지 저장 |
|
그림을 둘러싸는 사각형 |
|
누적된 텍스트 삽입 |
|
|
|
페이지의 너비 저장 |
Class 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) – 끝점
- 반환 형식:
- 반환:
끝점 p2.
- draw_squiggle(p1, p2, breadth=2)¶
point_like객체 p1 에서 p2 까지 구불구불한(물결치는, 파형의) 선을 그립니다. 항상 정수 개의 전체 파형 주기가 그려지며, 한 주기의 길이는 4 * breadth 입니다. 이 조건을 충족하기 위해 breadth 매개변수가 필요에 따라 조정됩니다. 그려진 선은 p1 을 떠날 때 항상 “왼쪽”으로 돌고 항상 “오른쪽”에서 p2 에 합류합니다.- 매개변수:
p1 (point_like) – 시작점
p2 (point_like) – 끝점
breadth (float) – 각 파형의 진폭. 최소한 하나의 파형을 맞추려면 조건 2 * breadth < abs(p2 - p1) 이 참이어야 합니다. 하나의 전체 주기로 연결된 두 점을 보여주는 다음 그림을 참조하세요.
- 반환 형식:
- 반환:
끝점 p2.
다음은 닫힌 채워진 삼각형을 형성하는 세 개의 연결된 선의 예입니다. 작은 화살표는 스트로크 방향을 나타냅니다.
>>> 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")
참고
그려진 파형은 삼각함수 (사인/코사인)가 아닙니다. 그것이 필요하다면 draw.py 를 참조하세요.
- draw_zigzag(p1, p2, breadth=2)¶
point_like객체 p1 에서 p2 까지 지그재그 선을 그립니다. 그 외에는Shape.draw_squiggle()과 정확히 동일하게 작동합니다.- 매개변수:
p1 (point_like) – 시작점
p2 (point_like) – 끝점
breadth (float) – 이동의 진폭. 최소한 하나의 주기를 맞추려면 조건 2 * breadth < abs(p2 - p1) 이 참이어야 합니다.
- 반환 형식:
- 반환:
끝점 p2.
- draw_polyline(points)¶
시퀀스 points 에 포함된 점들 사이에 여러 개의 연결된 선을 그립니다. 마지막 항목을 첫 번째 항목과 같게 설정하여 임의의 다각형을 만드는 데 사용할 수 있습니다.
- 매개변수:
points (sequence) –
point_like객체의 시퀀스. 길이는 최소 2여야 합니다(이 경우 draw_line() 와 동일함).- 반환 형식:
- 반환:
points[-1] – 인수 시퀀스의 마지막 점.
- draw_bezier(p1, p2, p3, p4)¶
p2 와 p3 를 제어점으로 사용하여 p1 에서 p4 까지 표준 3차 Bézier 곡선을 그립니다.
모든 인수는
point_like객체입니다.- 반환 형식:
- 반환:
끝점 p4.
참고
점들이 달라야 할 필요는 없습니다 – 일부가 같도록 실험해보세요!
Example:
- draw_oval(tetra)¶
주어진 사각형(사변형) 내에 “타원”을 그립니다. 정사각형이면 일반 원이 그려지고, 일반 직사각형이면 타원이 됩니다. 사변형을 사용하면 다양한 모양이 결과가 될 수 있습니다.
그리기는 반시계 방향으로
왼쪽 아래 -> 왼쪽 위모서리 선의 중간점에서 시작하고 끝납니다.- 매개변수:
tetra (rect_like,quad_like) –
버전 1.14.5에서 변경됨: 이제 Quads도 지원됩니다.
- 반환 형식:
- 반환:
선
rect.bl -> rect.tl또는 각각quad.ll -> quad.ul의 중간점. 여기서 몇 가지 예제를 보거나 PyMuPDF-Utilities 저장소의 quad-show?.py 스크립트를 참조하세요.
- draw_circle(center, radius)¶
중심과 반지름이 주어진 원을 그립니다. 그리기는 반시계 방향 으로 점
center - (radius, 0)에서 시작하고 끝납니다. 이 점은 둘러싸는 정사각형의 왼쪽 변의 중간입니다.이것은
draw_sector(center, start, 360, fullSector=False)의 바로가기입니다. 시계 방향 으로 동일한 원을 그리려면 각도로-360을 사용하세요.
- draw_curve(p1, p2, p3)¶
draw_bezier() 의 특수한 경우: p1 에서 p3 까지 3차 Bezier 곡선을 그립니다. 두 선
p1 -> p2와p3 -> p2각각에 하나의 제어점이 생성됩니다. 따라서 두 제어점은 모두 선p1 -> p3의 같은 쪽에 있습니다. 이것은 곡선의 곡률이 부호를 변경하지 않도록 보장합니다. p2로의 선이 90도 각도로 교차하면 결과 곡선은 1/4 타원(또는 같은 길이인 경우 1/4 원)이 됩니다.모든 인수는
point_like입니다.- 반환 형식:
- 반환:
끝점 p3. 다음은 채워진 1/4 타원 세그먼트입니다. 노란색 영역은 시계 방향 으로 향합니다:
- draw_sector(center, point, angle, fullSector=True)¶
원형 섹터를 그립니다. 선택적으로 호를 원의 중심에 연결합니다(파이 조각처럼).
- 매개변수:
center (point_like) – 원의 중심.
point (point_like) – 파이의 호 세그먼트의 두 끝점 중 하나. 다른 하나는 angle 에서 계산됩니다.
angle (float) – 섹터의 각도(도 단위). 호의 다른 끝점을 계산하는 데 사용됩니다. 부호에 따라 호는 반시계 방향(양수) 또는 시계 방향으로 그려집니다.
fullSector (bool) – 호의 끝에서 원의 중심까지 연결선을 그릴지 여부. 채우기 색상이 지정되면 전체 “파이”가 색칠되고, 그렇지 않으면 섹터만 색칠됩니다.
- 반환 형식:
- 반환:
호의 다른 끝점. 논리적으로 연결된 파이 차트를 만들기 위한 후속 호출의 시작점으로 사용할 수 있습니다. 예:

- draw_rect(rect, *, radius=None)¶
v1.22.0에서 변경됨: 매개변수 radius 추가.
직사각형을 그립니다. 그리기는 반시계 방향으로 왼쪽 위 모서리에서 시작하고 끝납니다.
- 매개변수:
rect (rect_like) – 페이지에서 직사각형을 배치할 위치.
radius (multiple) – 둥근 직사각형 모서리를 그립니다.
None이 아니면 직사각형 변 길이의 백분율로 곡률의 반지름을 지정합니다. 이것은 하나 또는 (튜플의) 두 개의 float0 < radius <= 0.5여야 하며, 여기서 0.5는 해당 변의 50%에 해당합니다. float인 경우 곡률의 반지름은radius * min(width, height)로 계산되며, 모서리의 둘레를 1/4 원으로 그립니다. 튜플(rx, ry)가 주어지면 곡률은 수평 및 수직 방향에 대해 비대칭입니다.radius=(0.5, 0.5)값은 타원을 그립니다.
- 반환 형식:
- 반환:
직사각형의 왼쪽 위 모서리.
- draw_quad(quad)¶
사변형을 그립니다. 그리기는 반시계 방향으로 왼쪽 위 모서리(
Quad.ul)에서 시작하고 끝납니다. 인수(ul, ll, lr, ur, ul)을 사용하는Shape.draw_polyline()의 바로가기입니다.
- 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 fixpoint 및 Matrix matrix 를 사용하여 복합 그림 변형 도 지원합니다.
- 매개변수:
morph (sequence) – 임의의 Point fixpoint 주변의 텍스트 또는 복합 그림을 Matrix matrix 를 적용하여 변형합니다. 이것은 fixpoint 가 이 작업의 고정점 임을 의미합니다: 위치가 변경되지 않습니다. 기본값은 변형 없음(
None)입니다. 행렬은 처음 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 rule” 을 요청합니다. 기본값은
False이므로 “nonzero winding number rule” 이 사용됩니다. 이러한 규칙은 영역이 겹치는 곳에 채우기 색상을 적용하는 대체 방법입니다. 상당히 복잡한 모양에서만 이러한 규칙으로 다른 동작이 예상됩니다. 자세한 설명은 Adobe PDF 참조 137페이지 이하를 참조하세요. 차이를 보여주는 예제는 다음과 같습니다.oc (int) – (v1.18.4의 새로운 기능) 이 그림을 조건부로 표시 가능하게 하는
OCG또는OCMD의xref번호.
참고
모양의 각 픽셀에 대해 다음이 발생합니다:
규칙 “even-odd” 는 픽셀을 포함하는 영역의 수를 계산합니다. 이 카운트가 홀수 이면 픽셀은 모양 내부 로 간주되고, 짝수 이면 픽셀은 외부 로 간주됩니다.
기본 규칙 “nonzero winding” 은 추가로 픽셀을 포함하는 각 영역의 “방향” 을 봅니다: 영역이 반시계 방향으로 그려지면 1을 더하고 시계 방향 영역에 대해서는 1을 뺍니다. 결과가 0이면 픽셀은 외부 로 간주되고, 0이 아닌 카운트를 가진 픽셀은 모양 내부 에 있습니다.
위 이미지의 네 모양 중 위쪽 두 개는 각각 표준 방식(반시계 방향, 화살표 참조)으로 그려진 세 개의 원을 보여줍니다. 아래쪽 두 모양은 시계 방향으로 그려진 하나(왼쪽 위)의 원을 포함합니다. 보시다시피 영역 방향은 오른쪽 열(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, miter_limit=1, border_width=1, rotate=0, morph=None, stroke_opacity=1, fill_opacity=1, oc=0)¶
point에서 시작하는 텍스트 줄을 삽입합니다.- 매개변수:
point (point_like) –
픽셀 단위로 text 의 첫 번째 문자의 왼쪽 아래 위치. 이것이 rotate 매개변수와 함께 어떻게 작동하는지 이해하는 것이 중요합니다. 다음 그림을 참조하세요. 작은 빨간 점은 네 가지 가능한 경우 각각에서 point 의 위치를 나타냅니다.

text (str/sequence) – 삽입할 텍스트. 문자열 타입 또는 시퀀스 타입으로 지정할 수 있습니다. 시퀀스 또는 줄바꿈
\n을 포함하는 문자열의 경우 여러 줄이 삽입됩니다. 줄이 너무 넓어도 처리하지 않지만, 삽입된 줄 수는 페이지의 “수직” 공간(rotate 매개변수에 의해 설정된 읽기 방향의 의미에서)에 의해 제한됩니다. text 의 나머지는 버려집니다 – 그러나 반환 코드는 삽입된 줄 수를 포함합니다.lineheight (float) – 글꼴 속성에서 계산된 줄 높이를 재정의하는 요소.
None이 아니면fontsize * lineheight의 줄 높이가 사용됩니다.stroke_opacity (float) – (v1.18.1의 새로운 기능) 스트로크 색상(문자의 테두리 선)의 투명도를 설정합니다.
0 <= value <= 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또는OCMD의xref번호.
- 반환 형식:
int
- 반환:
삽입된 줄 수.
다른 매개변수에 대한 설명은 공통 매개변수 를 참조하세요.
- insert_textbox(rect, buffer, *, align=TEXT_ALIGN_LEFT, border_width=1, color=None, encoding=TEXT_ENCODING_LATIN, expandtabs=8, fill=None, fill_opacity=1, fontfile=None, fontname='helv', fontsize=11, lineheight=None, miter_limit=1, morph=None, oc=0, render_mode=0, rotate=0, set_simple=False, stroke_opacity=1)¶
PDF 전용: 지정된 사각형에 텍스트를 삽입합니다. 텍스트는 줄과 단어로 분할된 다음 사용 가능한 공간에 채워지며,
rotate에 따라 사각형의 네 모서리 중 하나에서 시작합니다. 줄바꿈과 여러 공백이 존중됩니다.- 매개변수:
rect (rect_like) – 사용할 영역. 유한하고 비어 있지 않아야 합니다.
buffer (str/sequence) – 삽입할 텍스트. 문자열 또는 문자열 시퀀스로 지정해야 합니다. 시퀀스 항목에 발생하는 경우에도 줄바꿈이 존중됩니다.
align (int) – 각 텍스트 줄을 정렬합니다. 기본값은 0(왼쪽)입니다. 중앙, 오른쪽 및 양쪽 정렬은 다른 지원 옵션입니다. 텍스트 정렬 을 참조하세요. 매개변수 값 TEXT_ALIGN_JUSTIFY 의 효과는 “simple”(단일 바이트) 글꼴(PDF Base 14 글꼴 포함)에서만 달성할 수 있습니다.
expandtabs (int) – 각 줄마다
string.expandtabs()메서드를 사용하여 탭 문자\t의 처리를 제어합니다.fill_opacity (float) – (v1.18.1의 새로운 기능) 채우기 색상의 투명도를 설정합니다. 기본값은 1(불투명)입니다. 이 값을 사용하여 텍스트 색상의 투명도를 제어합니다. 스트로크 불투명도는 문자의 테두리 선에만 영향을 줍니다.
lineheight (float) – 글꼴 속성에서 계산된 줄 높이를 재정의하는 요소.
None이 아니면fontsize * lineheight의 줄 높이가 사용됩니다.oc (int) – (v1.18.4의 새로운 기능) 이 텍스트를 조건부로 표시 가능하게 하는
OCG또는OCMD의xref번호.rotate (int) – 사각형에서 텍스트를 회전하도록 요청합니다. 이 값은 90도의 배수여야 합니다. 기본값은 0(회전 없음)입니다. 효과적으로 네 가지 값
0,90,180및270(=-90)이 처리되며, 각각 텍스트가 다른 사각형 모서리에서 시작하도록 합니다. 왼쪽 아래는90, 오른쪽 아래는180,-90 / 270은 오른쪽 위입니다. 텍스트가 사각형에 채워지는 방법의 예제를 참조하세요. 이 인수는 변형보다 우선합니다. 텍스트가 먼저90도 왼쪽으로 회전한 다음 전체 사각형이 왼쪽 아래 모서리를 중심으로 시계 방향으로 회전하는 두 번째 예제를 참조하세요.stroke_opacity (float) – (v1.18.1의 새로운 기능) 스트로크 색상의 투명도를 설정합니다. 음수 값과 값 > 1은 무시됩니다. 기본값은 1(불투명)입니다.
- 반환 형식:
float
- 반환:
양수 또는 0인 경우: 성공적인 실행. 반환된 값은 픽셀 단위의 사용되지 않은 사각형 줄 공간입니다. 이것은 안전하게 무시할 수 있습니다 – 또는 사각형을 최적화하고 후속 항목을 배치하는 데 사용할 수 있습니다.
음수인 경우: 실행되지 않음. 반환된 값은 텍스트 줄을 저장하기 위한 공간 부족입니다. 사각형을 확대하고, fontsize 를 줄이고, 텍스트 양을 줄이는 등을 수행하세요.
다른 매개변수에 대한 설명은 공통 매개변수 를 참조하세요.
- commit(overlay=True)¶
누적된 그림으로 페이지의
contents를 업데이트한 다음 텍스트 삽입을 수행합니다. 텍스트가 그림과 겹치면 그림 위에 기록됩니다.경고
이 메서드를 실행하는 것을 잊지 마세요:
shape가 커밋되지 않으면 무시되고 페이지가 변경되지 않습니다!
이 메서드는 속성
Shape.rect,lastPoint,draw_cont,text_cont및totalcont를 재설정합니다. 이후 shape 객체는 동일한 페이지 에 대해 재사용할 수 있습니다.- 매개변수:
overlay (bool) – 콘텐츠를 전경(기본값) 또는 배경에 배치할지 결정합니다. 페이지에 이미 비어 있지 않은
contents객체가 있는 경우에만 관련됩니다.
———- Attributes ———-
- height¶
페이지 높이의 복사본
- Type:
float
- width¶
페이지 너비의 복사본.
- Type:
float
- draw_cont¶
마지막 finish 이후 draw 메서드 의 누적 명령 버퍼. 모든 finish 메서드는 명령을
Shape.totalcont에 추가합니다.- Type:
str
- text_cont¶
누적된 텍스트 버퍼. 모든 텍스트 삽입 이 여기로 갑니다. 이 버퍼는
Shape.commit()에서totalcont에 추가되므로 텍스트가 같은 Shape의 그림에 의해 덮이지 않습니다.- Type:
str
- rect¶
그림을 둘러싸는 사각형. 이 속성은 사용자가 자유롭게 사용할 수 있으며 언제든지 변경할 수 있습니다. shape가 생성되거나 커밋될 때 값이
None으로 설정됩니다. 모든 draw* 메서드와Shape.insert_textbox()는 이 속성을 업데이트합니다(즉, 필요에 따라 사각형을 확대). 하지만 Morphing 작업(Shape.finish(),Shape.insert_textbox())은 무시됩니다.이 속성의 일반적인 사용은 나중에 사용하거나 외부에서 사용하기 위해 shape를 생성할 때
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:
- totalcont¶
그리기 및 텍스트 삽입을 위한 총 누적 명령 버퍼. 이것은
Shape.commit()에서 사용됩니다.- Type:
str
사용법¶
그리기 객체는 shape = page.new_shape() 로 구성됩니다. 그 후 필요한 만큼 많은 draw, finish 및 텍스트 삽입 메서드가 올 수 있습니다. 그리기가 커밋되기 전에 각 draw 시퀀스가 완료되어야 합니다. 전체 코딩 패턴은 다음과 같습니다:
>>> 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()
>>> ....
참고
각 finish() 는 앞의 그리기를 하나의 논리적 모양으로 결합하여 공통 색상, 선 너비, 변형 등을 제공합니다. closePath 가 지정되면 마지막 그리기의 끝점을 첫 번째 그리기의 시작점과 연결합니다.
복합 그래픽을 성공적으로 만들려면 각 draw 메서드가 이전 메서드의 끝점을 시작점으로 사용하도록 하세요. 위의 의사 코드에서 draw2 는 따라서 draw1 의 반환된 Point 를 시작점으로 사용해야 합니다. 그렇게 하지 않으면 자동으로 새 경로가 시작되고 finish() 가 예상대로 작동하지 않을 수 있습니다(하지만 불평하지도 않습니다).
텍스트 삽입은 커밋 전 어디서든 발생할 수 있습니다(
Shape.draw_cont나Shape.lastPoint를 건드리지 않습니다). 이것들은 Shape.totalcont 에 직접 추가되는 반면, 그리기는 Shape.finish 에 의해 추가됩니다.각 commit 은 모든 텍스트 삽입과 모양을 가져와 페이지의 전경 또는 배경에 배치합니다 – 따라서 그래픽 레이어를 제어하는 방법을 제공합니다.
오직 commit 만 페이지의 콘텐츠를 업데이트 하며, 다른 메서드는 기본적으로 문자열 조작입니다.
예제¶
다양한 색상의 파이 조각으로 전체 원 만들기:
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가지 색상의 예제입니다:
정규 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인 다각형입니다:
공통 매개변수¶
fontname (str)
일반적으로 세 가지 옵션이 있습니다:
표준 PDF Base 14 글꼴 중 하나를 사용합니다. 이 경우 fontfile 을 지정하면 안 되며 이 매개변수도 생략하면 “Helvetica” 가 사용됩니다.
페이지에서 이미 사용 중인 글꼴을 선택합니다. 그런 다음 슬래시 “/” 로 시작하는 참조 이름을 지정하세요. 아래 예제를 참조하세요.
시스템에 있는 글꼴 파일을 지정합니다. 이 경우 이 매개변수에 대해 임의의 새 이름을 선택하세요(“/” 접두사 없이).
삽입된 텍스트가 페이지의 글꼴 중 하나를 재사용해야 하는 경우
Page.get_fonts()에 나타나는 참조 이름을 다음과 같이 사용하세요:글꼴 목록에 항목 [1024, 0, ‘Type1’, ‘NimbusMonL-Bold’, ‘R366’] 가 있다고 가정하면, 글꼴 NimbusMonL-Bold 를 사용하기 위해 fontname = “/R366”, fontfile = None 을 지정하세요.
fontfile (str)
컴퓨터에 있는 글꼴의 파일 경로. fontfile 을 지정하는 경우 위 목록에 나타나지 않는 fontname 을 사용해야 합니다. 이 새 글꼴은 doc.save() 시 PDF에 포함됩니다. 새 이미지와 유사하게 글꼴 파일은 한 번만 포함됩니다. 바이너리 글꼴 콘텐츠의 MD5 코드 테이블을 사용하여 이를 보장합니다.
set_simple (bool)
파일에서 설치된 글꼴은 기본적으로 Type0 글꼴로 설치됩니다. 1바이트 문자만 사용하려면 이것을 true로 설정하세요. 이 설정은 되돌릴 수 없습니다. 후속 변경 사항은 무시됩니다.
fontsize (float)
텍스트의 글꼴 크기, 참조:
fontsize.
dashes (str)
선을 점선으로 그리도록 합니다. 일반 형식은 픽셀 길이를 나타내는 (최대) 3개의 float
"[n m] p"입니다.n은 대시 길이이고,m(선택 사항)은 후속 간격 길이이며,p(“phase” - 필수, 0이어도!)는 대시가 시작되기 전에 건너뛸 픽셀 수를 지정합니다.m이 생략되면 기본값은n입니다.연속 선(대시 없음)은
"[] 0"또는None또는""로 그려집니다. 예제:
"[3 4] 0"을 지정하면 3픽셀 대시와 4픽셀 간격이 연속으로 이어집니다.
"[3 3] 0"과"[3] 0"은 동일한 작업을 수행합니다.정교한 대시 효과를 얻는 방법에 대한 (상당히 복잡한) 세부 사항은 Adobe PDF 참조, 217페이지를 참조하세요.
color / fill (list, tuple)
스트로크 및 채우기 색상은 0부터 1까지의 float 튜플 또는 리스트로 지정할 수 있습니다. 이러한 시퀀스는 길이가 1(GRAY), 3(RGB) 또는 4(CMYK)여야 합니다. GRAY 색 공간의 경우 다루기 어려운 (float,) 또는 [float] 대신 단일 float도 허용됩니다. 기본값을 수락하거나
None을 사용하여 매개변수를 사용하지 않습니다.색상 지정을 단순화하기 위해 pymupdf.utils 의 메서드 getColor() 를 사용하여 이름으로 미리 정의된 RGB 색상 삼중항을 가져올 수 있습니다. 색상 이름으로 문자열을 받아 해당 삼중항을 반환합니다. 이 메서드는 540개 이상의 색상 이름을 알고 있습니다 – 섹션 색상 데이터베이스 를 참조하세요.
color 라는 용어는 채우기 색상과 함께 사용될 때 일반적으로 “스트로크” 색상을 의미합니다.
색상 매개변수의 기본값을
None으로 두면 해당 색상 선택 명령이 생성되지 않습니다. fill 과 color 가 모두None이면 그리기에는 색상 사양이 포함되지 않습니다. 하지만 여전히 “스트로크”되며, 이로 인해 Adobe Acrobat 및 기타 모든 뷰어에서 PDF의 기본 색상 “black” 이 사용됩니다.
width (float)
shape의 요소의 스트로크(“테두리”) 너비(해당하는 경우). 기본값은 1입니다. width, color 및 fill 값은 다음과 같은 관계/의존성을 가집니다:
fill=None이면 shape 요소는 항상 테두리와 함께 그려집니다 –color=None(이 경우 검은색이 사용됨)이거나width=0(이 경우 1이 사용됨)인 경우에도 마찬가지입니다.테두리 없는 shape는 채우기 색상이 지정된 경우에만 달성할 수 있습니다(물론 흰색일 수 있음). 이를 달성하려면
width=0을 지정하세요. 이 경우color매개변수는 무시됩니다.
stroke_opacity / fill_opacity (floats)
두 값 모두 [0, 1] 범위의 float입니다. 음수 값 또는 값 > 1은 (대부분의 경우) 무시됩니다. 둘 다 투명도를 설정하므로 값 0.5는 50% 투명도에 해당하고, 0은 보이지 않음을 의미하며 1은 불투명을 의미합니다. 예를 들어 사각형의 경우 스트로크 불투명도는 테두리에 적용되고 채우기 불투명도는 내부에 적용됩니다.
텍스트 삽입(
Shape.insert_text()및Shape.insert_textbox())의 경우 텍스트에 fill_opacity 를 사용합니다. 처음에는 놀라울 수 있지만render_mode를 보면 명확해집니다:fill_opacity는 노란색에 적용되고stroke_opacity는 파란색에 적용됩니다.
border_width (float)
텍스트 삽입의 테두리 너비를 설정합니다. v1.14.9의 새로운 기능. 렌더 모드 인수가 0보다 큰 값으로 사용되는 경우에만 관련됩니다.
render_mode (int)
버전 1.14.9의 새로운 기능: 텍스트 모양을 제어하는
range(8)의 정수(Shape.insert_text()및Shape.insert_textbox()). Adobe PDF 참조 246페이지를 참조하세요. v1.14.9의 새로운 기능. 이 메서드는 이제 채우기 색상과 스트로크 색상을 구분합니다.
기본값 0의 경우 텍스트를 그리는 데 텍스트 채우기 색상만 사용됩니다. 하위 호환성을 위해 color 매개변수를 대신 사용해도 작동합니다.
렌더 모드 1의 경우 각 글리프(즉, 텍스트 문자)의 테두리만 인수 border_width 에 설정된 두께로 그려집니다. color 인수에서 선택한 색상이 사용되며 fill 매개변수는 무시됩니다.
렌더 모드 2의 경우 글리프가 채워지고 스트로크되며, 두 색상 매개변수와 지정된 테두리 너비를 사용합니다. 다른 글꼴을 사용하지 않고 굵은 텍스트 를 시뮬레이션하려면 이 값을 사용할 수 있습니다: fill 과 color 에 동일한 값을 선택하고 border_width 에 적절한 값을 선택하세요.
렌더 모드 3의 경우 글리프가 스트로크되지도 채워지지도 않습니다: 텍스트가 보이지 않게 됩니다.
다음 예제는 border_width=0.3과 함께 fontsize 15를 사용합니다. 스트로크 색상은 파란색이고 채우기 색상은 노란색입니다.
![]()
miter_limit (float)
몫
miter-length / line-width(“miter quotient”)의 최대 허용 값을 지정하는 float. 텍스트 출력 메서드에서 사용됩니다. 이것은 0이 아닌 렌더 모드 값에만 관련됩니다 – 그런 경우 문자는 테두리 선(즉, “스트로크”)으로 작성됩니다.일부 문자를 스트로크하는 두 선이 날카로운 (<= 90°) 각도로 만나고 선 너비가 충분히 크면 “스파이크”가 보일 수 있습니다 – 아래와 같이 보기 흉한 모양을 만듭니다. 더 자세한 내용은 Adobe PDF 참조 126페이지를 참조하세요.
예를 들어, 조인이 90°에서 만나면 miter 길이는
sqrt(2) * line-width이므로 miter 몫은sqrt(2)입니다.
miter_limit이 초과되면 더 큰 몫을 가진 모든 조인이 베벨 처리된 것처럼(“butt” 모양) 나타납니다.기본값 1(및 더 작은 값)은 모든 조인이 butt로 렌더링되도록 보장합니다.
None값은 PDF 기본값을 사용합니다.스파이크를 보여주는 예제 텍스트 (
miter_limit=None):![]()
스파이크를 억제하는 예제 텍스트 (
miter_limit=1):![]()
overlay (bool)
항목이 전경(기본값) 또는 배경에 나타나도록 합니다.
morph (sequence)
draw*() 메서드로 생성된 shape 또는 페이지 메서드 insert_textbox() / insert_text() 로 삽입된 텍스트의 “변형”을 일으킵니다.
None이 아니면 (fixpoint, matrix) 쌍이어야 하며, 여기서 fixpoint 는 Point 이고 matrix 는 Matrix 입니다. 행렬은 이동을 제외한 모든 것이 될 수 있습니다. 즉, matrix.e == matrix.f == 0 이 참이어야 합니다. 점은 행렬 작업의 고정점으로 사용됩니다. 예를 들어, matrix 가 회전 또는 확대/축소이면 fixpoint 는 중심입니다. 마찬가지로, matrix 가 좌우 또는 상하 뒤집기이면 미러링 축은 각각 fixpoint 를 통과하는 수직 또는 수평선이 됩니다.참고
여러 메서드는 삽입될 항목이 실제로 페이지에 맞는지 확인합니다(
Shape.insert_text()또는Shape.draw_rect()등). 하지만 변형 작업의 결과에 대해서는 그러한 보장이 없습니다: 이것은 전적으로 프로그래머의 책임입니다.
lineCap (더 이상 사용되지 않음: “roundCap”) (int)
선 끝의 모양을 제어합니다. 기본값 0은 각 선이 날카로운 가장자리에서 정확히 주어진 좌표에서 끝나도록 합니다. 값 1은 끝에 반원을 추가하며, 중심은 끝점이고 지름은 선 너비입니다. 값 2는 선 너비의 가장자리 길이와 선 끝의 중심을 가진 반사각형을 추가합니다.
버전 1.14.15에서 변경됨
lineJoin (int)
버전 1.14.15의 새로운 기능: 선 연결의 모양을 제어합니다. 이것은 날카로운 가장자리(0), 둥근 조인(1) 또는 잘린 가장자리(2, “butt”)일 수 있습니다.
closePath (bool)
그리기의 끝점을 시작점과 자동으로 연결합니다(직선으로).

