Document¶
이 클래스는 문서를 나타냅니다. 파일 또는 메모리에서 생성할 수 있습니다.
이 클래스에는 open 별칭이 있습니다. 즉, pymupdf.Document(...) 와 pymupdf.open(...) 는 정확히 동일한 작업을 수행합니다.
임베디드 파일 에 대한 자세한 내용은 부록 3을 참조하세요.
참고
v1.17.0부터 EPUB 파일 전용 새로운 페이지 주소 지정 메커니즘이 지원됩니다. 이 문서 타입은 내부적으로 장으로 구성되어 있어 페이지를 소위 “location” 으로 가장 효율적으로 찾을 수 있습니다. location은 장 번호와 해당 장의 페이지 번호로 구성된 튜플 (chapter, pno) 입니다. 두 숫자 모두 0부터 시작합니다.
여전히 (절대) 번호로 페이지를 찾을 수 있지만, 이렇게 하면 페이지를 주소 지정하기 전에 전체 EPUB 문서를 레이아웃해야 할 수 있습니다. 문서가 매우 큰 경우 성능에 상당한 영향을 줄 수 있습니다. 페이지의 (chapter, pno) 를 사용하면 이를 방지할 수 있습니다.
일관된 API를 유지하기 위해 PyMuPDF 는 모든 파일 타입 에 대해 페이지 location 구문을 지원합니다. 이 기능이 없는 문서는 단순히 하나의 장만 가집니다. Document.load_page() 및 동등한 인덱스 액세스는 이제 location 인수도 지원합니다.
페이지 번호와 location 간 변환, 장 수 결정, 장당 페이지 수, 다음 및 이전 location 계산, 문서의 마지막 페이지 location을 위한 여러 메서드가 있습니다.
메서드 / 속성 |
간단한 설명 |
|---|---|
PDF 전용: 새로운 선택적 콘텐츠 구성 만들기 |
|
PDF 전용: 새로운 선택적 콘텐츠 그룹 추가 |
|
암호화된 문서에 액세스 |
|
PDF 전용: 주석/필드를 영구 콘텐츠로 만들기 |
|
증분 저장이 가능한지 확인 |
|
장의 페이지 수 |
|
문서 닫기 |
|
메모리에 PDF 버전 쓰기 |
|
PDF 전용: 페이지 참조 복사 |
|
PDF 전용: 단일 TOC 항목 제거 |
|
PDF 전용: 페이지 삭제 |
|
PDF 전용: 여러 페이지 삭제 |
|
PDF 전용: 버퍼에서 새 임베디드 파일 추가 |
|
PDF 전용: 임베디드 파일 수 |
|
PDF 전용: 임베디드 파일 항목 삭제 |
|
PDF 전용: 임베디드 파일 버퍼 추출 |
|
PDF 전용: 임베디드 파일의 메타데이터 |
|
PDF 전용: 임베디드 파일 목록 |
|
PDF 전용: 임베디드 파일 변경 |
|
PDF 전용: |
|
PDF 전용: |
|
PDF 전용: 다른 기본값으로 |
|
레이아웃된 문서 후 페이지 location 검색 |
|
PDF 전용: 페이지 복제 |
|
PDF 전용: ON, OFF, RBGroups의 OCG 목록 |
|
PDF 전용: 선택적 콘텐츠 구성 목록 |
|
PDF 전용: 이미지/폼 xobject의 OCG/OCMD xref 가져오기 |
|
PDF 전용: 모든 선택적 콘텐츠 그룹 정보 |
|
PDF 전용: |
|
PDF 전용: 페이지에서 참조하는 글꼴 목록 |
|
PDF 전용: 페이지에서 참조하는 이미지 목록 |
|
PDF 전용: 페이지 레이블 정의 목록 |
|
PDF 전용: 주어진 레이블을 가진 페이지 번호 가져오기 |
|
페이지 번호로 페이지의 pixmap 생성 |
|
페이지 번호로 페이지의 텍스트 추출 |
|
PDF 전용: 페이지에서 참조하는 XObject 목록 |
|
PDF 전용: 서명 상태 확인 |
|
목차 추출 |
|
PDF 전용: XML 메타데이터 읽기 |
|
PDF 전용: PDF에 주석이 있는지 확인 |
|
PDF 전용: PDF에 링크가 있는지 확인 |
|
PDF 전용: 새 페이지 삽입 |
|
PDF 전용: 다른 PDF에서 페이지 삽입 |
|
PDF 전용: 임의 문서에서 페이지 삽입 |
|
PDF 전용: 어떤 저널 작업이 가능한지 |
|
PDF 전용: 문서에 대한 저널링 활성화 |
|
PDF 전용: 파일에서 저널 로드 |
|
PDF 전용: 저널링 단계의 이름 반환 |
|
PDF 전용: 저널링 상태 반환 |
|
PDF 전용: 현재 작업 다시 실행 |
|
PDF 전용: 파일에 저널 저장 |
|
PDF 전용: 이름을 지정하여 “작업” 시작 |
|
PDF 전용: 현재 작업 종료 |
|
PDF 전용: 현재 작업 실행 취소 |
|
PDF 전용: 선택적 콘텐츠 의도 목록 |
|
문서 재페이지화(지원되는 경우) |
|
페이지 읽기 |
|
재배치 가능한 문서에서 페이지 포인터 생성 |
|
PDF 전용: 문서 내 다른 위치로 페이지 이동 |
|
PDF 전용: |
|
PDF 전용: 새 빈 페이지 삽입 |
|
다음 페이지의 (chapter, pno) 반환 |
|
PDF 전용: TOC 항목의 |
|
PDF 전용: 회전되지 않은 페이지 사각형 |
|
PDF 전용: 페이지 번호의 |
|
페이지 범위에 대한 반복자 |
|
PDF 전용: 카탈로그(루트)의 |
|
PDF 전용: 트레일러 소스 |
|
이전 페이지의 (chapter, pno) 반환 |
|
PDF 전용: 이미지 재작성/추가 압축 |
|
PDF 전용: 모든 페이지에 대해 |
|
PDF 전용: 페이지의 새 복사본 제공 |
|
PDF 전용: 대상 이름을 Python dict로 변환 |
|
PDF 전용: 문서 저장 |
|
PDF 전용: 문서 증분 저장 |
|
PDF 전용: 민감한 데이터 제거 |
|
페이지에서 문자열 검색 |
|
PDF 전용: 페이지 하위 집합 선택 |
|
PDF 전용: OCG 가시성 임시 설정 |
|
PDF 전용: OCG 상태 대량 변경 |
|
PDF 전용: MarkInfo 값 설정 |
|
PDF 전용: 메타데이터 설정 |
|
PDF 전용: 이미지/폼 xobject에 OCG/OCMD 첨부 |
|
PDF 전용: |
|
PDF 전용: 페이지 레이블 정의 추가/업데이트 |
|
PDF 전용: PageMode 설정 |
|
PDF 전용: PageLayout 설정 |
|
PDF 전용: 단일 TOC 항목 변경 |
|
PDF 전용: 목차(TOC) 설정 |
|
PDF 전용: 문서 XML 메타데이터 생성 또는 업데이트 |
|
PDF 전용: 글꼴 하위 집합 생성 |
|
PDF 전용: OC 구성 활성화 |
|
PDF 전용: 메모리에 문서 쓰기 |
|
PDF 전용: PDF 딕셔너리를 다른 |
|
PDF 전용: 딕셔너리 키의 값 가져오기 |
|
PDF 전용: |
|
PDF 전용: |
|
PDF 전용: 딕셔너리 키의 값 설정 |
|
PDF 전용: |
|
PDF 전용: XML 메타데이터의 |
|
장 수 |
|
PDF 전용: 전역 위젯 글꼴 목록 |
|
문서가 닫혔나요? |
|
PDF 전용: 문서가 변경되었나요? |
|
문서가 (여전히) 암호화되어 있나요? |
|
PDF가 선형화되었나요? |
|
이것이 Form PDF인가요? |
|
이것이 PDF인가요? |
|
이것이 재배치 가능한 문서인가요? |
|
PDF 전용: 이 PDF가 열리는 동안 수리되었나요? |
|
마지막 페이지의 (chapter, pno) |
|
metadata |
|
PDF MarkInfo 값 |
|
문서의 파일 이름 |
|
데이터 액세스에 비밀번호가 필요한가요? |
|
첫 번째 Outline 항목 |
|
페이지 수 |
|
문서 액세스 권한 |
|
PDF PageMode 값 |
|
PDF PageLayout 값 |
|
PDF 버전 수 |
클래스 API
- class Document¶
- __init__(self, filename=None, stream=None, *, filetype=None, rect=None, width=0, height=0, fontsize=11)¶
Document객체를 생성합니다.기본 매개변수를 사용하면 새 빈 PDF 문서가 생성됩니다.
stream이 제공되면 문서가 메모리에서 생성됩니다.stream이None이면filename으로 지정된 파일에서 문서가 생성됩니다.
- 매개변수:
filename (str,pathlib) – 파일 경로를 포함하는 UTF-8 문자열 또는
pathlib.Path객체. 문서 타입은 항상 파일 콘텐츠에서 결정됩니다.filetype매개변수는 콘텐츠 검사가 실패한 경우를 제외하고 무시됩니다. 잘못되었거나 누락된 파일 확장자를 가진 “txt”, “html”, “xml” 등과 같은 일반 텍스트 타입의 경우가 일반적입니다.stream (bytes,bytearray,BytesIO) – 파일 데이터를 포함하는 메모리 영역. 문서 타입은 항상 데이터 콘텐츠에서 감지됩니다.
filetype매개변수는 콘텐츠 검사가 실패한 경우를 제외하고 무시됩니다. “txt”, “html”, “xml” 등과 같은 일반 텍스트 타입의 경우가 일반적입니다.filetype (str) – 문서 타입을 지정하는 문자열. 파일 콘텐츠 검사가 실패할 때만 필요합니다. “txt”, “html”, “xml” 등과 같은 텍스트 타입은 콘텐츠로 구분할 수 없습니다. 이러한 파일이 메모리에서 제공되거나 잘못된 파일 확장자로 제공되는 경우 이 매개변수를 반드시 사용해야 합니다.
rect (rect_like) – 원하는 페이지 크기를 지정하는 사각형. 이 매개변수는 전자책이나 HTML과 같은 가변 페이지 레이아웃(“재배치 가능한” 문서)이 있는 문서에만 의미가 있으며, 그렇지 않으면 무시됩니다. 지정된 경우 왼쪽 위 좌표가 (0, 0)인 비어 있지 않은 유한 사각형이어야 합니다.
fontsize매개변수와 함께 각 페이지가 그에 따라 레이아웃되므로 페이지 수도 결정됩니다.width (float) – 레이아웃 정보를 지정하기 위해
height와 함께rect의 대안으로 사용할 수 있습니다.height (float) – 레이아웃 정보를 지정하기 위해
width와 함께rect의 대안으로 사용할 수 있습니다.fontsize (float) – 재배치 가능한 문서 타입의 기본
fontsize.rect또는width및height매개변수가 지정되지 않은 경우 이 매개변수는 무시됩니다. 페이지 레이아웃을 계산하는 데 사용됩니다.
- 예외 발생:
TypeError – 매개변수의 타입 이 적합하지 않은 경우.
FileNotFoundError – 파일/경로를 찾을 수 없는 경우.
RuntimeError의 하위 클래스로 재구현됨.EmptyFileError – 파일/경로가 비어 있거나 메모리의
bytes객체 길이가 0인 경우.FileDataError및RuntimeError의 하위 클래스.ValueError – 알 수 없는 파일 타입이 명시적으로 지정된 경우.
FileDataError – 문서가 주어진 타입에 대해 유효하지 않은 구조를 가지거나 파일이 아닌 경우(예: 폴더).
RuntimeError의 하위 클래스.
- 반환:
문서 객체. 문서를 생성할 수 없으면 위 순서에서 예외가 발생합니다. PyMuPDF 전용 예외인
FileNotFoundError,EmptyFileError및FileDataError는RuntimeError를 확인하면 가로채집니다.문제가 있는 경우 내부 메시지 저장소에서 더 자세한 내용을 볼 수 있습니다:
print(pymupdf.TOOLS.mupdf_warnings())(이 호출로 비워지지만, 이를 방지할 수도 있습니다.Tools.mupdf_warnings()참조).
가능한 형식 개요, 참고:
open은 Document 의 동의어입니다:>>> # from a file >>> doc = pymupdf.open("some.xps") >>> # handle wrong extension >>> doc = pymupdf.open("some.file", filetype="xps") # assert expected type >>> doc = pymupdf.open("some.file", filetype="txt") # treat as plain text >>> >>> # from memory >>> doc = pymupdf.open(stream=mem_area) # works for any supported type >>> doc = pymupdf.open(stream=unknown-type, filetype="txt") # treat as plain text >>> >>> # new empty PDF >>> doc = pymupdf.open() >>> doc = pymupdf.open(None) >>> doc = pymupdf.open("")
참고
잘못된(하지만 지원되는) 파일 확장자를 가진 래스터 이미지는 문제가 되지 않습니다. MuPDF 는 파일 콘텐츠 가 실제로 액세스될 때 올바른 이미지 타입을 결정하고 불만 없이 처리합니다.
Document 클래스는 context manager 로도 사용할 수 있습니다. 콘텐츠 관리자를 종료하면 문서가 자동으로 닫힙니다.
>>> import pymupdf >>> with pymupdf.open(...) as doc: for page in doc: print(f"page {page.number}") page 0 page 1 page 2 page 3 >>> doc.is_closed True >>>
- get_oc(xref)¶
v1.18.4에서 새로 추가됨
이미지 또는 폼 xobject에 첨부된
OCG또는OCMD의 교차 참조 번호를 반환합니다.- 매개변수:
xref (int) – 이미지 또는 폼 xobject의
xref. 유효한 교차 참조 번호는Document.get_page_images()또는Document.get_page_xobjects()에 의해 반환됩니다. 유효하지 않은 번호의 경우 예외가 발생합니다.- 반환 형식:
int
- 반환:
선택적 콘텐츠 객체의 교차 참조 번호 또는 없는 경우 0.
- set_oc(xref, ocxref)¶
v1.18.4에서 새로 추가됨
xref가 이미지 또는 form xobject를 나타내는 경우 선택적 콘텐츠 객체의 교차 참조 번호 ocxref 를 설정하거나 제거합니다.- 매개변수:
xref (int) – 이미지 또는 form xobject의
xref[5]. 유효한 이러한 교차 참조 번호는Document.get_page_images(), 각각Document.get_page_xobjects()에서 반환됩니다. 잘못된 번호의 경우 예외가 발생합니다.ocxref (int) –
OCG/OCMD의xref번호. 0이 아니면 유효하지 않은 참조가 예외를 발생시킵니다. 0이면 모든 OC 참조가 제거됩니다.
- get_layers()¶
v1.18.3에서 새로 추가됨
선택적 레이어 구성을 표시합니다. 항상 표준 구성이 있으며, 응답에 포함되지 않습니다.
>>> for item in doc.get_layers(): print(item) {'number': 0, 'name': 'my-config', 'creator': ''} >>> # use 'number' as config identifier in add_ocg
- add_layer(name, creator=None, on=None)¶
v1.18.3에서 새로 추가됨
선택적 콘텐츠 구성을 추가합니다. 레이어는 선택적 콘텐츠 그룹의 ON/OFF 상태 모음 역할을 하며, 동일한 문서의 다른 보기 간 빠른 가시성 전환을 허용합니다.
- 매개변수:
name (str) – 임의의 이름.
creator (str) – (선택 사항) 생성 소프트웨어.
on (sequ) – 이 레이어가 활성화될 때 ON으로 설정해야 하는 OCG
xref번호 시퀀스. 여기에 나열되지 않은 모든 OCG는 OFF로 설정됩니다.
- switch_layer(number, as_default=False)¶
v1.18.3에서 새로 추가됨
선택적 레이어의 구성 번호로 정의된 문서 보기로 전환합니다. 기본값으로 설정되지 않은 경우 임시입니다.
- 매개변수:
number (int) –
Document.layer_configs()에서 반환된 구성 번호.as_default (bool) – 이것을 기본 구성으로 만듭니다.
식별된 레이어에 정의된 대로 OCG의 ON/OFF 상태를 활성화합니다.
as_default=True이면 표준 레이어를 포함한 모든 레이어가 병합되고 결과가 표준 레이어에 다시 쓰여지며, 모든 선택적 레이어가 삭제됩니다.
- add_ocg(name, config=-1, on=True, intent='View', usage='Artwork')¶
v1.18.3에서 새로 추가됨
선택적 콘텐츠 그룹을 추가합니다. OCG는 객체 가시성을 결정하는 가장 중요한 정보 단위입니다. PDF의 경우 선택적 콘텐츠를 가진 것으로 간주되려면 최소한 하나의 OCG가 있어야 합니다.
- 매개변수:
name (str) – 임의의 이름. 지원하는 PDF 뷰어에 표시됩니다.
config (int) – 레이어 구성 번호. 기본값 -1은 표준 구성입니다.
on (bool) – 이 OCG를 가리키는 객체의 표준 가시성 상태.
intent (str,list) – 가시성 의도를 선언하는 문자열 또는 문자열 목록. 선택할 수 있는 두 가지 PDF 표준 값이 있습니다: “View” 와 “Design”. 기본값은 “View” 입니다. 올바른 철자가 중요합니다.
usage (str) – OCG 가시성에 영향을 미치는 또 다른 요소. 이것은 OCG의
/Usage키의 일부가 됩니다. 선택할 수 있는 두 가지 PDF 표준 값이 있습니다: “Artwork” 와 “Technical”. 기본값은 “Artwork” 입니다. 필요한 경우에만 변경하세요.
- 반환:
생성된 OCG의
xref. 지원 객체의oc매개변수 항목으로 사용합니다.
참고
동일한 매개변수를 가진 여러 OCG가 생성될 수 있습니다. 이것은 문제를 일으키지 않습니다.
Document.save()의 Garbage 옵션 3은 모든 중복을 제거합니다.
- set_ocmd(xref=0, ocgs=None, policy='AnyOn', ve=None)¶
v1.18.4에서 새로 추가됨
OCMD, Optional Content Membership Dictionary 를 생성하거나 업데이트합니다.- 매개변수:
- 반환 형식:
int
- 반환:
OCMD의
xref. 지원 객체에서oc=xref매개변수로 사용하고, 각각Document.set_oc()또는Annot.set_oc()에서 사용합니다.
참고
OCG와 마찬가지로 OCMD는 ON 또는 OFF 가시성 상태를 가지며 OCG처럼 사용할 수 있습니다. OCG와 달리 OCMD 상태는 부울 표현식 의 특수 형식을 통해 하나 이상의 OCG 상태를 평가하여 결정됩니다. 표현식이 true로 평가되면 OCMD 상태는 ON이고, false이면 OFF입니다.
OCMD 가시성을 공식화하는 두 가지 방법이 있습니다:
ocgs 와 policy 조합 사용: policy 값은 다음과 같이 해석됩니다:
AnyOn – (기본값) 최소한 하나의 OCG가 ON이면 true.
AnyOff – 최소한 하나의 OCG가 OFF이면 true.
AllOn – 모든 OCG가 ON이면 true.
AllOff – 모든 OCG가 OFF이면 true.
두 개의 PDF 객체를 한 번에 정확히 하나씩만 표시하려는 경우(하나가 ON이면 다른 하나는 OFF여야 함):
해결책: 객체 1에 OCG 를 사용하고 객체 2에 OCMD 를 사용합니다. OCG의
xref로set_ocmd(ocgs=[xref], policy="AllOff")를 통해 OCMD를 생성합니다.가시성 표현식 ve 사용: 이것은 두 개 이상의 항목 목록입니다. 첫 번째 항목 은 논리 키워드입니다: “and”, “or”, 또는 “not” 중 하나. 두 번째 및 모든 후속 항목은 정수 또는 다른 목록이어야 합니다. 정수는 OCG의
xref번호여야 합니다. 목록은 부울 키워드 중 하나로 시작하는 최소 두 개의 항목을 다시 가져야 합니다. 이 구문은 약간 어색하지만 매우 강력합니다:
각 목록은 논리 키워드로 시작해야 합니다.
키워드가 “not” 이면 목록은 정확히 두 개의 항목을 가져야 합니다. “and” 또는 “or” 이면 임의의 수의 다른 항목이 올 수 있습니다.
논리 키워드 다음의 항목은 정수이거나 다시 목록일 수 있습니다. 정수 는 OCG의 xref여야 합니다. 목록 은 이전 규칙을 준수해야 합니다.
예제:
set_ocmd(ve=["or", 4, ["not", 5], ["and", 6, 7]]). 다음이 true이면 ON을 제공합니다: “4가 ON이거나, 5가 OFF이거나, 6과 7이 모두 ON”.set_ocmd(ve=["not", xref]). 이것은 1번에서 생성된 OCMD 예제와 동일한 효과를 가집니다.
자세한 내용과 예제는 Adobe PDF 참조 의 224페이지를 참조하세요. 또한 예제 스크립트 여기 도 확인하세요.
가시성 표현식
/VE는 PDF 사양 버전 1.6의 일부입니다. 따라서 모든 PDF 뷰어/리더가 이 기능을 지원하지 않을 수 있으며, 따라서 이러한 경우 표준 방식으로 반응할 수 있습니다.
- get_layer(config=-1)¶
v1.18.3에서 새로 추가됨
지정된 구성에서 상태별 선택적 콘텐츠 그룹 목록. 이것은
/ON,/OFF배열 또는 일부 라디오 버튼 그룹(/RBGroups)에 나타나는 OCG의 교차 참조 번호 목록을 가진 딕셔너리입니다.- 매개변수:
config (int) – 구성 레이어(기본값은 표준 구성 레이어).
>>> pprint(doc.get_layer()) {'off': [8, 9, 10], 'on': [5, 6, 7], 'rbgroups': [[7, 10]]} >>>
- set_layer(config, *, on=None, off=None, basestate=None, rbgroups=None, locked=None)¶
v1.18.3에서 새로 추가됨
v1.22.5에서 변경됨: 잠긴 OCG 목록 지원.
선택적 콘텐츠 그룹의 대량 상태 변경. OCG 상태를 영구적으로 설정합니다.
- 매개변수:
config (int) – 원하는 구성 레이어, 기본값의 경우 -1을 선택합니다.
on (list) – ON으로 설정할 OCG의
xref목록. 이전 값을 대체합니다. 빈 목록은 더 이상 OCG가 ON으로 설정되지 않도록 합니다.basestate="ON"이 사용되는 경우 지정해야 합니다.off (list) – OFF로 설정할 OCG의
xref목록. 이전 값을 대체합니다. 빈 목록은 더 이상 OCG가 OFF로 설정되지 않도록 합니다.basestate="OFF"가 사용되는 경우 지정해야 합니다.basestate (str) – on 또는 off 에 언급되지 않은 OCG의 상태. 가능한 값은 “ON”, “OFF” 또는 “Unchanged” 입니다. 대소문자 가능.
rbgroups (list) – 목록의 목록. 이전 값을 대체합니다. 각 하위 목록은 두 개 이상의 OCG xref를 포함해야 합니다. 동일한 하위 목록의 OCG는 라디오 버튼 그룹의 버튼처럼 처리됩니다: 하나를 ON으로 설정하면 다른 모든 그룹 구성원이 자동으로 OFF로 설정됩니다.
locked (list) – 사용자 인터페이스로 변경할 수 없는 OCG xref 번호 목록.
None값은 해당 PDF 배열을 변경하지 않습니다.>>> doc.set_layer(-1, basestate="OFF") # only changes the base state >>> pprint(doc.get_layer()) {'basestate': 'OFF', 'off': [8, 9, 10], 'on': [5, 6, 7], 'rbgroups': [[7, 10]]}
- get_ocgs()¶
v1.18.3에서 새로 추가됨
모든 선택적 콘텐츠 그룹의 세부 정보. 이것은 다음과 같은 딕셔너리의 딕셔너리입니다(키는 OCG의
xref):>>> pprint(doc.get_ocgs()) {13: {'on': True, 'intent': ['View', 'Design'], 'name': 'Circle', 'usage': 'Artwork'}, 14: {'on': True, 'intent': ['View', 'Design'], 'name': 'Square', 'usage': 'Artwork'}, 15: {'on': False, 'intent': ['View'], 'name': 'Square', 'usage': 'Artwork'}} >>>
- layer_ui_configs()¶
v1.18.3에서 새로 추가됨
지원하는 PDF 뷰어의 사용자 인터페이스로 수정 가능한 선택적 콘텐츠의 가시성 상태를 표시합니다.
현재 선택된 레이어 구성에 포함된 항목만 보고합니다.
- 딕셔너리 키의 의미는 다음과 같습니다:
depth:
/Order배열에서 항목의 중첩 수준locked: 사용자 인터페이스를 통해 변경할 수 없으면 true
number: 실행 시퀀스 번호
on: 항목 상태
text: 원본 OCG의 텍스트 문자열 또는 이름 필드
type: “label” (텍스트 문자열로 설정), “checkbox” (단일 OCG로 설정) 또는 “radiobox” (연결된 OCG 집합으로 설정) 중 하나
- set_layer_ui_config(number, action=0)¶
v1.18.3에서 새로 추가됨
콘텐츠 그룹의 OC 가시성 상태를 수정합니다. 이것은 지원하는 PDF 뷰어가 제공하는 것과 유사합니다.
가시성은 OCG와 함께 저장되는 속성이 아닙니다. PDF 문서에 반드시 존재하는 정보도 아닙니다. 대신, 현재 가시성은 일부 지원하는 PDF 소비자 소프트웨어의 사용자 인터페이스를 사용하여 임시로 설정됩니다. 이 메서드는 동일한 유형의 기능을 제공합니다.
영구적인 변경을 하려면
Document.set_layer()를 사용하세요.- 매개변수:
number (int,str) –
Document.layer_configs()목록의 항목 시퀀스 번호 또는 이러한 항목 중 하나의 “text”.action (int) –
PDF_OC_ON= 켜기(기본값),PDF_OC_TOGGLE= 켜기/끄기 전환,PDF_OC_OFF= 끄기.
- authenticate(password)¶
문자열 password 로 문서를 복호화합니다. 성공하면 문서 데이터에 액세스할 수 있습니다. PDF 문서의 경우 “owner” 와 “user” 는 다른 권한을 가지므로 이러한 권한 수준에 대해 다른 비밀번호가 존재할 수 있습니다. 이 메서드는 제공된 비밀번호에 대해 적절한(owner 또는 user) 액세스 권한을 자동으로 설정합니다.
- 매개변수:
password (str) – owner 또는 user 비밀번호.
- 반환 형식:
int
- 반환:
성공하면 양수 값, 그렇지 않으면 0(문자열이 두 비밀번호와 일치하지 않음). 양수이면 표시기
Document.is_encrypted가False로 설정됩니다. 양수 반환 코드는 다음 정보 세부 사항을 포함합니다:1 => 인증되었지만 PDF에 owner 또는 user 비밀번호가 없습니다.
2 => user 비밀번호로 인증되었습니다.
4 => owner 비밀번호로 인증되었습니다.
6 => 인증되었고 두 비밀번호가 동일합니다. 아마도 드문 상황입니다.
참고
문서는 owner로 보호될 수 있지만 user 비밀번호로는 보호되지 않을 수 있습니다.
doc.authenticate("") == 2를 통해 이 상황을 감지합니다. 이것은 인증 없이 문서를 열고 읽을 수 있게 하지만,Document.permissions값에 따라 다른 작업이 금지될 수 있습니다. PyMuPDF (MuPDF 와 마찬가지로) 이 경우 이러한 제한을 무시합니다. 따라서 – 모든 PDF 뷰어와 달리 – 예를 들어 해당 권한 플래그PDF_PERM_COPY,PDF_PERM_MODIFY,PDF_PERM_ANNOTATE등이 꺼져 있어도 텍스트를 추출하고 콘텐츠를 추가하거나 수정할 수 있습니다! 해당되는 경우 법적으로 준수하는 애플리케이션을 구축하는 것은 귀하의 책임입니다.
- get_page_numbers(label, only_one=False)¶
v 1.18.6에서 새로 추가됨
PDF 전용: 지정된 레이블을 가진 페이지 번호 목록을 반환합니다. 레이블이 PDF에서 고유하지 않을 수 있습니다. 이것은 레이블을 비교하기 위해 모든 페이지 번호 를 순차적으로 검색하는 것을 의미합니다.
참고
구현 세부 사항 – 이 목적을 위해 페이지는 로드되지 않습니다.
- 매개변수:
label (str) – 찾을 레이블, 예: “vii” (로마 숫자 7).
only_one (bool) – 첫 번째 일치 후 중지. 레이블링이 고유한 것으로 알려져 있거나 페이지가 많은 경우 등에 유용합니다. 기본값은 모든 페이지 번호를 확인합니다.
- 반환 형식:
list
- 반환:
이 레이블을 가진 페이지 번호 목록. 찾을 수 없거나 레이블이 정의되지 않은 경우 비어 있습니다.
- get_page_labels()¶
v1.18.7에서 새로 추가됨
PDF 전용: 페이지 레이블 정의 목록을 추출합니다. 일반적으로
Document.set_page_labels()에 전달하기 전에 수정하는 데 사용됩니다.- 반환:
Document.set_page_labels()에 정의된 대로 딕셔너리 목록.
- set_page_labels(labels)¶
v1.18.6에서 새로 추가됨
PDF 전용: PDF의 페이지 레이블 정의를 추가하거나 업데이트합니다.
- 매개변수:
labels (list) –
딕셔너리 목록. 각 딕셔너리는 레이블 빌딩 규칙과 0 기반 “시작” 페이지 번호를 정의합니다. 해당 시작 페이지는 레이블 정의가 유효한 첫 번째 페이지입니다. 각 딕셔너리는 최대 4개의 항목을 가지며
{'startpage': int, 'prefix': str, 'style': str, 'firstpagenum': int}와 같이 보이며 다음 항목을 가집니다.startpage: (int) 레이블 규칙을 적용할 첫 번째 페이지 번호(0 기반). 이 키는 반드시 있어야 합니다. 규칙은 문서 끝까지 또는 다음 더 큰 페이지 번호를 가진 규칙으로 대체될 때까지 모든 후속 페이지에 적용됩니다.prefix: (str) 레이블을 시작하는 임의의 문자열, 예: “A-”. 기본값은 “” 입니다.style: (str) 번호 매기기 스타일. 사용 가능한 것은 “D” (십진수), “r”/”R” (로마 숫자, 소문자/대문자), “a”/”A” (소문자/대문자 알파벳 번호 매기기: “a” 부터 “z” 까지, 그 다음 “aa” 부터 “zz” 까지 등). 기본값은 “” 입니다. “” 이면 번호 매기기가 수행되지 않고 해당 범위의 페이지는prefix값으로 구성된 동일한 레이블을 받습니다. prefix도 생략되면 레이블은 “” 가 됩니다.firstpagenum: (int) 이 값으로 번호 매기기를 시작합니다. 기본값은 1이며, 더 작은 값은 무시됩니다.
예를 들어:
[{'startpage': 6, 'prefix': 'A-', 'style': 'D', 'firstpagenum': 10}, {'startpage': 10, 'prefix': '', 'style': 'D', 'firstpagenum': 1}]
페이지 6, 7 등 문서 끝까지 “A-10”, “A-11”, “A-12”, “A-13”, “1”, “2”, “3”, … 레이블을 생성합니다. 페이지 0부터 5까지는 레이블이 “” 입니다.
- make_bookmark(loc)¶
v.1.17.3에서 새로 추가됨
재배치 가능한 문서에서 페이지 포인터를 반환합니다. 문서를 다시 레이아웃한 후 이 메서드의 결과를 사용하여 페이지의 새 위치를 찾을 수 있습니다.
참고
목차(TOC) 항목과 혼동하지 마세요.
- 매개변수:
loc (list,tuple) – 페이지 location. 유효한 (chapter, pno) 여야 합니다.
- 반환 형식:
pointer
- 반환:
포인터 형식의 긴 정수. 문서를 다시 레이아웃한 후 페이지의 새 위치를 찾는 데 사용됩니다. 건드리거나 재할당하지 마세요.
- find_bookmark(bookmark)¶
v.1.17.3에서 새로 추가됨
문서를 다시 레이아웃한 후 새 페이지 location을 반환합니다.
- 매개변수:
bookmark (pointer) –
Document.make_bookmark()에 의해 생성됨.- 반환 형식:
tuple
- 반환:
페이지의 새 (chapter, pno).
- chapter_page_count(chapter)¶
v.1.17.0에서 새로 추가됨
장의 페이지 수를 반환합니다.
- 매개변수:
chapter (int) – 0 기반 장 번호.
- 반환 형식:
int
- 반환:
장의 페이지 수. 장 지원이 있는 문서 타입(현재 EPUB)에만 관련됩니다.
- next_location(page_id)¶
v.1.17.0에서 새로 추가됨
다음 페이지의 location을 반환합니다.
- 매개변수:
page_id (tuple) – 현재 페이지 id. 이것은 기존 페이지를 식별하는 튜플 (chapter, pno) 여야 합니다.
- 반환:
다음 페이지의 튜플, 즉 (chapter, pno + 1) 또는 (chapter + 1, 0), 또는 인수가 마지막 페이지인 경우 빈 튜플 (). 장 지원이 있는 문서 타입(현재 EPUB)에만 관련됩니다.
- prev_location(page_id)¶
v.1.17.0에서 새로 추가됨
이전 페이지의 위치 지정자를 반환합니다.
- 매개변수:
page_id (tuple) – 현재 페이지 id. 이것은 기존 페이지를 식별하는 튜플 (chapter, pno) 여야 합니다.
- 반환:
이전 페이지의 튜플, 즉 (chapter, pno - 1) 또는 이전 장의 마지막 페이지, 또는 인수가 첫 번째 페이지인 경우 빈 튜플 (). 장 지원이 있는 문서 타입(현재 EPUB)에만 관련됩니다.
- load_page(page_id=0)¶
v1.17.0에서 변경됨: 소위 “장 구조” (EPUB 등)를 지원하는 문서 타입의 경우, 절대 페이지 번호 대신 장 번호와 상대 페이지 번호의 조합을 통해 페이지를 로드할 수도 있습니다. 이것은 큰 문서에 대해 액세스를 크게 향상시켜야 합니다.
추가 처리(렌더링, 텍스트 검색 등)를 위한 Page 객체를 생성합니다.
- 매개변수:
page_id (int,tuple) –
(v1.17.0에서 변경됨)
0 기반 페이지 번호 또는 튜플 (chapter, pno). 정수 의 경우
-∞ < page_id < page_count가 허용됩니다. page_id가 음수이면page_count가 추가됩니다. 예를 들어: 마지막 페이지를 로드하려면 doc.load_page(-1) 를 사용할 수 있습니다. 그 후 page.number = doc.page_count - 1 입니다.튜플의 경우 chapter 는
Document.chapter_count범위에 있어야 하고, pno 는 해당 장의Document.chapter_page_count()범위에 있어야 합니다. 두 값 모두 0 기반입니다. 이 표기법을 사용하면Page.number가 주어진 튜플과 같습니다. 장 지원이 있는 문서 타입(현재 EPUB)에만 관련됩니다.- 반환 형식:
참고
문서는 페이지 번호를 인덱스로 사용하는 Python 시퀀스 프로토콜도 따릅니다: doc.load_page(n) == doc[n].
절대 페이지 번호 에만 해당하는 경우, “for page in doc: …” 및 “for page in reversed(doc): …” 와 같은 표현식이 문서의 페이지를 순차적으로 생성합니다. 슬라이싱과 같이 페이지를 처리할 수 있는
Document.pages()를 참조하세요.새로운 장 기반 페이지 식별과 함께 인덱스 표기법을 사용할 수도 있습니다: page = doc[(5, 2)] 를 사용하여 여섯 번째 장의 세 번째 페이지를 로드합니다.
일관된 API를 유지하기 위해 장 구조를 지원하지 않는 문서 타입(예: PDF)의 경우
Document.chapter_count는 1이며, 튜플 (0, pno) 를 통해 페이지를 로드할 수도 있습니다. 성능 개선에 대한 설명은 이 [3] 각주를 참조하세요.- rewrite_images(dpi_threshold=None, dpi_target=0, quality=0, lossy=True, lossless=True, bitonal=True, color=True, gray=True, set_to_gray=False, options=None)¶
PDF 전용: 모든 이미지를 순회하고 지정된 매개변수에 따라 다시 작성합니다. 파일 크기 줄이기, 이미지 형식 변경 또는 색상 공간 변환에 유용합니다.
일반적인 사용법은 PDF 파일 크기를 크게 줄이기 위한 이미지의 추가 압축입니다. quality 및 dpi 매개변수를 양수 값으로 설정하고 나머지는 기본값을 사용하면 다음이 발생합니다:
손실 및 무손실 이미지는 기술적으로 가능한 한 JPEG 이미지(FZ_RECOMPRESS_JPEG)로 다시 작성됩니다.
이진(단색) 이미지는 FAX 형식(FZ_RECOMPRESS_FAX)으로 다시 작성됩니다.
서브샘플링 방법은 FZ_SUBSAMPLE_AVERAGE 입니다(아래 참조).
- 매개변수:
dpi_target (int) – 리샘플링된 이미지의 대상 DPI 값.
dpi_threshold가None이면 무시되고, 그렇지 않으면dpi_threshold보다 작고 양수여야 합니다.dpi_threshold (int) – None(기본값)이면 리샘플링이 수행되지 않습니다. 그렇지 않으면 이보다 큰 DPI 값을 가진 이미지가
dpi_target(이것은dpi_threshold보다 작아야 함)로 리샘플링됩니다.quality (int) – 원하는 대상 JPEG 품질, 0과 100 사이의 값. 0은 품질 변경 없음, 100은 최고 품질을 의미합니다.
lossy (bool) – 손실 이미지 타입 포함(예: JPEG).
lossless (bool) – 무손실 이미지 타입 포함(예: PNG).
bitonal (bool) – 흑백 이미지 포함(예: FAX).
color (bool) – 컬러 이미지 포함.
gray (bool) – 그레이스케일 이미지 포함.
set_to_gray (bool) – True이면 모든 이미지 처리 전에
Document.recolor()를 실행하여 PDF가 그레이스케일로 변환됩니다. 이것은 이미지뿐만 아니라 텍스트와 벡터 그래픽도 그레이스케일로 변경합니다.options (dict) – 이 매개변수는 전문 사용자를 위한 것입니다.
set_to_gray를 제외하고 다른 모든 매개변수는 무시됩니다. 다음 방법으로 준비된 객체여야 합니다:options = pymupdf.mupdf.PdfImageRewriterOptions(). 그런 다음 이 객체의 속성을 설정하여 세밀한 제어를 달성할 수 있습니다. 다음은options객체의 조정 가능한 속성과 기본값(아무 작업도 하지 않음)입니다.
options.bitonal_image_recompress_method = FZ_RECOMPRESS_NEVER options.bitonal_image_recompress_quality = None options.bitonal_image_subsample_method = FZ_SUBSAMPLE_AVERAGE options.bitonal_image_subsample_threshold = 0 options.bitonal_image_subsample_to = 0 options.color_lossless_image_recompress_method = FZ_RECOMPRESS_NEVER options.color_lossless_image_recompress_quality = None options.color_lossless_image_subsample_method = FZ_SUBSAMPLE_AVERAGE options.color_lossless_image_subsample_threshold = 0 options.color_lossless_image_subsample_to = 0 options.color_lossy_image_recompress_method = FZ_RECOMPRESS_NEVER options.color_lossy_image_recompress_quality = None options.color_lossy_image_subsample_method = FZ_SUBSAMPLE_AVERAGE options.color_lossy_image_subsample_threshold = 0 options.color_lossy_image_subsample_to = 0 options.gray_lossless_image_recompress_method = FZ_RECOMPRESS_NEVER options.gray_lossless_image_recompress_quality = None options.gray_lossless_image_subsample_method = FZ_SUBSAMPLE_AVERAGE options.gray_lossless_image_subsample_threshold = 0 options.gray_lossless_image_subsample_to = 0 options.gray_lossy_image_recompress_method = FZ_RECOMPRESS_NEVER options.gray_lossy_image_recompress_quality = None options.gray_lossy_image_subsample_method = FZ_SUBSAMPLE_AVERAGE options.gray_lossy_image_subsample_threshold = 0 options.gray_lossy_image_subsample_to = 0
*_recompress_method속성은 FZ_RECOMPRESS_NEVER (0), FZ_RECOMPRESS_SAME (1), FZ_RECOMPRESS_LOSSLESS (2), FZ_RECOMPRESS_JPEG (3), FZ_RECOMPRESS_J2K (4), FZ_RECOMPRESS_FAX (5) 중 하나일 수 있습니다. 값 FZ_RECOMPRESS_NEVER는 이 이미지 타입을 완전히 건너뛰고 FZ_RECOMPRESS_SAME는 타입을 변경하지 않습니다. 다른 값은 타입 변환을 실행합니다(기술적으로 가능한 한).*_quality값은 “0” 부터 “100” 까지의 정수 문자열 또는None입니다.*_subsample_method속성은 FZ_SUBSAMPLE_AVERAGE (0) 또는 FZ_SUBSAMPLE_BICUBIC (1) 이며, 서브샘플링 중 픽셀 값이 인접 픽셀에서 파생되는 방식을 나타냅니다. 배경 정보는 이 Wikipedia 기사 about bicubic interpolation 를 참조하세요.속성
*_subsample_threshold는 더 낮은 DPI를 가진 이미지를 서브샘플링에서 제외합니다. 참여하는 이미지는*_subsample_to값으로 주어진 DPI 값으로 서브샘플링됩니다. 0 값은 서브샘플링이 수행되지 않음을 의미합니다.*_subsample_threshold값은 충분한 크기 절감을 보장하기 위해*_subsample_to값보다 상당히 크게 선택해야 합니다. 결국 모든 서브샘플링은 불가피하게 품질 손실을 초래합니다.좋은 선택의 예는
threshold=100및to=72입니다.
- recolor(components=1)¶
PDF 전용: 모든 페이지의 모든 객체 타입 텍스트, 이미지 및 벡터 그래픽의 색상 구성 요소 수를 변경합니다.
- 매개변수:
components (int) – 색상 구성 요소 수로 표시되는 원하는 색상 공간: 1 = DeviceGRAY, 3 = DeviceRGB, 4 = DeviceCMYK.
일반적인 사용 사례는 PDF를 그레이스케일로 변환하는 1 (DeviceGRAY) 입니다.
- reload_page(page)¶
v1.16.10에서 새로 추가됨
PDF 전용: 모든 보류 중인 변경 사항을 완료하고 업데이트한 후 페이지의 새 복사본을 제공합니다.
- resolve_names()¶
PDF 전용: 대상 이름을 Python dict로 변환합니다.
- 반환:
다음 레이아웃을 가진 딕셔너리:
key: (str) 이름.
- value: (dict) 다음 레이아웃을 가진:
”page”: 대상 페이지 번호(0 기반). 페이지 번호를 찾을 수 없으면 -1.
”to”: (x, y) 페이지의 대상 점. 현재 PDF 좌표계를 사용하며, 즉 점 (0,0)은 페이지의 왼쪽 아래입니다.
”zoom”: (float) 확대/축소 인수.
”dest”: (str) 페이지의 대상 위치가 “/XYZ” 로 제공되지 않았거나 페이지 번호를 찾을 수 없는 경우에만 존재합니다.
예제:
{ '__bookmark_1': {'page': 0, 'to': (0.0, 541.0), 'zoom': 0.0}, '__bookmark_2': {'page': 0, 'to': (0.0, 481.45), 'zoom': 0.0}, }
또는:
{ '21154a7c20684ceb91f9c9adc3b677c40': {'page': -1, 'dest': '/XYZ 15.75 1486 0'}, ... }
카탈로그의 “/Dests” 및 “/Names/Dests” 키 아래에서 찾은 모든 이름이 포함됩니다.
v1.23.6에서 새로 추가됨
- page_cropbox(pno)¶
v1.17.7에서 새로 추가됨
PDF 전용: 회전되지 않은 페이지 사각형을 반환합니다 – 페이지를 로드하지 않고 (
Document.load_page()를 통해). 최상의 성능이 필요한 내부 목적을 위한 것입니다.- 매개변수:
pno (int) – 0-기반 페이지 번호.
- 반환:
Page.rect()와 같은 페이지의 Rect 이지만 회전은 무시합니다.
- page_xref(pno)¶
v1.17.7에서 새로 추가됨
PDF 전용: 페이지의
xref를 반환합니다 – 페이지를 로드하지 않고 (Document.load_page()를 통해). 최상의 성능이 필요한 내부 목적을 위한 것입니다.
- pages(start=None[, stop=None[, step=None]])¶
v1.16.4에서 새로 추가됨
페이지 범위에 대한 생성자. 매개변수는 내장 함수 range() 와 동일한 의미를 가집니다. “for page in doc.pages(start, stop, step): …” 형식의 표현식을 위한 것입니다.
- 매개변수:
start (int) – 이 페이지 번호로 반복을 시작합니다. 기본값은 0이며, 허용되는 값은
-∞ < start < page_count입니다. 이 값이 음수인 동안 반복을 시작하기 전에page_count가 추가됩니다.stop (int) – 이 페이지 번호에서 반복을 중지합니다. 기본값은
page_count이며, 가능한 값은-∞ < stop <= page_count입니다. 더 큰 값은 기본값으로 조용히 대체됩니다. 음수 값은 역순으로 페이지를 순환적으로 생성합니다. 내장 range() 와 마찬가지로 이것은 반환되지 않는 첫 번째 페이지입니다.step (int) – 스텝 값. start < stop 이면 기본값은 1이고 start > stop 이면 -1입니다. 0은 허용되지 않습니다.
- 반환:
문서의 페이지에 대한 생성기 반복자. 몇 가지 예:
”doc.pages()” 는 모든 페이지를 생성합니다.
”doc.pages(4, 9, 2)” 는 페이지 4, 6, 8을 생성합니다.
”doc.pages(0, None, 2)” 는 짝수 번호의 모든 페이지를 생성합니다.
”doc.pages(-2)” 는 마지막 두 페이지를 생성합니다.
”doc.pages(-1, -1)” 는 모든 페이지를 역순으로 생성합니다.
”doc.pages(-1, -10)” 는 항상 마지막 페이지부터 시작하여 역순으로 10페이지를 생성합니다. 문서가 10페이지 미만이면 반복적으로 생성합니다. 따라서 4페이지 문서의 경우 다음 페이지 번호가 생성됩니다: 3, 2, 1, 0, 3, 2, 1, 0, 3, 2, 1, 0, 3.
- convert_to_pdf(from_page=-1, to_page=-1, rotate=0)¶
현재 문서의 PDF 버전을 생성하고 메모리에 씁니다. 모든 문서 타입 이 지원됩니다. 매개변수는
insert_pdf()와 동일한 의미를 가집니다. 본질적으로 페이지 하위 집합으로 변환을 제한하고, 페이지 회전을 지정하고, 페이지 순서를 되돌릴 수 있습니다.- 매개변수:
from_page (int) – 복사할 첫 번째 페이지(0 기반). 기본값은 첫 번째 페이지입니다.
to_page (int) – 복사할 마지막 페이지(0 기반). 기본값은 마지막 페이지입니다.
rotate (int) – 회전 각도. 기본값은 0(회전 없음). 정수 n(확인되지 않음)을 사용한 n * 90 이어야 합니다.
- 반환 형식:
bytes
- 반환:
PDF 파일 이미지를 포함하는 Python bytes 객체. 내부적으로
tobytes(garbage=4, deflate=True)를 사용하여 생성됩니다.tobytes()를 참조하세요. 디스크에 직접 출력하거나 PDF로 열 수 있습니다. 다음은 몇 가지 예제입니다:>>> # convert an XPS file to PDF >>> xps = pymupdf.open("some.xps") >>> pdfbytes = xps.convert_to_pdf() >>> >>> # either do this --> >>> pdf = pymupdf.open("pdf", pdfbytes) >>> pdf.save("some.pdf") >>> >>> # or this --> >>> pdfout = open("some.pdf", "wb") >>> pdfout.tobytes(pdfbytes) >>> pdfout.close()
>>> # copy image files to PDF pages >>> # each page will have image dimensions >>> doc = pymupdf.open() # new PDF >>> imglist = [ ... image file names ...] # e.g. a directory listing >>> for img in imglist: imgdoc=pymupdf.open(img) # open image as a document pdfbytes=imgdoc.convert_to_pdf() # make a 1-page PDF of it imgpdf=pymupdf.open("pdf", pdfbytes) doc.insert_pdf(imgpdf) # insert the image PDF >>> doc.save("allmyimages.pdf")
참고
이 메서드는 mutool convert CLI와 동일한 로직을 사용합니다. 대부분의 경우 매우 잘 작동하지만, 다음 제한 사항에 주의하세요.
이미지 파일: 완벽하며 문제가 감지되지 않았습니다. 그러나 이미지 투명도는 무시됩니다. 그것이 필요한 경우(워터마크 등) 대신
Page.insert_image()를 사용하세요. 그렇지 않으면 훨씬 더 나은 성능을 위해 이 메서드를 권장합니다.XPS: 외관이 매우 좋습니다. 링크는 잘 작동하며, 개요(북마크)는 손실되지만 쉽게 복구할 수 있습니다 [2].
EPUB, CBZ, FB2: XPS와 유사합니다.
SVG: 중간. svglib 와 대략 비슷합니다.
- get_toc(simple=True)¶
문서의 개요 체인에서 목차(TOC)를 생성합니다.
- 매개변수:
simple (bool) – 간단한 TOC 또는 상세한 TOC가 필요한지 나타냅니다.
False이면 목록의 각 항목에는 각 개요 항목에 대한 linkDest 세부 정보를 가진 딕셔너리도 포함됩니다.- 반환 형식:
list
- 반환:
리스트의 리스트. 각 항목은 [lvl, title, page, dest] 형식을 가집니다. 항목의 의미는 다음과 같습니다:
lvl – 계층 수준(양수 int). 첫 번째 항목은 항상 1입니다. 연속된 항목은 같거나, 1씩 증가 하거나, 임의의 수만큼 감소 합니다.
title – 제목 (str)
page – 1 기반 소스 페이지 번호 (int). 대상이 없거나 문서 외부인 경우
-1.dest – (dict) simple=False 인 경우에만 포함됩니다. TOC 항목의 세부 정보를 다음과 같이 포함합니다:
kind: 대상 종류, 링크 대상 종류 를 참조하세요.
file: kind가
LINK_GOTOR또는LINK_LAUNCH인 경우 파일 이름.page: 대상 페이지, 0 기반,
LINK_GOTOR또는LINK_GOTO전용.to: 대상 페이지의 위치 (Point).
zoom: (float) 대상 페이지의 확대/축소 배율.
xref: 항목의
xref(PDF가 없으면 0).color: PDF RGB 형식
(red, green, blue)의 항목 색상, 또는 생략됨(PDF가 없으면 항상 생략됨).bold: 굵은 항목 텍스트이면 true 또는 생략됨. PDF 전용.
italic: 기울임꼴 항목 텍스트이면 true 또는 생략됨. PDF 전용.
collapse: 하위 항목이 접혀 있으면 true 또는 생략됨. PDF 전용.
nameddest: kind=4인 경우 대상 이름. PDF 전용. (1.23.7에서 새로 추가됨.)
- xref_get_keys(xref)¶
v1.18.7에서 새로 추가됨
PDF 전용: xref 번호로 제공된
dictionary객체의 PDF 딕셔너리 키를 반환합니다.- 매개변수:
xref (int) –
xref. (v1.18.10에서 변경됨) 특수 딕셔너리 “PDF trailer” 에 액세스하려면-1을 사용하세요.- 반환:
객체
xref에 있는 딕셔너리 키의 튜플. 예:>>> from pprint import pprint >>> import pymupdf >>> doc=pymupdf.open("pymupdf.pdf") >>> xref = doc.page_xref(0) # xref of page 0 >>> pprint(doc.xref_get_keys(xref)) # primary level keys of a page ('Type', 'Contents', 'Resources', 'MediaBox', 'Parent') >>> pprint(doc.xref_get_keys(-1)) # primary level keys of the trailer ('Type', 'Index', 'Size', 'W', 'Root', 'Info', 'ID', 'Length', 'Filter') >>>
- xref_get_key(xref, key)¶
v1.18.7에서 새로 추가됨
PDF 전용: xref로 제공된
dictionary객체의 PDF 딕셔너리 키의 타입과 값을 반환합니다.- 매개변수:
xref (int) –
xref. v1.18.10에서 변경됨: 특수 딕셔너리 “PDF trailer” 에 액세스하려면-1을 사용하세요.key (str) – 원하는 PDF 키.
Document.xref_get_keys()에 포함된 키 중 하나와 정확히 일치해야 합니다(대소문자 구분).
- 반환 형식:
tuple
- 반환:
문자열의 튜플 (type, value), 여기서 type은 “xref”, “array”, “dict”, “int”, “float”, “null”, “bool”, “name”, “string” 또는 “unknown” (발생하지 않아야 함) 중 하나입니다. “type” 과 무관하게 키의 값은 항상 문자열로 포맷됩니다. 다음 예를 참조하세요. 그리고 (거의 항상) PDF에 저장된 내용의 충실한 반영입니다. 대부분의 경우 값 문자열의 형식은 키 타입에 대한 힌트도 제공합니다:
“name” 은 항상 “/” 슬래시로 시작합니다.
“xref” 는 항상 “ 0 R” 로 끝납니다.
“array” 는 항상 “[…]” 대괄호로 둘러싸여 있습니다.
“dict” 는 항상 “<<…>>” 괄호로 둘러싸여 있습니다.
“bool” 또는 “null” 은 항상 “true”, “false” 또는 “null” 과 같습니다.
“float” 와 “int” 는 문자열 형식으로 표현되므로 항상 구별할 수 있는 것은 아닙니다.
“string” 은 UTF-8로 변환되므로 PDF에 저장된 내용과 다를 수 있습니다. 예를 들어, PDF 키 “Author” 는 파일에서 “<FEFF004A006F0072006A00200058002E0020004D0063004B00690065>” 값을 가질 수 있지만, 이 메서드는
('string', 'Jorj X. McKie')를 반환합니다.>>> for key in doc.xref_get_keys(xref): print(key, "=" , doc.xref_get_key(xref, key)) Type = ('name', '/Page') Contents = ('xref', '1297 0 R') Resources = ('xref', '1296 0 R') MediaBox = ('array', '[0 0 612 792]') Parent = ('xref', '1301 0 R') >>> # >>> # Now same thing for the PDF trailer. >>> # It has no xref, so -1 must be used instead. >>> # >>> for key in doc.xref_get_keys(-1): print(key, "=", doc.xref_get_key(-1, key)) Type = ('name', '/XRef') Index = ('array', '[0 8802]') Size = ('int', '8802') W = ('array', '[1 3 1]') Root = ('xref', '8799 0 R') Info = ('xref', '8800 0 R') ID = ('array', '[<DC9D56A6277EFFD82084E64F9441E18C><DC9D56A6277EFFD82084E64F9441E18C>]') Length = ('int', '21111') Filter = ('name', '/FlateDecode') >>>
- xref_set_key(xref, key, value)¶
v1.18.7에서 새로 추가됨, v 1.18.13에서 변경됨
v1.19.4에서 변경됨: “null” 로 설정된 경우 키를 “물리적으로” 제거합니다.
PDF 전용: xref로 제공된
dictionary객체에 대한 PDF 키의 값을 설정(추가, 업데이트, 삭제)합니다.조심
이것은 전문가용 함수입니다: 무엇을 하고 있는지 모르는 경우 PDF의 (일부)를 사용할 수 없게 만들 위험이 높습니다. 객체 사양 형식(18페이지) 및 페이지 객체와 같은 특수 딕셔너리 타입의 구조에 대해 Adobe PDF 참조 을 참조하세요.
- 매개변수:
xref (int) –
xref. v1.18.13에서 변경됨: PDF 트레일러를 업데이트하려면 -1을 지정하세요.key (str) – 원하는 PDF 키(앞의 “/” 없음). 비어 있지 않아야 합니다. 객체에 이미 있는(덮어쓰기됨) 유효한 PDF 키 또는 새 키.
"Resources/ExtGState"와 같은 PDF 경로 표기법을 사용할 수 있습니다. 이것은"/Resources"의 하위 객체로"/ExtGState"키의 값을 설정합니다.value (str) – 키의 값. 비어 있지 않은 문자열이어야 하며, 원하는 PDF 객체 타입에 따라 다음 규칙을 준수해야 합니다. 일부 구문 검사가 있지만 타입 검사는 없으며 PDF 관점에서 의미가 있는지 확인하지 않습니다. 즉, 의미론 검사는 없습니다. 대소문자가 중요합니다!
:data:`xref` – PDF의 유효한
xref번호 nnn을 사용하여"nnn 0 R"로 제공해야 합니다. PDF 애플리케이션에서 xref로 인식할 수 있도록 접미사 “0 R” 이 필요합니다.array –
"[a b c d e f]"와 같은 문자열. 대괄호가 필요합니다. 배열 항목은 최소한 하나의 공백으로 구분되어야 합니다(Python처럼 쉼표가 아님). 빈 배열"[]"가 가능하며 키 제거와 동등 합니다. 배열 항목은 딕셔너리, xref, 다른 배열 등과 같은 모든 PDF 객체일 수 있습니다. Python처럼 배열 항목은 다른 타입일 수 있습니다.dict –
"<< ... >>"와 같은 문자열. 괄호가 필요하며 유효한 PDF 딕셔너리 정의를 포함해야 합니다. 빈 딕셔너리"<<>>"가 가능하며 키 제거와 동등 합니다.int – 문자열로 포맷된 정수.
float – 문자열로 포맷된 부동소수점. 과학적 표기법(지수 포함)은 PDF에서 허용되지 않습니다.
null – 문자열
"null". 이것은 Python의None과 동등한 PDF이며 키를 무시하게 만듭니다. 그러나 반드시 제거되는 것은 아니며, 가비지 수집과 함께 저장 시 제거됩니다. v1.19.4에서 변경됨: 키가 경로 계층이 아닌 경우(즉, 슬래시 “/” 가 없음), 완전히 제거됩니다.bool – 문자열
"true"또는"false"중 하나.name – 앞에 슬래시가 있는 유효한 PDF 이름, 예:
"/PageLayout". Adobe PDF 참조 의 16페이지를 참조하세요.string – 유효한 PDF 문자열. 모든 PDF 문자열은 괄호로 둘러싸여야 합니다. 빈 문자열은
"()"로 표시합니다. 콘텐츠에 따라 가능한 괄호는ASCII 전용 텍스트의 경우 “(…)”. 예약된 PDF 문자는 백슬래시 이스케이프되어야 하며, 비ASCII 문자는 앞의 0을 포함하여 3자리 백슬래시 이스케이프된 8진수로 제공되어야 합니다. 예: 12 = 0x0C는
014로 인코딩되어야 합니다.16진수 인코딩된 텍스트의 경우 “<…>”. 모든 문자는 두 자리 16진수(소문자 또는 대문자)로 표현되어야 합니다.
의심스러운 경우
get_pdf_str()사용을 강력히 권장 합니다! 이 함수는 올바른 괄호, 이스케이프 및 전체 형식을 자동으로 생성합니다. 예를 들어 다음과 같은 변환을 수행합니다:>>> # because of the € symbol, the following yields UTF-16BE BOM >>> pymupdf.get_pdf_str("Pay in $ or €.") '<feff00500061007900200069006e002000240020006f0072002020ac002e>' >>> # escapes for brackets and non-ASCII >>> pymupdf.get_pdf_str("Prices in EUR (USD also accepted). Areas are in m².") '(Prices in EUR \\(USD also accepted\\). Areas are in m\\262.)'
- get_page_pixmap(pno: int, *, matrix: matrix_like = Identity, dpi=None, colorspace: Colorspace = csRGB, clip: rect_like = None, alpha: bool = False, annots: bool = True)¶
페이지 pno (0 기반)에서 pixmap을 생성합니다.
Page.get_pixmap()을 호출합니다.pno를 제외한 모든 매개변수는 키워드 전용 입니다.- 매개변수:
pno (int) – 페이지 번호,
-∞ < pno < page_count에서 0 기반.- 반환 형식:
- get_page_xobjects(pno)¶
v1.16.13에서 새로 추가됨
v1.18.11에서 변경됨
PDF 전용: 페이지에서 참조하는 모든 XObject 목록을 반환합니다.
- 매개변수:
pno (int) – 페이지 번호, 0 기반,
-∞ < pno < page_count.- 반환 형식:
list
- 반환:
(이미지가 아닌) XObject 목록. 이러한 객체는 일반적으로 다른 PDF에서 임베디드된 (복사되지 않은) 페이지를 나타냅니다. 예를 들어,
Page.show_pdf_page()는 이 타입의 객체를 생성합니다. 이 목록의 항목은 다음 레이아웃을 가집니다:(xref, name, invoker, bbox), 여기서:data:`xref` (int)는 XObject의
xref입니다.name (str)는 XObject를 참조하는 심볼릭 이름입니다.
invoker (int)는 호출하는 XObject의
xref이거나 페이지가 직접 호출하는 경우 0입니다.bbox (Rect)는 페이지에서 XObject 위치의 경계 상자입니다. 변환되지 않은 좌표 에 있습니다. 실제, 비회전 페이지 좌표를 얻으려면 페이지의 변환 행렬
Page.transformation_matrix와 곱하세요. v.18.11에서 변경됨: bbox는 이제 Rect 로 포맷됩니다.
- get_page_images(pno, full=False)¶
PDF 전용: 페이지에서 참조하는 모든 이미지(직접 또는 간접) 목록을 반환합니다.
- 매개변수:
pno (int) – 페이지 번호, 0 기반,
-∞ < pno < page_count.full (bool) – 참조자의
xref도 포함할지 여부(페이지인 경우 0).
- 반환 형식:
list
- 반환:
이 페이지에서 참조하는 이미지 목록. 각 항목은 다음과 같습니다:
(xref, smask, width, height, bpc, colorspace, alt_colorspace, name, filter, referencer)xref(int)는 이미지 객체 번호입니다smask(int)는 소프트 마스크 이미지의 객체 번호입니다width(int)는 이미지 너비입니다height(int)는 이미지 높이입니다bpc(int)는 구성 요소당 비트 수를 나타냅니다(일반적으로 8)colorspace(str)는 색상 공간을 명명하는 문자열(예: DeviceRGB)alt_colorspace(str)는 colorspace 값에 따라 대체 색상 공간입니다name(str)는 이미지가 참조되는 심볼릭 이름입니다filter(str)는 이미지의 디코드 필터입니다(Adobe PDF 참조, 22페이지).referencer(int)는 참조자의xref입니다. 페이지에서 직접 참조하는 경우 0입니다. full=True 인 경우에만 존재합니다.
참고
일반적으로 이것은 실제로 표시되는 이미지 목록이 아닙니다. 이 메서드는 임베디드된 이미지에 대한 참조를 수집하기 위해 여러 PDF 객체만 파싱합니다. 실제 이미지 표시 명령이 정의된 페이지의
contents를 분석하지 않습니다. 이 정보를 얻으려면Page.get_image_info()를 사용하세요. 또한 딕셔너리 출력 구조 섹션의 논의를 참조하세요.
- get_page_fonts(pno, full=False)¶
PDF 전용: 페이지 객체 정의에서 참조하는 모든 폰트(직접 또는 간접) 목록을 반환합니다.
- 매개변수:
- 반환 형식:
list
- 반환:
페이지 객체 정의에서 참조하는 폰트 목록. 각 항목은 다음과 같습니다:
(xref, ext, type, basefont, name, encoding, referencer)xref(int)는 폰트 객체 번호입니다(PDF가 내장 폰트 중 하나를 직접 사용하는 경우 0일 수 있음)ext(str)는 폰트 파일 확장자입니다(예: “ttf”, 글꼴 파일 확장자 참조)type(str)는 폰트 타입입니다(예: “Type1” 또는 “TrueType” 등)basefont(str)는 기본 폰트 이름입니다,name(str)는 폰트가 참조되는 심볼릭 이름입니다encoding(str)는 내장 인코딩과 다른 경우 폰트의 문자 인코딩입니다(Adobe PDF 참조, 254페이지):referencer(int 선택적)는 참조자의xref입니다. 페이지에서 직접 참조하는 경우 0이고, 그렇지 않으면 XObject의 xref입니다. full=True 인 경우에만 존재합니다.
예제:
>>> pprint(doc.get_page_fonts(0, full=False)) [(12, 'ttf', 'TrueType', 'FNUUTH+Calibri-Bold', 'R8', ''), (13, 'ttf', 'TrueType', 'DOKBTG+Calibri', 'R10', ''), (14, 'ttf', 'TrueType', 'NOHSJV+Calibri-Light', 'R12', ''), (15, 'ttf', 'TrueType', 'NZNDCL+CourierNewPSMT', 'R14', ''), (16, 'ttf', 'Type0', 'MNCSJY+SymbolMT', 'R17', 'Identity-H'), (17, 'cff', 'Type1', 'UAEUYH+Helvetica', 'R20', 'WinAnsiEncoding'), (18, 'ttf', 'Type0', 'ECPLRU+Calibri', 'R23', 'Identity-H'), (19, 'ttf', 'Type0', 'TONAYT+CourierNewPSMT', 'R27', 'Identity-H')]
참고
이 목록에는 중복 항목이 없습니다:
xref, name 및 referencer 의 조합이 고유합니다.일반적으로 이것은 이 페이지에서 실제로 사용 중인 폰트의 진정한 상위 집합입니다. PDF 작성자는 예를 들어 각 페이지가 부분적으로만 사용하는 전역 목록을 지정했을 수 있습니다.
Page.get_text()(각각 TextPage 메서드)의 일부 변형에서 반환하는 폰트 이름이 여기에 표시된 기본 폰트 이름과 (정확히) 같을 필요는 없습니다. 차이점의 이유는 다음과 같습니다:이 메서드는 항상 모든 서브셋 접두사(패턴
ABCDEF+)를 표시하지만, 텍스트 추출은 기본적으로 이를 수행하지 않습니다.텍스트 추출은 기본 라이브러리를 사용하여 폰트 이름에 액세스하며, 길이 제한이 31바이트이고 일반적으로 폰트 파일 바이너리를 조회하여 이름에 액세스합니다. 그러나
get_page_fonts()메서드는 PDF 정의 소스를 살펴봅니다.텍스트 추출은 PDF뿐만 아니라 지원되는 모든 문서 타입에 대해 정확히 동일한 방식으로 작동합니다. 결과적으로 PDF 특정 사항을 포함하지 않습니다.
- get_page_text(pno, output='text', flags=3, textpage=None, sort=False)¶
페이지 번호 pno (0 기반)가 주어진 페이지의 텍스트를 추출합니다.
Page.get_text()를 호출합니다.- 매개변수:
pno (int) – 페이지 번호, 0 기반,
-∞ < pno < page_count범위의 모든 값.
다른 매개변수는 페이지 메서드를 참조하세요.
- 반환 형식:
str
- layout(rect=None, width=0, height=0, fontsize=11)¶
주어진 페이지 크기와 폰트 크기를 기반으로 문서를 다시 페이지화(“리플로우”)합니다. 이것은 전자책 및 HTML과 같은 일부 문서 타입에만 영향을 줍니다. 지원되지 않으면 무시됩니다. 지원되는 문서는 속성
is_reflowable에True가 있습니다.- 매개변수:
rect (rect_like) – 원하는 페이지 크기. 유한하고 비어 있지 않으며 점 (0, 0)에서 시작해야 합니다.
width (float) –
rect의 대안으로height와 함께 사용합니다.height (float) –
rect의 대안으로width와 함께 사용합니다.fontsize (float) – 원하는 기본 폰트 크기.
- select(s)¶
PDF 전용: 목록에 있는 번호의 페이지만 유지합니다. 빈 시퀀스 또는
range(doc.page_count)범위를 벗어난 요소는 ValueError 를 발생시킵니다. 자세한 내용은 이 장 하단의 설명을 참조하세요.- 매개변수:
s (sequence) – 포함할 페이지 번호(0 기반)의 시퀀스( 에서 Python 시퀀스를 인수로 사용하기 참조). 시퀀스에 없는 페이지는 삭제(메모리에서)되며 문서를 다시 열 때까지 사용할 수 없게 됩니다. 페이지 번호는 여러 번 발생할 수 있으며 어떤 순서로든 가능합니다: 결과 문서는 지정된 대로 시퀀스를 정확히 반영합니다.
참고
시퀀스의 페이지 번호는 고유할 필요도 없고 특정 순서일 필요도 없습니다. 이것은 예를 들어 짝수 페이지만 선택하거나 홀수 페이지만 선택하거나 다른 기준을 충족하는 등 다양한 유틸리티로 메서드를 만듭니다.
기술적 수준에서 이 메서드는 항상 새로운
pagetree를 생성합니다.몇 페이지만 다룰 때는
copy_page(),move_page(),delete_page()메서드가 더 쉽게 사용할 수 있습니다. 실제로 문서에 많은 페이지가 있을 때 최소한 한 자릿수 이상 훨씬 빠릅니다.
- set_metadata(m)¶
PDF 전용: Python 딕셔너리인 m 에 지정된 대로 문서의 메타데이터를 설정하거나 업데이트합니다.
- 매개변수:
m (dict) – metadata (아래 참조)와 동일한 키를 가진 딕셔너리. 모든 키는 선택적입니다. PDF의 형식과 암호화 방법은 설정하거나 변경할 수 없으며 무시됩니다. 값에 데이터가 포함되지 않아야 하는 경우 해당 키를 지정하지 않거나 값을
None으로 설정하세요. {} 를 사용하면 모든 메타데이터 정보가 문자열 “none” 으로 지워집니다. 일부 값만 선택적으로 변경하려면 doc.metadata 의 복사본을 수정하고 인수로 사용하세요. UTF-8로 인코딩된 것으로 지정하면 임의의 유니코드 값이 가능합니다.
(v1.18.4에서 변경됨) 빈 값 또는 “none” 은 더 이상 작성되지 않고 완전히 생략됩니다.
- get_xml_metadata()¶
PDF 전용: 문서 XML 메타데이터를 가져옵니다.
- 반환 형식:
str
- 반환:
문서의 XML 메타데이터. 없거나 PDF가 아닌 경우 빈 문자열.
- set_xml_metadata(xml)¶
PDF 전용: 문서의 XML 메타데이터를 설정하거나 업데이트합니다.
- 매개변수:
xml (str) – 새 XML 메타데이터. XML 구문이어야 하지만 이 메서드는 검사를 수행하지 않으며 모든 문자열이 허용됩니다.
- set_pagelayout(value)¶
v1.22.2에서 새로 추가됨
PDF 전용:
/PageLayout을 설정합니다.- 매개변수:
value (str) – 문자열 “SinglePage”, “OneColumn”, “TwoColumnLeft”, “TwoColumnRight”, “TwoPageLeft”, “TwoPageRight” 중 하나. 소문자가 지원됩니다.
- set_pagemode(value)¶
v1.22.2에서 새로 추가됨
PDF 전용:
/PageMode를 설정합니다.- 매개변수:
value (str) – 문자열 “UseNone”, “UseOutlines”, “UseThumbs”, “FullScreen”, “UseOC”, “UseAttachments” 중 하나. 소문자가 지원됩니다.
- set_markinfo(value)¶
v1.22.2에서 새로 추가됨
PDF 전용:
/MarkInfo값을 설정합니다.- 매개변수:
value (dict) – 다음과 같은 딕셔너리:
{"Marked": False, "UserProperties": False, "Suspects": False}. 이 딕셔너리는 Tagged PDF 규칙 사용에 대한 정보를 포함합니다. 자세한 내용은 PDF 사양 을 참조하세요.
- set_toc(toc, collapse=1)¶
PDF 전용: 현재 개요 트리(목차)를 인수로 제공된 것으로 완전히 교체합니다. 성공적으로 실행한 후 새 개요 트리는
Document.get_toc()또는Document.outline을 통해 평소와 같이 액세스할 수 있습니다. 다른 출력 지향 메서드와 마찬가지로 변경 사항은save()를 통해서만 영구적으로 적용됩니다(증분 저장 지원). 내부적으로 이 메서드는 다음 두 단계로 구성됩니다. 데모는 아래 예제를 참조하세요.1단계는 기존 북마크를 모두 삭제합니다.
2단계는 toc 에 포함된 항목에서 새 TOC를 생성합니다.
- 매개변수:
toc (sequence) –
새 목차를 구성할 모든 북마크 항목 이 포함된 리스트/튜플.
get_toc()의 출력 변형이 허용됩니다. 목차를 완전히 제거하려면 빈 시퀀스 또는 None을 지정하세요. 각 항목은 다음 형식의 리스트여야 합니다.[lvl, title, page [, dest]] 여기서
lvl 은 항목의 계층 수준(int > 0)이며, 첫 번째 항목의 경우 반드시 1 이어야 하고 이전 항목보다 최대 1만큼 클 수 있습니다.
title (str)는 표시할 제목입니다. UTF-8로 인코딩된 것으로 가정됩니다(멀티바이트 코드 포인트에만 해당).
page (int)는 대상 페이지 번호입니다 (주의: 1 기반). 양수인 경우 유효한 범위에 있어야 합니다. 대상이 없거나 대상이 외부인 경우 -1로 설정하세요.
dest (선택적)는 딕셔너리 또는 숫자입니다. 숫자인 경우 이 항목이 페이지에서 가리켜야 하는 원하는 높이(포인트)로 해석됩니다. 북마크 속성을 세부적으로 제어하려면 딕셔너리를 사용하세요(
get_toc(False)의 출력과 같은 형식). 설명은Document.get_toc()를 참조하세요.
collapse (int) – (v1.16.9에서 새로 추가됨) 개요 항목이 처음에 접힌 상태로 표시되어야 하는 계층 수준을 제어합니다. 기본값 1은 따라서 레벨 1만 표시하며, 더 높은 레벨은 PDF 뷰어를 사용하여 펼쳐야 합니다. 모든 것을 펼치려면 큰 정수, 0 또는 None을 지정하세요.
- 반환 형식:
int
- 반환:
삽입된 항목 수, 각각 삭제된 항목 수.
v1.23.8에서 변경됨: 대상 ‘to’ 좌표는 이제
get_toc()에서 반환하는 것과 동일한 좌표계에 있어야 합니다(내부적으로page.cropbox와page.rotation_matrix로 변환됨). 예를 들어set_toc(get_toc())는 이제 변경되지 않은 대상 ‘to’ 좌표를 제공합니다.
- outline_xref(idx)¶
v1.17.7에서 새로 추가됨
PDF 전용: 개요 항목의
xref를 반환합니다. 주로 내부 목적으로 사용됩니다.- 매개변수:
idx (int) –
Document.get_toc()리스트의 항목 인덱스.- 반환:
xref.
- del_toc_item(idx)¶
v1.17.7에서 새로 추가됨
v1.18.14에서 변경됨: 항목의 텍스트를 더 이상 제거하지 않고 회색으로 표시합니다.
PDF 전용: 이 TOC 항목을 제거합니다. 이것은 해당 항목을 비활성화 하지만 전체 TOC 구조는 그대로 유지하는 고속 메서드입니다. 물리적으로 항목은 여전히 TOC 트리에 존재하지만 회색으로 표시되며 더 이상 어떤 대상도 가리키지 않습니다.
이것은 필요할 때
Document.set_toc_item()을 사용하여 항목을 새 대상에 재할당할 수 있음을 의미합니다.- 매개변수:
idx (int) –
Document.get_toc()리스트의 항목 인덱스.
- set_toc_item(idx, dest_dict=None, kind=None, pno=None, uri=None, title=None, to=None, filename=None, zoom=0)¶
v1.17.7에서 새로 추가됨
v1.18.6에서 변경됨
PDF 전용: 인덱스로 식별된 TOC 항목을 변경합니다. 항목의 제목, 대상, 모양 (색상, 굵게, 기울임꼴) 또는 하위 항목 접기 – 또는 항목을 완전히 제거합니다.
선택한 항목에 대해서만 특정 변경이 필요하고 전체 TOC를 교체하는 것을 피하려는 경우 이 메서드를 사용하세요. 특히 큰 목차를 다룰 때 유용합니다.
- 매개변수:
idx (int) –
Document.get_toc()로 생성된 리스트의 항목 인덱스.dest_dict (dict) – 새 대상.
doc.get_toc(False)의 항목 마지막 항목과 같은 딕셔너리. 이것을 템플릿으로 사용하는 것이 권장됩니다. 제공되면 다른 모든 매개변수는 무시됩니다 – 제목 제외.kind (int) – 링크 종류, 링크 대상 종류 참조.
LINK_NONE인 경우 나머지 모든 매개변수가 무시되고 TOC 항목이 제거됩니다 –Document.del_toc_item()과 동일. None인 경우 제목만 수정되고 나머지 매개변수는 무시됩니다. 다른 모든 값은 후속 인수를 사용하여 새 대상 딕셔너리를 만듭니다.pno (int) – 1 기반 페이지 번호, 즉 값 1 <= pno <= doc.page_count. LINK_GOTO에 필요합니다.
uri (str) – URL 텍스트. LINK_URI에 필요합니다.
title (str) – 원하는 새 제목. 변경 없으면 None.
to (point_like) – (선택적) 대상 페이지의 좌표를 가리킵니다. LINK_GOTO와 관련이 있습니다. 생략하면 페이지 상단 근처의 점이 선택됩니다.
filename (str) – LINK_GOTOR 및 LINK_LAUNCH에 필요합니다.
zoom (float) – 대상 페이지를 표시할 때 이 확대/축소 비율을 사용합니다.
사용 예: SWIG 매뉴얼의 TOC를 변경하여 다음을 달성합니다:
최상위 레벨 아래의 모든 항목을 접고 Python 지원 장을 빨간색, 굵게, 기울임꼴로 표시합니다:
>>> import pymupdf >>> doc=pymupdf.open("SWIGDocumentation.pdf") >>> toc = doc.get_toc(False) # we need the detailed TOC >>> # list of level 1 indices and their titles >>> lvl1 = [(i, item[1]) for i, item in enumerate(toc) if item[0] == 1] >>> for i, title in lvl1: d = toc[i][3] # get the destination dict d["collapse"] = True # collapse items underneath if "Python" in title: # show the 'Python' chapter d["color"] = (1, 0, 0) # in red, d["bold"] = True # bold and d["italic"] = True # italic doc.set_toc_item(i, dest_dict=d) # update this toc item >>> doc.save("NEWSWIG.pdf",garbage=3,deflate=True)
이전 예제에서 파일의 1240개 TOC 항목 중 42개만 변경했습니다.
- bake(*, annots=True, widgets=True)¶
PDF 전용: 주석 및/또는 위젯을 페이지의 영구 부분으로 변환합니다. 이 메서드로 PDF가 변경됩니다.
widgets가True인 경우 문서는 더 이상 “Form PDF”가 아닙니다.모든 페이지는 동일하게 보이지만 더 이상 주석 또는 필드를 갖지 않습니다. 표시되는 부분은 필요에 따라 표준 텍스트, 벡터 그래픽 또는 이미지로 변환됩니다.
따라서 이 메서드는
Document.convert_to_pdf()를 사용한 PDF-to-PDF 변환의 대안 이 될 수 있습니다.주석은 복잡한 객체이며 시각적 모양 “아래”에 더 많은 데이터가 포함될 수 있습니다. 예는 “Text” 및 “FileAttachment” 주석입니다. 이 메서드로 주석/위젯을 “구워 넣을” 때 모든 기본 정보(첨부 파일, 주석, 관련 PopUp 주석 등)가 손실되고 다음 가비지 수집 시 제거됩니다.
소스 페이지가 대상에서 정확히 동일하게 보여야 할 때 예를 들어
Page.show_pdf_page()(주석도 위젯도 지원하지 않음)에 이 기능을 사용하세요.- 매개변수:
annots (bool) – 주석을 변환합니다.
widgets (bool) – 필드/위젯을 변환합니다. 실행 후 문서는 더 이상 “Form PDF”가 아닙니다.
- can_save_incrementally()¶
v1.16.0에서 새로 추가됨
문서를 증분 저장할 수 있는지 확인합니다. 예외 없이 올바른 옵션을 선택하는 데 사용하세요.
- repair()¶
Repair document.
Slow for large documents.
Does nothing on non-PDF documents.
New in v1.27.0
- scrub(attached_files=True, clean_pages=True, embedded_files=True, hidden_text=True, javascript=True, metadata=True, redactions=True, redact_images=0, remove_links=True, reset_fields=True, reset_responses=True, thumbnails=True, xml_metadata=True)¶
v1.16.14에서 새로 추가됨
PDF 전용: PDF에서 잠재적으로 민감한 데이터를 제거합니다. 이 함수는 Adobe Acrobat 제품의 유사한 “Sanitize” 함수에서 영감을 받았습니다. 프로세스는 여러 옵션으로 구성할 수 있습니다.
- 매개변수:
attached_files (bool) – ‘FileAttachment’ 주석을 검색하고 파일 콘텐츠를 제거합니다.
clean_pages (bool) – 페이지 그리기 소스에서 모든 주석을 제거합니다. 이 옵션이
False로 설정되면 hidden_text 및 redactions 에 대해서도 수행됩니다.embedded_files (bool) – 임베디드 파일을 제거합니다.
hidden_text (bool) – OCR된 텍스트와 보이지 않는 텍스트를 제거합니다 [7].
javascript (bool) – JavaScript 소스를 제거합니다.
metadata (bool) – PDF 표준 메타데이터를 제거합니다.
redactions (bool) – 수정 주석을 적용합니다.
redact_images (int) – 수정을 적용할 때 이미지를 처리하는 방법. 0(무시), 1(겹침을 비움) 또는 2(제거) 중 하나.
remove_links (bool) – 모든 링크를 제거합니다.
reset_fields (bool) – 모든 양식 필드를 기본값으로 재설정합니다.
reset_responses (bool) – 모든 주석에서 모든 응답을 제거합니다.
thumbnails (bool) – 페이지에서 썸네일 이미지를 제거합니다.
xml_metadata (bool) – XML 메타데이터를 제거합니다.
- save(outfile, garbage=0, clean=False, deflate=False, deflate_images=False, deflate_fonts=False, incremental=False, ascii=False, expand=0, linear=False, pretty=False, no_new_id=False, encryption=PDF_ENCRYPT_NONE, permissions=-1, owner_pw=None, user_pw=None, use_objstms=0, compression_effort=0, raise_on_repair=False)¶
v1.18.7에서 변경됨
v1.19.0에서 변경됨
v1.24.1에서 변경됨
PDF 전용: 문서를 현재 상태 로 저장합니다.
- 매개변수:
outfile (str,Path,fp) – 저장할 파일 경로,
pathlib.Path또는 파일 객체. 파일 객체는open(...)또는io.BytesIO()를 통해 미리 생성되어야 합니다.io.BytesIO()를 선택하는 것은 아래Document.tobytes()와 유사하며, 내부적으로 생성된io.BytesIO()의getvalue()출력과 같습니다.garbage (int) –
가비지 수집을 수행합니다. 양수 값은 “incremental”을 제외합니다.
clean (bool) – 콘텐츠 스트림을 정리하고 정화합니다 [1]. “mutool clean -sc” 에 해당합니다.
deflate (bool) – 압축되지 않은 스트림을 Deflate(압축)합니다.
deflate_images (bool) – (v1.18.3에서 새로 추가됨) 압축되지 않은 이미지 스트림을 Deflate(압축)합니다 [4].
deflate_fonts (bool) – (v1.18.3에서 새로 추가됨) 압축되지 않은 폰트 파일 스트림을 Deflate(압축)합니다 [4].
incremental (bool) – PDF에 변경 사항만 저장합니다. “garbage” 및 “linear”를 제외합니다. outfile 이 문자열이거나
pathlib.Path이고Document.name과 같을 때만 사용할 수 있습니다. 복호화되거나 복구된 파일 및 일부 다른 경우에는 사용할 수 없습니다. 확인하려면Document.can_save_incrementally()를 확인하세요. 이것이 false이면 새 파일로 저장해야 합니다.ascii (bool) – 바이너리 데이터를 ASCII로 변환합니다.
expand (int) –
객체를 압축 해제합니다. 일부 다른 프로그램에서 더 잘 읽을 수 있는 버전을 생성하며 더 큰 파일로 이어집니다.
0 = 없음
1 = 이미지
2 = 폰트
255 = 모두
linear (bool) – 문서의 선형화된 버전을 저장합니다. 이 옵션은 인터넷 액세스를 위한 향상된 성능을 위한 파일 형식을 생성합니다. “incremental” 및 “use_objstms”를 제외합니다.
pretty (bool) – 가독성을 높이기 위해 문서 소스를 예쁘게 만듭니다. PDF 객체는
Document.xref_object()의 기본 출력처럼 보이도록 재포맷됩니다.no_new_id (bool) – 파일의
/ID필드 업데이트를 억제합니다. 파일에 해당 필드가 전혀 없는 경우 새 필드 생성도 억제합니다. 기본값은False이므로 모든 저장은 업데이트된 파일 식별로 이어집니다.permissions (int) – (v1.16.0에서 새로 추가됨) 원하는 권한 수준을 설정합니다. 가능한 값은 문서 권한 를 참조하세요. 기본값은 모든 권한을 부여하는 것입니다.
encryption (int) – (v1.16.0에서 새로 추가됨) 원하는 암호화 방법을 설정합니다. 가능한 값은 PDF 암호화 방법 코드 를 참조하세요.
owner_pw (str) – (v1.16.0에서 새로 추가됨) 문서의 소유자 비밀번호를 설정합니다. (v1.18.3에서 변경됨) 제공되지 않으면 사용자 비밀번호가 제공된 경우 사용됩니다. 문자열 길이는 40자를 초과할 수 없습니다.
user_pw (str) – (v1.16.0에서 새로 추가됨) 문서의 사용자 비밀번호를 설정합니다. 문자열 길이는 40자를 초과할 수 없습니다.
use_objstms (int) –
(v1.24.0에서 새로 추가됨) 적격 PDF 객체 정의를 다른 객체의
stream데이터에 저장된 정보로 변환하는 압축 옵션.deflate매개변수 값에 따라 변환된 객체 정의가 압축됩니다 – 이는 매우 큰 파일 크기 감소로 이어질 수 있습니다.경고
이 메서드는 해당 이름의 파일이 이미 존재하는지 확인하지 않으므로 확인을 요청하지 않고 파일을 덮어씁니다. 프로그래머로서 이를 처리하는 것은 귀하의 책임입니다.
compression_effort (int) –
0 for default
1 for minimum effort.
100 for maximum effort.
raise_on_repair (bool) –
(new in v1.27.0) If true we raise an exception if the save caused a repair. This is useful because repairs can cause changes to be lost.
Also see
Document.repair().
참고
파일 크기 감소
1. Use the save options like
garbage=3|4, deflate=True, use_objstms=True|1. Do not touch the default valuesexpand=False|0, clean=False|0, incremental=False|0, linear=False|0. This is a “lossless” file size reduction. There is a convenience version of this method with these values set by default,Document.ez_save()– please see below.“손실” 파일 크기 감소는 본질적으로 이미지와 관련하여 무언가를 포기해야 합니다. 예: (a) 모든 이미지 제거 (b) 이미지를 그레이스케일 버전으로 교체 (c) 이미지 해상도 감소. 예제는 PyMuPDF Utilities “replace-image” 폴더 에서 찾을 수 있습니다.
- ez_save(*args, **kwargs)¶
v1.18.11에서 새로 추가됨
PDF 전용:
Document.save()와 동일하지만 기본값이deflate=True, garbage=3, use_objstms=1로 변경되었습니다.
- saveIncr()¶
PDF 전용: 문서를 증분적으로 저장합니다.
doc.save(doc.name, incremental=True, encryption=PDF_ENCRYPT_KEEP)의 편의 약어입니다.
참고
문서에 검증된 서명이 포함되어 있는 경우 새 파일로 저장하면 무효화되므로 증분 저장이 필요할 수 있습니다.
- tobytes(garbage=0, clean=False, deflate=False, deflate_images=False, deflate_fonts=False, ascii=False, expand=0, linear=False, pretty=False, no_new_id=False, encryption=PDF_ENCRYPT_NONE, permissions=-1, owner_pw=None, user_pw=None, use_objstms=0)¶
v1.18.7에서 변경됨
v1.19.0에서 변경됨
v1.24.1에서 변경됨
PDF 전용: 문서의 현재 콘텐츠 를 파일 대신 bytes 객체에 씁니다. 명백히 메모리 요구 사항에 주의해야 합니다. 매개변수의 의미는
save()와 정확히 동일합니다. 자주 묻는 질문 장에는 이 메서드를 pdfrw 의 전처리기로 사용하는 예제가 포함되어 있습니다.(v1.16.0에서 변경됨) 확장된 암호화 지원을 위해.
- 반환 형식:
bytes
- 반환:
전체 문서를 포함하는 bytes 객체.
- search_page_for(pno, text, quads=False)¶
페이지 번호 “pno” 에서 “text” 를 검색합니다. 해당
Page.search_for()와 정확히 동일하게 작동합니다.-∞ < pno < page_count범위의 모든 정수가 허용됩니다.
- insert_pdf(docsrc, *, from_page=-1, to_page=-1, start_at=-1, rotate=-1, links=True, annots=True, widgets=True, join_duplicates=False, show_progress=0, final=1)¶
PDF 전용: PDF 문서 docsrc 의 페이지 범위 [from_page, to_page] (둘 다 포함)를 현재 문서로 복사합니다. 삽입은 페이지 번호 start_at 에서 시작합니다. 값 -1은 기본값을 나타냅니다. 이렇게 복사된 모든 페이지는 지정된 대로 회전됩니다. 링크, 주석 및 위젯은 대상에서 제외할 수 있습니다. 아래를 참조하세요. 모든 페이지 번호는 0 기반입니다.
- 매개변수:
docsrc (Document) – 현재 문서가 아니어야 하는 열린 PDF Document. 그러나 동일한 기본 파일을 참조할 수 있습니다.
from_page (int) – docsrc 의 첫 번째 페이지 번호. 기본값은 0입니다.
to_page (int) – 복사할 docsrc 의 마지막 페이지 번호. 기본값은 마지막 페이지입니다.
start_at (int) – 첫 번째로 복사된 페이지는 대상에서 페이지 번호 start_at 이 됩니다. 기본값 -1은 페이지 범위를 끝에 추가합니다. 0이면 페이지 범위가 현재 첫 번째 페이지 앞에 삽입됩니다.
rotate (int) – 복사된 모든 페이지는 제공된 값(도, 90의 정수 배수)만큼 회전됩니다.
links (bool) – (내부 및 외부) 링크를 복사본에 포함할지 선택합니다. 기본값은
True입니다. 명명된 링크(LINK_NAMED) 및 복사된 페이지 범위 외부로의 내부 링크는 항상 제외됩니다.annots (bool) – 주석을 복사본에 포함할지 선택합니다.
widgets (bool) – 주석을 복사본에 포함할지 선택합니다.
True이고 소스 페이지 중 하나 이상에 양식 필드가 포함되어 있으면 대상 PDF가 Form PDF로 전환됩니다(아직 그렇지 않은 경우).join_duplicates (bool) –
(버전 1.25.5에서 새로 추가됨) 소스 페이지에서 중복된 루트 필드 이름을 처리하는 방법을 선택합니다.
widgets=False이면 이 매개변수는 무시됩니다.기본값은
False이며, 대상에 중복이 있는 소스 루트 필드의 이름에 통합 문자열을 추가합니다. 예를 들어 “name” 이 이미 대상에 있으면 소스 위젯의 이름이 적절히 선택된 문자열 “text” 와 함께 “name [text]” 로 변경됩니다.True인 경우 소스와 대상에 중복 이름이 있는 루트 필드는 “Parent” 객체의 소위 “Kids” 로 변환됩니다(PDF 배열에 모든 자식 위젯을 나열). 이것은 효과적으로 이러한 자식을 “동일한” 위젯의 인스턴스로 만듭니다: 예를 들어 자식 중 하나가 변경되면 모든 인스턴스가 자동으로 이 변경을 상속받습니다 – 어떤 페이지에 표시되든 상관없이.show_progress (int) – (v1.17.7에서 새로 추가됨)
sys.stdout에 진행 메시지를 보려면 0보다 큰 간격 크기를 지정하세요. 각 간격 후에Inserted 30 of 47 pages.와 같은 메시지가 인쇄됩니다.final (int) – (v1.18.0에서 새로 추가됨) 이미 복사된 객체 목록을 이 메서드 후에 삭제 할지 제어합니다. 기본값
True. 동일한 소스 PDF에서 여러 삽입의 마지막 항목을 제외하고는 0으로 설정하세요. 이것은 대상 파일 크기를 절약하고 실행 속도를 크게 향상시킵니다.
참고
이것은 페이지 기반 메서드입니다. 따라서 소스 문서의 문서 수준 정보는 대부분 무시됩니다. 예로는 Optional Content, Embedded Files,
StructureElem, 목차, 페이지 레이블, 메타데이터, 명명된 대상(및 기타 명명된 항목) 등이 있습니다.from_page > to_page인 경우 페이지는 역순으로 복사됩니다.0 <= from_page == to_page인 경우 한 페이지가 복사됩니다.docsrcTOC 항목은 복사되지 않습니다. 그러나 결과 문서에 대한 목차를 복구하는 것은 쉽습니다. 아래 예제와 examples 디렉토리의 프로그램 join.py 을 참조하세요: PDF 문서를 결합하고 동시에 목차의 해당 부분을 함께 구성할 수 있습니다.
- insert_file(infile, from_page=-1, to_page=-1, start_at=-1, rotate=-1, links=True, annots=True, show_progress=0, final=1)¶
v1.22.0에서 새로 추가됨
PDF 전용: 임의의 지원되는 문서를 현재 PDF에 추가합니다. “infile” 을 문서로 열고 PDF로 변환한 다음
Document.insert_pdf()를 호출합니다. 매개변수는 해당 메서드와 동일합니다. 특히 이것은 이미지를 전체 페이지로 출력 PDF에 추가하는 쉬운 방법을 제공합니다.
- new_page(pno=-1, width=595, height=842)¶
PDF 전용: 빈 페이지를 삽입합니다.
- 매개변수:
pno (int) – 페이지를 삽입할 페이지 번호 인덱스(0 기반). 특수 값 -1 및 doc.page_count 는 마지막 페이지 뒤에 삽입합니다.
width (float) – 페이지 너비.
height (float) – 페이지 높이.
- 반환 형식:
- 반환:
생성된 페이지 객체. 삽입된 페이지 이후의 페이지 번호는 메서드 실행 후 변경됩니다. 같은 이유로 모든 기존 페이지 객체가 무효화됩니다. 사용하면 예외가 발생합니다.
- insert_page(pno, text=None, fontsize=11, width=595, height=842, fontname='helv', fontfile=None, color=None)¶
PDF 전용: 새 페이지를 삽입하고 일부 텍스트를 삽입합니다.
Document.new_page()와Page.insert_text()(일부)를 결합한 편의 함수입니다.- 매개변수:
pno (int) –
페이지를 삽입할 페이지 번호 인덱스(0 기반). 특수 값 -1 및
doc.page_count는 마지막 페이지 뒤에 삽입합니다.- v1.14.12에서 변경됨
이것은 이제 위치 매개변수입니다
다른 매개변수는 위에서 언급한 메서드를 참조하세요.
- 반환 형식:
int
- 반환:
Page.insert_text()의 결과(성공적으로 삽입된 줄 수).
- delete_page(pno=-1)¶
PDF 전용:
-∞ < pno < page_count범위의 0 기반 번호로 지정된 페이지를 삭제합니다.v1.18.14에서 변경됨: Python의
del문 지원.
- 매개변수:
pno (int) – 삭제할 페이지. 음수는 문서 끝에서 역순으로 계산합니다(인덱스와 같이). 기본값은 마지막 페이지입니다.
- delete_pages(*args, **kwds)¶
v1.18.13에서 변경됨: 삭제할 페이지 지정의 유연성 향상.
v1.18.14에서 변경됨: Python의
del문 지원.
PDF 전용: 0 기반 번호로 지정된 여러 페이지를 삭제합니다.
- 형식 1: 키워드를 사용합니다. 이전 형식을 나타냅니다. 연속된 페이지 범위가 제거됩니다.
“from_page”: 삭제할 첫 페이지. 생략하면 0입니다.
“to_page”: 삭제할 마지막 페이지. 생략하면 문서의 마지막 페이지입니다. “from_page” 보다 작아서는 안 됩니다.
형식 2: 위치 매개변수로 두 페이지 번호. 형식 1과 같이 처리됩니다.
형식 3: 하나의 위치 정수 매개변수.
Page.delete_page()와 동일합니다.형식 4: list, tuple 또는 range() 타입의 페이지 번호 하나의 위치 매개변수. 이 시퀀스의 항목은 어떤 순서든 될 수 있으며 중복을 포함할 수 있습니다.
형식 5: (v1.18.14에서 새로 추가됨) Python
del문과 인덱스/슬라이스 표기법을 사용할 수 있습니다.참고
(v1.14.17에서 변경됨, v1.17.7에서 최적화됨) 유효한 PDF 구조를 유지하기 위해 이 메서드와
delete_page()는 삭제된 페이지를 가리키는 목차 항목도 비활성화합니다. 여기서 “비활성화”는 북마크가 아무 곳도 가리키지 않고 제목이 지원 PDF 뷰어에서 회색으로 표시됨을 의미합니다. 전체 TOC 구조는 그대로 유지됩니다.삭제된 페이지를 가리키는 남은 페이지의 모든 링크 도 제거합니다. 이 작업은 많은 페이지가 있는 문서에서 응답 시간이 길어질 수 있습니다.
다음 예제는 모두 페이지 500부터 519까지 삭제합니다:
doc.delete_pages(500, 519)doc.delete_pages(from_page=500, to_page=519)doc.delete_pages((500, 501, 502, ... , 519))doc.delete_pages(range(500, 520))del doc[500:520]del doc[(500, 501, 502, ... , 519)]del doc[range(500, 520)]
Adobe PDF 참조 의 경우 위 작업은 약 0.6초가 걸립니다. 남은 1290페이지에서 잘못된 링크를 정리해야 하기 때문입니다.
일반적으로 이 메서드의 성능은 삭제된 페이지 수가 아니라 남은 페이지 수 에 따라 달라집니다: 위 예제에서 그 20개를 제외한 모든 페이지를 삭제 하면 훨씬 적은 시간이 필요합니다.
- copy_page(pno, to=-1)¶
PDF 전용: 문서 내에서 페이지 참조를 복사합니다.
- 매개변수:
pno (int) – 복사할 페이지.
0 <= pno < page_count범위에 있어야 합니다.to (int) – 복사할 페이지 앞의 페이지 번호. 기본값은 마지막 페이지 뒤에 삽입합니다.
참고
페이지 객체에 대한 새 참조 만 생성됩니다 – 새 페이지 객체가 아닙니다. 모든 복사된 페이지는
Page.xref를 포함하여 동일한 속성 값을 가집니다. 이것은 이러한 복사본 중 하나에 대한 변경 사항이 모두에 나타남을 의미합니다.
- fullcopy_page(pno, to=-1)¶
v1.14.17에서 새로 추가됨
PDF 전용: 페이지의 전체 복사본(중복)을 만듭니다.
- 매개변수:
pno (int) – 중복할 페이지.
0 <= pno < page_count범위에 있어야 합니다.to (int) – 복사할 페이지 앞의 페이지 번호. 기본값은 마지막 페이지 뒤에 삽입합니다.
참고
copy_page()와 달리 이 메서드는 원본과 독립적으로 변경할 수 있는 새 페이지 객체(새xref포함)를 생성합니다.잠재적으로 잘못된 상황을 피하기 위해 모든 Popup 및 “IRT” (“in response to”) 주석은 복사되지 않습니다.
- move_page(pno, to=-1)¶
PDF 전용: 문서 내에서 페이지를 이동합니다(복사한 다음 원본 삭제).
- 매개변수:
pno (int) – 이동할 페이지.
0 <= pno < page_count범위에 있어야 합니다.to (int) – 이동된 페이지를 삽입할 페이지 번호 앞. 기본값은 마지막 페이지 뒤로 이동합니다.
- need_appearances(value=None)¶
v1.17.4에서 새로 추가됨
PDF 전용: Form PDF의 /NeedAppearances 속성을 가져오거나 설정합니다. 인용: “(선택적) 문서의 모든 위젯 주석에 대한 appearance 스트림 및 appearance 딕셔너리를 구성할지 여부를 지정하는 플래그 … 기본값: false.” 이것은 일부 리더/뷰어의 동작을 제어하는 데 도움이 될 수 있습니다.
- 매개변수:
value (bool) – 속성을 이 값으로 설정합니다. 생략하거나
None이면 현재 값을 조회합니다.- 반환 형식:
bool
- 반환:
None: Form PDF가 아니거나 속성이 정의되지 않음.
True / False: 속성의 값(방금 설정되었거나 조회를 위해 존재함). Form PDF가 없으면 효과가 없습니다.
- get_sigflags()¶
PDF 전용: 문서에 서명 필드가 포함되어 있는지 반환합니다. 이것은 선택적 PDF 속성입니다: 없으면(반환 값 -1) 결론을 내릴 수 없습니다 – PDF 작성자가 사용하지 않았을 수 있습니다.
- 반환 형식:
int
- 반환:
-1: Form PDF가 아님 / 기록된 서명 필드 없음 / SigFlags 없음.
1: 최소한 하나의 서명 필드가 존재함.
3: 증분 업데이트와 달리 이전 콘텐츠를 변경하는 방식으로 파일이 저장(쓰기)되면 무효화될 수 있는 서명을 포함함.
- embfile_add(name, buffer, filename=None, ufilename=None, desc=None)¶
v1.14.16에서 변경됨: 위치 매개변수 “name” 및 “buffer” 의 순서가 다른 함수의 호출 패턴을 준수하도록 변경되었습니다.
PDF 전용: 새 파일을 임베드합니다. 이름을 제외한 모든 문자열 매개변수는 유니코드일 수 있습니다(이전 버전에서는 ASCII만 올바르게 작동함). 파일 콘텐츠는 압축됩니다(유익한 경우).
- 매개변수:
name (str) – 항목 식별자, 이미 존재하지 않아야 합니다.
buffer (bytes,bytearray,BytesIO) –
파일 콘텐츠.
(v1.14.13에서 변경됨) *io.BytesIO*도 이제 지원됩니다.
filename (str) – 선택적 파일 이름. 문서화 전용이며,
None이면 name 으로 설정됩니다.ufilename (str) – 선택적 유니코드 파일 이름. 문서화 전용이며,
None이면 filename 으로 설정됩니다.desc (str) – 선택적 설명. 문서화 전용이며,
None이면 name 으로 설정됩니다.
- 반환 형식:
int
- 반환:
(v1.18.13에서 변경됨) 이 메서드는 이제 삽입된 파일의
xref를 반환합니다. 또한 파일 객체는 이제 현재 날짜-시간을 기반으로 PDF 키/CreationDate및/ModDate가 자동으로 지정됩니다.
- embfile_count()¶
v1.14.16에서 변경됨: 이것은 이제 메서드입니다. 이전 버전에서는 속성이었습니다.
PDF 전용: 임베디드 파일 수를 반환합니다.
- embfile_get(item)¶
PDF 전용: 항목 번호 또는 이름으로 임베디드 파일의 콘텐츠를 검색합니다. 문서가 PDF가 아니거나 항목을 찾을 수 없으면 예외가 발생합니다.
- 매개변수:
item (int,str) – 항목의 인덱스 또는 이름. 정수는
range(embfile_count())에 있어야 합니다.- 반환 형식:
bytes
- embfile_del(item)¶
v1.14.16에서 변경됨: 항목을 인덱스로도 삭제할 수 있습니다.
PDF 전용:
/EmbeddedFiles에서 항목을 제거합니다. 항상 그렇듯이 임베디드 파일 콘텐츠의 물리적 삭제(및 파일 공간 회수)는 적절한 가비지 옵션으로 문서를 새 파일로 저장할 때만 발생합니다.- 매개변수:
item (int/str) – 항목의 인덱스 또는 이름.
경고
항목 이름을 지정할 때 이 함수는 해당 이름을 가진 첫 번째 항목만 삭제 합니다. PyMuPDF로 생성되지 않은 PDF에는 중복 이름이 포함될 수 있습니다. 따라서 적절한 예방 조치를 취하는 것이 좋습니다.
- embfile_info(item)¶
v1.18.13에서 변경됨
PDF 전용: 번호 또는 이름으로 지정된 임베디드 파일의 정보를 검색합니다.
- 매개변수:
item (int/str) – 항목의 인덱스 또는 이름. 정수는
range(embfile_count())에 있어야 합니다.- 반환 형식:
dict
- 반환:
다음 키를 가진 딕셔너리:
name– (str) 이 항목이 저장되는 이름filename– (str) 파일명ufilename– (unicode) 파일명description– (str) 설명size– (int) 원본 파일 크기length– (int) 압축된 파일 길이creationDate– (str) PDF 형식의 항목 생성 날짜-시간modDate– (str) PDF 형식의 마지막 변경 날짜-시간collection– (int) 관련 PDF 포트폴리오 항목이 있으면xref, 그렇지 않으면 0.checksum– (str) 저장된 파일 콘텐츠의 해시코드를 16진수 문자열로. PDF 사양에 따르면 MD5여야 하지만 다른 해싱 알고리즘을 볼 수 있도록 준비하세요.
- embfile_names()¶
PDF 전용: 임베디드 파일 이름 목록을 반환합니다. 이름의 순서는 문서의 물리적 순서와 같습니다.
- 반환 형식:
list
- embfile_upd(item, buffer=None, filename=None, ufilename=None, desc=None)¶
PDF 전용: 항목 번호 또는 이름으로 지정된 임베디드 파일을 변경합니다. 모든 매개변수는 선택적입니다. 기본값으로 두면 작업이 수행되지 않습니다.
- 매개변수:
item (int/str) – 항목의 인덱스 또는 이름. 정수는
range(embfile_count())에 있어야 합니다.buffer (bytes,bytearray,BytesIO) – 새 파일 콘텐츠. (v1.14.13에서 변경됨) io.BytesIO 도 이제 지원됩니다.
filename (str) – 새 파일명.
ufilename (str) – 새 유니코드 파일명.
desc (str) – 새 설명.
(v1.18.13에서 변경됨) 이 메서드는 이제 파일 객체의
xref를 반환합니다.- 반환 형식:
int
- 반환:
파일 객체의 xref. 자동으로
/ModDatePDF 키가 현재 날짜-시간으로 업데이트됩니다.
- close()¶
문서와 관련된 객체 및 공간 할당을 해제합니다. 파일에서 생성된 경우 filename 도 닫습니다(OS에 제어권 해제). 문서를 명시적으로 닫는 것은 삭제하는 것,
del doc, 또는doc = None과 같이 다른 것으로 할당하는 것과 동일합니다.
- xref_object(xref, compressed=False, ascii=False)¶
v1.16.8에서 새로 추가됨
v1.18.10에서 변경됨
PDF 전용: PDF 객체의 정의 소스를 반환합니다.
- 매개변수:
xref (int) – 객체의
xref. v1.18.10에서 변경됨:-1값은 PDF 트레일러 소스를 반환합니다.compressed (bool) – 줄 바꿈이나 공백 없이 압축된 출력을 생성할지 여부.
ascii (bool) – 바이너리 데이터를 ASCII로 인코딩할지 여부.
- 반환 형식:
str
- 반환:
객체 정의 소스.
- pdf_catalog()¶
v1.16.8에서 새로 추가됨
PDF 전용: PDF 카탈로그(또는 루트) 객체의
xref번호를 반환합니다. 해당 번호를Document.xref_object()와 함께 사용하여 소스를 확인하세요.
- pdf_trailer(compressed=False)¶
v1.16.8에서 새로 추가됨
PDF 전용: PDF의 트레일러 소스를 반환합니다. 일반적으로 PDF 파일의 끝에 있습니다. 이것은
xref인수가 -1인Document.xref_object()입니다.
- xref_stream(xref)¶
v1.16.8에서 새로 추가됨
PDF 전용:
xref스트림 객체의 압축 해제된 콘텐츠를 반환합니다.- 매개변수:
xref (int) –
xref번호.- 반환 형식:
bytes
- 반환:
객체의 (압축 해제된) 스트림.
- xref_stream_raw(xref)¶
v1.16.8에서 새로 추가됨
PDF 전용:
xref스트림 객체의 수정되지 않은 (특히 압축 해제되지 않은) 콘텐츠를 반환합니다. 그렇지 않으면Document.xref_stream()과 동일합니다.- 반환 형식:
bytes
- 반환:
객체의 (원본, 수정되지 않은) 스트림.
- update_object(xref, obj_str, page=None)¶
v1.16.8에서 새로 추가됨
PDF 전용:
xref의 객체 정의를 제공된 문자열로 교체합니다. xref는 새 것일 수도 있으며, 이 경우 이 지시문이 객체 정의를 완료합니다. 페이지 객체도 제공되면 링크와 주석이 이후에 다시 로드됩니다.
- update_stream(xref, data, new=False, compress=True)¶
v.1.16.8에서 새로 추가됨
v1.19.2에서 변경됨: 매개변수 “compress” 추가
v1.19.6에서 변경됨: 매개변수 “new” 사용 중단. 이제 객체가 PDF 딕셔너리 객체임을 확인합니다.
xref로 식별된 객체의 스트림을 교체합니다. 이것은 PDF 딕셔너리여야 합니다. 객체가stream이 아니면 하나로 변환됩니다. 함수는 유익한 경우 자동으로 압축 작업(“deflate”)을 수행합니다.- 매개변수:
xref (int) –
xref번호.stream (bytes|bytearray|BytesIO) –
스트림의 새 콘텐츠.
(v1.14.13에서 변경됨:) io.BytesIO 객체도 이제 지원됩니다.
new (bool) – 사용 중단됨 및 무시됨. v1.20.0 이후 어느 시점에 제거됩니다.
compress (bool) – 삽입된 스트림을 압축할지 여부.
True(기본값)인 경우 스트림은/FlateDecode압축을 사용하여 삽입됩니다(유익한 경우). 그렇지 않으면 스트림이 있는 그대로 삽입됩니다.
- 예외 발생:
ValueError –
xref가 PDFdict를 나타내지 않는 경우. 빈 딕셔너리<<>>가 허용됩니다. 따라서 xref를 방금 생성했고 스트림을 제공하려면 먼저doc.update_object(xref, "<<>>")를 실행한 다음 이 메서드로 스트림 데이터를 삽입하세요.
이 메서드는 주로(하지만 독점적으로는 아님) PDF 연산자 구문을 포함하는 스트림을 조작하기 위한 것입니다(예: 페이지 콘텐츠 스트림의 경우 Adobe PDF 참조 643페이지 참조).
콘텐츠 스트림을 업데이트하는 경우 PDF 연산자 소스와 객체 구조 간의 일관성을 보장하기 위해 저장 매개변수 clean=True 를 사용하는 것을 고려하세요.
예: 특정 이미지가 더 이상 페이지에 나타나지 않기를 원한다고 가정합니다. 이것은 콘텐츠 소스에서 해당 참조를 삭제하여 달성할 수 있습니다 – 실제로: 페이지를 다시 로드한 후 이미지는 사라집니다. 하지만 페이지의
resources객체는 여전히 이미지가 페이지에서 참조되는 것으로 표시됩니다. 이 저장 옵션은 이러한 불일치를 정리합니다.
- xref_copy(source, target, *, keep=None)¶
v1.19.5에서 새로 추가됨
PDF 전용:
targetxref를source의 정확한 복사본으로 만듭니다.source가stream인 경우 이 데이터도 복사됩니다.- 매개변수:
source (int) – 소스
xref. 기존 딕셔너리 객체여야 합니다.target (int) – 대상 xref. 기존 딕셔너리 객체여야 합니다. xref가 방금 생성된 경우 최소 사양
<<>>로 PDF 딕셔너리로 초기화해야 합니다.keep (list) – 복사 프로세스 준비에서 제거되지 않아야 하는
target의 최상위 키 선택적 목록.
참고
이 메서드는 Python의 dict 메서드
copy()와 많은 공통점이 있습니다.두 xref 번호 모두 기존 딕셔너리를 나타내야 합니다.
source 에서 데이터가 복사되기 전에 모든 target 딕셔너리 키가 삭제됩니다.
keep목록에서 예외를 지정할 수 있습니다. 그러나 source 에 동일한 이름의 키가 있으면 해당 값이 여전히 대상을 교체합니다.source가stream객체인 경우 이 데이터도 복사되고target은 스트림 객체로 변환됩니다.일반적인 사용 사례는 수정 주석을 사용하지 않고 기존 이미지를 교체하거나 제거하는 것입니다. 예제 스크립트는 이 PyMuPDF Utilities 예제 에서 볼 수 있습니다.
- extract_image(xref)¶
PDF 전용: 문서에 저장된 이미지의 데이터 및 메타 정보를 추출합니다. 출력은 이미지 파일로 저장하거나 PIL, Pixmap 생성 등의 입력으로 직접 사용할 수 있습니다. 이 메서드는 가능한 한 pixmap 사용을 피하여 원본 형식(예: JPEG)으로 이미지를 표시합니다.
- 매개변수:
xref (int) – 이미지 객체의
xref. 이것이range(1, doc.xref_length())에 없거나 객체가 이미지가 아니거나 다른 오류가 발생하면None이 반환되고 예외가 발생하지 않습니다.- 반환 형식:
dict
- 반환:
다음 키를 가진 딕셔너리
ext (str) 이미지 타입(예: ‘jpeg’), 이미지 파일 확장자로 사용 가능
smask (int) 스텐실(/SMask) 이미지의
xref번호 또는 0width(int) 이미지 너비height(int) 이미지 높이colorspace (int) 이미지의 colorspace.n 번호.
cs-name (str) the image’s colorspace.name.
xres (int) resolution in x direction. Please also see
resolution.yres (int) resolution in y direction. Please also see
resolution.image (bytes) 이미지 파일 콘텐츠로 사용 가능한 이미지 데이터
>>> d = doc.extract_image(1373) >>> d {'ext': 'png', 'smask': 2934, 'width': 5, 'height': 629, 'colorspace': 3, 'xres': 96, 'yres': 96, 'cs-name': 'DeviceRGB', 'image': b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x05\ ...'} >>> imgout = open(f"image.{d['ext']}", "wb") >>> imgout.write(d["image"]) 102 >>> imgout.close()
참고
pix = pymupdf.Pixmap(doc, xref) 다음에 pix.tobytes() 를 사용하는 것과 기능적으로 겹칩니다. 주요 차이점은 extract_image가 (1) 항상 PNG 이미지 형식을 제공하지 않으며, (2) 비 PNG 이미지에서 매우 빠르고, (3) 추출된 이미지에 대해 일반적으로 훨씬 적은 디스크 저장 공간을 사용하며, (4) 오류 경우에
None을 반환한다는 것입니다(예외를 생성하지 않음). 동일한 PDF 내의 다음 예제 이미지를 참조하세요.xref 1268은 PNG입니다 – 비교 가능한 실행 시간 및 동일한 출력:
In [23]: %timeit pix = pymupdf.Pixmap(doc, 1268);pix.tobytes() 10.8 ms ± 52.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) In [24]: len(pix.tobytes()) Out[24]: 21462 In [25]: %timeit img = doc.extract_image(1268) 10.8 ms ± 86 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) In [26]: len(img["image"]) Out[26]: 21462
xref 1186은 JPEG입니다 –
Document.extract_image()는 여러 배 빠르며 훨씬 작은 출력을 생성합니다(2.48 MB vs. 0.35 MB):In [27]: %timeit pix = pymupdf.Pixmap(doc, 1186);pix.tobytes() 341 ms ± 2.86 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) In [28]: len(pix.tobytes()) Out[28]: 2599433 In [29]: %timeit img = doc.extract_image(1186) 15.7 µs ± 116 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each) In [30]: len(img["image"]) Out[30]: 371177
- extract_font(xref, info_only=False, named=None)¶
v1.19.4에서 변경됨:
named == True이면 딕셔너리를 반환합니다.
PDF 전용: 임베디드 폰트 파일의 데이터와 적절한 파일 확장자를 반환합니다. 이것은 폰트를 외부 파일로 저장하는 데 사용할 수 있습니다. 이 메서드는 예외를 발생시키지 않습니다(PDF 및 유효한
xref확인을 통한 경우 제외).- 매개변수:
xref (int) – 추출할 폰트의 PDF 객체 번호.
info_only (bool) – 버퍼가 아닌 폰트 정보만 반환합니다. 정보 전용 목적으로 사용되며, 큰 버퍼 영역 할당을 피합니다.
named (bool) – true인 경우 다음 키를 가진 딕셔너리가 반환됩니다: ‘name’(폰트 기본 이름), ‘ext’(폰트 파일 확장자), ‘type’(폰트 타입), ‘content’(폰트 파일 내용).
- 반환 형식:
tuple,dict
- 반환:
튜플
(basename, ext, type, content)로, 여기서 ext 는 3바이트 제안 파일 확장자(str), basename 는 폰트 이름(str), type 는 폰트 타입(예: “Type1”), content 는 폰트 파일 내용(또는 b””)을 포함하는 bytes 객체입니다. 가능한 확장자 값과 의미는 글꼴 파일 확장자 를 참조하세요. 오류 시 반환 세부 사항:("", "", "", b"")– 유효하지 않은 xref 또는 xref가 (유효한) 폰트 객체가 아님.(basename, "n/a", "Type1", b"")– basename 이 임베디드되지 않아 추출할 수 없음. 예를 들어 PDF Base 14 글꼴 및 Type 3 폰트의 경우입니다.
예제:
>>> # store font as an external file >>> name, ext, _, content = doc.extract_font(4711) >>> # assuming content is not None: >>> ofile = open(name + "." + ext, "wb") >>> ofile.write(content) >>> ofile.close()
경고
basename은 PDF에서 변경되지 않은 채로 반환됩니다. 따라서 운영 체제의 파일명으로 사용하기에 부적합한 문자(예: 공백)가 포함될 수 있습니다. 적절한 조치를 취하세요.
참고
반환된 basename 은 일반적으로 원본 파일 이름이 아니지만 일부 유사성이 있을 수 있습니다.
매개변수
named == True인 경우 다음 키를 가진 딕셔너리가 반환됩니다:{'name': 'T1', 'ext': 'n/a', 'type': 'Type3', 'content': b''}.
- has_links()¶
- has_annots()¶
v1.18.7에서 새로 추가됨
PDF 전용: 문서 어디에든 링크 또는 주석이 있는지 확인합니다.
- 반환:
True/False. PDF 문서의 중앙 위치에 저장되는 필드와 달리, 링크/주석의 존재는 각 페이지를 구문 분석해야만 감지할 수 있습니다. 이 메서드들은 이를 효율적으로 수행하도록 조정되었으며, 페이지에 대한 답변이True이면 즉시 반환합니다. 그러나 수천 페이지가 있는 PDF의 경우, 링크 또는 주석이 발견되지 않으면 답변에 시간이 걸릴 수 있습니다 [6].
- subset_fonts(verbose=False, fallback=False)¶
PDF 전용: 문서의 텍스트에서 사용되는 적격 폰트를 조사합니다. 폰트가 지원되고 크기 축소가 가능한 경우, 해당 폰트는 문자 서브셋을 가진 버전으로 대체됩니다.
문서를 저장하기 직전에 이 메서드를 사용하세요.
- 매개변수:
verbose (bool) – 다양한 진행 정보를 sysout에 기록합니다. 현재는
fallback이True인 경우에만 효과가 있습니다.fallback (bool) –
True인 경우 패키지 fontTools 를 사용하는 더 이상 사용되지 않는 알고리즘을 사용합니다(따라서 설치되어 있어야 함). 권장 값False(기본값)를 사용하는 경우 MuPDF의 네이티브 함수가 사용됩니다 – 이것은 훨씬 빠르며 더 넓은 범위의 폰트 타입을 서브셋할 수 있습니다. 이 경우 fontTools 패키지가 필요하지 않습니다.
아시아 스크립트에 일반적인 것처럼 큰 폰트를 사용하여 새 PDF를 생성할 때 가장 큰 이점을 얻을 수 있습니다. Story 클래스 또는
Page.insert_htmlbox()메서드를 사용할 때 여러 폰트가 자동으로 포함될 수 있습니다 – 프로그래머가 인지하지 못한 채로.이러한 모든 경우에서 실제로 사용되는 유니코드 집합은 사용된 폰트에서 사용 가능한 글리프 수에 비해 대부분 매우 작습니다. 이 메서드를 사용하면 임베디드 폰트 바이너리를 두 자릿수 크기로 쉽게 줄일 수 있습니다 – 수 메가바이트에서 낮은 두 자릿수 킬로바이트 양으로.
폰트 서브셋을 만들면 많은 수의 큰, 이제 사용되지 않는 PDF 객체(“고스트”)가 남습니다. 따라서 파일을 저장할 때 압축 및 가비지 수집을 수행하세요.
Document.ez_save()사용을 권장합니다.Show/hide history
v1.18.7에서 새로 추가됨
v1.18.9에서 변경됨
v1.24.2에서 변경됨: MuPDF의 네이티브 함수 사용.
- journal_enable()¶
v1.19.0에서 새로 추가됨
PDF 전용: 저널링을 활성화합니다. 로깅 작업을 시작하기 전에 이것을 사용하세요.
- journal_start_op(name)¶
v1.19.0에서 새로 추가됨
PDF 전용: 문자열 “name” 으로 식별되는 “작업” 의 저널링을 시작합니다. 작업이 시작되지 않으면 저널이 활성화된 PDF에 대한 업데이트가 실패합니다.
- journal_stop_op()¶
v1.19.0에서 새로 추가됨
PDF 전용: 현재 작업을 중지합니다. 작업의 시작과 중지 사이의 업데이트는 동일한 작업 단위에 속하며 함께 실행 취소/다시 실행됩니다.
- journal_position()¶
v1.19.0에서 새로 추가됨
PDF 전용: 현재 작업 번호와 총 작업 수를 반환합니다.
- 반환:
현재 작업 번호와 저널의 총 작업 수를 포함하는 튜플
(step, steps). step 이 0이면 저널의 맨 위에 있습니다. step 이 steps 와 같으면 맨 아래에 있습니다. 실행 취소 또는 다시 실행 이외의 것으로 PDF를 업데이트하면 현재 항목 이후의 모든 저널 항목이 자동으로 제거되고 새 업데이트가 저널의 새 마지막 항목이 됩니다. 제거된 저널 항목에 해당하는 업데이트는 영구적으로 손실됩니다.
- journal_op_name(step)¶
v1.19.0에서 새로 추가됨
PDF 전용: 작업 번호 step. 의 이름을 반환합니다.
- journal_can_do()¶
v1.19.0에서 새로 추가됨
PDF 전용: 현재 저널 위치에서 앞으로(“redo”) 및/또는 뒤로(“undo”) 실행이 가능한지 표시합니다.
- 반환:
딕셔너리
{"undo": bool, "redo": bool}. 해당 메서드는 값이True인 경우 사용할 수 있습니다.
- journal_undo()¶
v1.19.0에서 새로 추가됨
PDF 전용: 저널의 현재 단계를 되돌립니다(실행 취소). 이것은 저널의 맨 위로 이동합니다.
- journal_redo()¶
v1.19.0에서 새로 추가됨
PDF 전용: 저널의 현재 단계를 다시 적용합니다(다시 실행). 이것은 저널의 맨 아래로 이동합니다.
- journal_save(filename)¶
v1.19.0에서 새로 추가됨
PDF 전용: 저널을 파일로 저장합니다.
- 매개변수:
filename (str,fp) – 문자열로 된 파일명 또는 “wb” 로 열린 파일 객체(또는
io.BytesIO()객체).
- journal_load(filename)¶
v1.19.0에서 새로 추가됨
PDF 전용: 파일에서 저널을 로드합니다. 문서에 대한 저널링을 활성화합니다. 저널링이 이미 활성화된 경우 예외가 발생합니다.
- 매개변수:
filename (str,fp) – 저널의 파일명(str) 또는 “rb” 로 열린 파일 객체(또는
io.BytesIO()객체).
- save_snapshot()¶
v1.19.0에서 새로 추가됨
PDF 전용: 문서의 “스냅샷”을 저장합니다. 이것은 저널링과 호환되는 특수한 증분 저장 형식의 PDF 문서입니다 – 따라서 저장 옵션을 사용할 수 없습니다. 새 문서의 경우 스냅샷 저장이 불가능합니다.
이것은 사용 제한이 전혀 없는 일반 PDF 문서입니다. 어떤 방식으로도 변경되지 않는 경우 저널과 함께 사용하여 작업을 실행 취소/다시 실행하거나 업데이트를 계속할 수 있습니다.
- outline¶
문서의 첫 번째 Outline 항목(또는
None)을 포함합니다. 모든 개요 항목을 순회하는 시작점으로 사용할 수 있습니다. 암호화되었지만 인증되지 않은 문서에 대해 이 속성에 액세스하면 AttributeError 가 발생합니다.- 타입:
- is_closed¶
문서가 여전히 열려 있으면
False. 닫히면 대부분의 다른 속성과 메서드가 삭제/비활성화됩니다. 또한 이 문서를 참조하는 Page 객체(즉,Document.load_page()로 생성된)와 종속 객체는 더 이상 사용할 수 없습니다. 참조 목적으로Document.name은 여전히 존재하며 원본 문서의 파일명을 포함합니다(해당하는 경우).- 타입:
bool
- is_dirty¶
이것이 PDF 문서이고 저장되지 않은 변경 사항이 포함되어 있으면
True, 그렇지 않으면False.- 타입:
bool
- is_pdf¶
이것이 PDF 문서이면
True, 그렇지 않으면False.- 타입:
bool
- is_form_pdf¶
이것이 PDF가 아니거나 양식 필드가 없으면
False, 그렇지 않으면 루트 양식 필드 수(조상이 없는 필드).(v1.16.4에서 변경됨) (루트) 양식 필드의 총 수를 반환합니다.
- 타입:
bool,int
- is_reflowable¶
문서에 가변 페이지 레이아웃(예: 전자책 또는 HTML)이 있으면
True. 이 경우 문서 생성(열기) 중 또는 메서드layout()을 통해 원하는 페이지 크기를 설정할 수 있습니다.- 타입:
bool
- is_repaired¶
v1.18.2에서 새로 추가됨
PDF가 열기 중에 복구되었으면(주요 구조 문제로 인해)
True. 비PDF 문서의 경우 항상False. true인 경우TOOLS.mupdf_warnings()에 더 자세한 정보가 저장되며Document.can_save_incrementally()는False를 반환합니다.- 타입:
bool
- is_fast_webaccess¶
v1.22.2에서 새로 추가됨
PDF가 선형화 형식이면
True. 비PDF 문서의 경우False.- 타입:
bool
- markinfo¶
v1.22.2에서 새로 추가됨
/MarkInfo값을 나타내는 딕셔너리. 지정되지 않으면 빈 딕셔너리가 반환됩니다. PDF가 아니면None이 반환됩니다.- 타입:
dict
- pagemode¶
v1.22.2에서 새로 추가됨
/PageMode값을 포함하는 문자열. 지정되지 않으면 기본값 “UseNone” 이 반환됩니다. PDF가 아니면None이 반환됩니다.- 타입:
str
- pagelayout¶
v1.22.2에서 새로 추가됨
/PageLayout값을 포함하는 문자열. 지정되지 않으면 기본값 “SinglePage” 가 반환됩니다. PDF가 아니면None이 반환됩니다.- 타입:
str
- version_count¶
v1.22.2에서 새로 추가됨
문서에 있는 버전 수를 계산하는 정수. PDF가 아니면 0, 그렇지 않으면 증분 저장 수에 1을 더한 값.
- 타입:
int
- needs_pass¶
문서가 액세스에 대해 비밀번호로 보호되는지 여부를 나타냅니다. 이 표시기는 변경되지 않습니다 – 문서가 인증된 후에도. true이면 증분 저장을 제외합니다.
- 타입:
bool
- is_encrypted¶
이 표시기는 처음에
Document.needs_pass와 같습니다. 성공적인 인증 후 상황을 반영하도록False로 설정됩니다.- 타입:
bool
- permissions¶
v1.16.0에서 변경됨: 이것은 이제 비트 표시기로 구성된 정수입니다. 이전에는 딕셔너리였습니다.
문서 액세스 권한을 포함합니다. 이것은 각 비트 위치에 bool 값을 포함하는 정수입니다. 예를 들어 doc.permissions & pymupdf.PDF_PERM_MODIFY > 0 이면 문서를 변경할 수 있습니다. 자세한 내용은 문서 권한 를 참조하세요.
- 타입:
int
- metadata¶
Python 딕셔너리 또는
None(만약 is_encrypted=True 및 needPass=True 인 경우)로 문서의 메타 데이터를 포함합니다. 키는 format, encryption, title, author, subject, keywords, creator, producer, creationDate, modDate, trapped 입니다. 모든 항목 값은 문자열 또는None입니다.format 및 encryption 을 제외하고, PDF 문서의 경우 키 이름은 PDF 키 /Creator, /Producer, /CreationDate, /ModDate, /Title, /Author, /Subject, /Trapped 및 /Keywords 와 각각 명확하게 대응합니다.
format 는 문서 형식을 포함합니다(예: ‘PDF-1.6’, ‘XPS’, ‘EPUB’).
encryption 는
None(암호화 없음) 또는 암호화 방법을 명명하는 문자열(예: ‘Standard V4 R4 128-bit RC4’)을 포함합니다. needs_pass=False 인 경우에도 암호화 방법이 지정될 수 있습니다. 이러한 경우 모든 권한이 부여되지 않았을 수 있습니다. 자세한 내용은Document.permissions를 확인하세요.날짜 필드에 유효한 데이터가 포함되어 있으면(항상 그런 것은 아님!), PDF 특정 타임스탬프 형식 “D:<TS><TZ>” 의 문자열입니다. 여기서
<TS> 는 12자 ISO 타임스탬프 YYYYMMDDhhmmss (YYYY - 연도, MM - 월, DD - 일, hh - 시, mm - 분, ss - 초)이며,
<TZ> 는 부호(‘+’ 또는 ‘-‘), 시간(hh), 분(‘mm’, 아포스트로피 주의!)을 포함하는 시간대 값(GMT 기준 시간 간격)입니다.
파라과이 값은 따라서 D:20150415131602-04’00’ 와 같이 보일 수 있으며, 이것은 2015년 4월 15일 오후 1:16:02 아순시온 현지 시간의 타임스탬프에 해당합니다.
- 타입:
dict
- name¶
Document 가 생성된 filename 또는 filetype 값을 포함합니다.
- 타입:
str
- page_count¶
문서의 페이지 수를 포함합니다. 페이지가 없는 문서의 경우 0을 반환할 수 있습니다. 함수
len(doc)도 이 결과를 제공합니다.- 타입:
int
- chapter_count¶
v1.17.0에서 새로 추가됨
문서의 장 수를 포함합니다. 항상 최소 1입니다. 장 지원이 있는 문서 타입(현재 EPUB)에만 관련이 있습니다. 다른 문서는 1을 반환합니다.
- 타입:
int
- last_location¶
v1.17.0에서 새로 추가됨
문서의 마지막 페이지의 (chapter, pno)를 포함합니다. 장 지원이 있는 문서 타입(현재 EPUB)에만 관련이 있습니다. 다른 문서는
(0, page_count - 1)을 반환하고 페이지가 없으면(0, -1)을 반환합니다.- 타입:
int
- FormFonts¶
/AcroForm 객체에 정의된 양식 필드 폰트 이름 목록. PDF가 아니면
None.- 타입:
list
참고
PDF 구조를 변경하는 메서드(insert_pdf(), select(), copy_page(), delete_page() 등)의 경우 프로그램의 객체나 속성이 무효화되거나 고아가 되었을 수 있습니다. 예는 Page 객체와 그 자식(링크, 주석, 위젯), 이전 페이지 수를 보유하는 변수, 목차 등입니다. 이러한 변수를 최신 상태로 유지하거나 고아 객체를 삭제하세요. 또한 에서 중요한 객체의 일관성 보장 를 참조하세요.
set_metadata() 예제¶
메타데이터 정보를 지웁니다. 개인정보/데이터 보호 우려로 이 작업을 수행하는 경우 garbage > 0 로 문서를 새 파일로 저장하세요. 그때만 이전 /Info 객체도 파일에서 물리적으로 제거됩니다. 이 경우 여러 PDF 편집기에서 삽입한 XML 메타데이터도 지우는 것이 좋습니다:
>>> import pymupdf
>>> doc=pymupdf.open("pymupdf.pdf")
>>> doc.metadata # look at what we currently have
{'producer': 'rst2pdf, reportlab', 'format': 'PDF 1.4', 'encryption': None, 'author':
'Jorj X. McKie', 'modDate': "D:20160611145816-04'00'", 'keywords': 'PDF, XPS, EPUB, CBZ',
'title': 'The PyMuPDF Documentation', 'creationDate': "D:20160611145816-04'00'",
'creator': 'sphinx', 'subject': 'PyMuPDF 1.9.1'}
>>> doc.set_metadata({}) # clear all fields
>>> doc.metadata # look again to show what happened
{'producer': 'none', 'format': 'PDF 1.4', 'encryption': None, 'author': 'none',
'modDate': 'none', 'keywords': 'none', 'title': 'none', 'creationDate': 'none',
'creator': 'none', 'subject': 'none'}
>>> doc.del_xml_metadata() # clear any XML metadata
>>> doc.save("anonymous.pdf", garbage = 4) # save anonymized doc
set_toc() 데모¶
이것은 목차를 수정하거나 추가하는 방법을 보여줍니다. 예제 디렉토리의 import.py 및 export.py 도 참조하세요.
>>> import pymupdf
>>> doc = pymupdf.open("test.pdf")
>>> toc = doc.get_toc()
>>> for t in toc: print(t) # show what we have
[1, 'The PyMuPDF Documentation', 1]
[2, 'Introduction', 1]
[3, 'Note on the Name fitz', 1]
[3, 'License', 1]
>>> toc[1][1] += " modified by set_toc" # modify something
>>> doc.set_toc(toc) # replace outline tree
3 # number of bookmarks inserted
>>> for t in doc.get_toc(): print(t) # demonstrate it worked
[1, 'The PyMuPDF Documentation', 1]
[2, 'Introduction modified by set_toc', 1] # <<< this has changed
[3, 'Note on the Name fitz', 1]
[3, 'License', 1]
insert_pdf() 예제¶
(1) TOC를 포함하여 두 문서를 연결합니다:
>>> doc1 = pymupdf.open("file1.pdf") # must be a PDF
>>> doc2 = pymupdf.open("file2.pdf") # must be a PDF
>>> pages1 = len(doc1) # save doc1's page count
>>> toc1 = doc1.get_toc(False) # save TOC 1
>>> toc2 = doc2.get_toc(False) # save TOC 2
>>> doc1.insert_pdf(doc2) # doc2 at end of doc1
>>> for t in toc2: # increase toc2 page numbers
t[2] += pages1 # by old len(doc1)
>>> doc1.set_toc(toc1 + toc2) # now result has total TOC
명백히, 더 일반적인 상황에서도 유사한 방법을 찾을 수 있습니다. 연속된 계층 수준이 1보다 많이 증가하지 않도록 하세요. toc2 세그먼트 앞뒤에 더미 북마크를 삽입하면 이러한 경우를 해결할 수 있습니다. 바로 사용할 수 있는 GUI(wxPython) 솔루션은 예제 디렉토리의 스크립트 join.py 에서 찾을 수 있습니다.
(2) 추가 예제:
>>> # insert 5 pages of doc2, where its page 21 becomes page 15 in doc1
>>> doc1.insert_pdf(doc2, from_page=21, to_page=25, start_at=15)
>>> # same example, but pages are rotated and copied in reverse order
>>> doc1.insert_pdf(doc2, from_page=25, to_page=21, start_at=15, rotate=90)
>>> # put copied pages in front of doc1
>>> doc1.insert_pdf(doc2, from_page=21, to_page=25, start_at=0)
기타 예제¶
PDF의 모든 페이지 참조 이미지를 별도의 PNG 파일로 추출합니다:
for i in range(doc.page_count):
imglist = doc.get_page_images(i)
for img in imglist:
xref = img[0] # xref number
pix = pymupdf.Pixmap(doc, xref) # make pixmap from image
if pix.n - pix.alpha < 4: # can be saved as PNG
pix.save(f"p{i}-{xref}.png")
else: # CMYK: must convert first
pix0 = pymupdf.Pixmap(pymupdf.csRGB, pix)
pix0.save(f"p{i}-{xref}.png")
pix0 = None # free Pixmap resources
pix = None # free Pixmap resources
PDF의 모든 페이지를 회전합니다:
>>> for page in doc: page.set_rotation(90)
각주
