용어집¶
- matrix_like¶
6개의 숫자로 구성된 Python 시퀀스입니다.
- rect_like¶
4개의 숫자로 구성된 Python 시퀀스입니다.
- irect_like¶
4개의 정수로 구성된 Python 시퀀스입니다.
- point_like¶
2개의 숫자로 구성된 Python 시퀀스입니다.
- quad_like¶
4개의
point_like항목으로 구성된 Python 시퀀스입니다.
- inheritable¶
PDF의 여러 값은 부모-자식 관계에서 하위 객체에 상속될 수 있습니다. 예를 들어 페이지의 mediabox(물리적 크기)는 한 번만 지정되거나
pagetree의 일부 노드에 지정될 수 있으며, 자체 값을 지정하지 않는 모든 자식 에 대한 값으로 사용됩니다.
- MediaBox¶
물리적 페이지 크기를 지정하는 4개의 float로 구성된 PDF 배열입니다 – (
inheritable, 필수). 이 사각형은 추가로 지정할 수 있는 다른 모든 PDF 페이지 사각형(CropBox, TrimBox, ArtBox, BleedBox)을 포함해야 합니다. 자세한 내용은 Adobe PDF 참조 을 참조하세요. MediaBox는 MuPDF와 PDF 좌표계 간에 차이가 없는 유일한 사각형입니다:Page.mediabox는 항상 페이지 객체 정의의/MediaBox키와 동일한 좌표를 표시합니다. 다른 모든 사각형의 경우, MuPDF는 상단 경계가 기준점이 되도록 y 좌표를 변환합니다. 이로 인해 때때로 혼란스러울 수 있습니다 – 예를 들어 다음과 같은 상황을 만날 수 있습니다:페이지 정의에는 다음과 같은 동일한 값이 포함되어 있습니다:
/MediaBox [ 36 45 607.5 765 ],/CropBox [ 36 45 607.5 765 ].따라서 PyMuPDF는
page.mediabox = Rect(36.0, 45.0, 607.5, 765.0)을 표시합니다.하지만:
page.cropbox = Rect(36.0, 0.0, 607.5, 720.0)입니다. 두 y 좌표가 변환되었기 때문입니다(둘 다에서 45가 빼졌습니다).
- CropBox¶
페이지의 보이는 영역을 지정하는 4개의 float로 구성된 PDF 배열입니다 – (
inheritable, 선택 사항). TrimBox, ArtBox 및 BleedBox의 기본값입니다. 없으면 MediaBox를 기본값으로 사용합니다. 이 값은 페이지가 회전되어도 영향을 받지 않습니다 –Page.rect와 대조됩니다. 또한 페이지 사각형과 달리 cropbox의 왼쪽 상단 모서리는 (0, 0) 일 수도 있고 아닐 수도 있습니다.
- catalog¶
문서 전체 매개변수와 다른 많은 정보에 대한 포인터를 포함하는 중앙 PDF
dictionary입니다 – “root”라고도 합니다. 그xref는Document.pdf_catalog()에 의해 반환됩니다.
- trailer¶
더 정확히 말하면, PDF trailer 는
dictionary형식의 정보를 포함합니다. 일반적으로 파일의 끝에 위치합니다. 이 사전에는 카탈로그 및 메타데이터의 xref,xref번호의 개수 등이 포함됩니다. PDF 사양의 정의는 다음과 같습니다:“PDF 파일의 trailer는 파일을 읽는 애플리케이션이 교차 참조 테이블과 특정 특수 객체를 빠르게 찾을 수 있게 합니다. 애플리케이션은 PDF 파일을 끝에서부터 읽어야 합니다.”
PyMuPDF에서 trailer에 액세스하려면 일반 메서드
Document.xref_object(),Document.xref_get_key()및Document.xref_get_keys()를 양수 xref 번호 대신-1과 함께 사용하세요.
- contents¶
content stream 은 첨부된
stream이 있는 PDFobject로, 그 데이터는 페이지에 그려질 그래픽 요소를 설명하는 명령 시퀀스로 구성됩니다. Adobe PDF 참조 의 19페이지 “Stream Objects”를 참조하세요. 이러한 스트림에서 사용되는 미니 언어의 개요는 Adobe PDF 참조 의 643페이지 “Operator Summary” 장을 참조하세요. PDFpage는 0개에서 여러 개의 contents 객체를 가질 수 있습니다. 없으면 페이지가 비어 있습니다(하지만 여전히 주석을 표시할 수 있습니다). 여러 개가 있으면 하나의 객체에 명령이 있는 것처럼 순차적으로 해석됩니다(즉, 연결된 문자열처럼). 동일한 구문을 사용하는 더 많은 스트림 객체 유형이 있습니다: 예를 들어 주석 및 Form XObject와 연결된 appearance dictionary.PyMuPDF는 PDF 페이지의 콘텐츠를 처리하기 위한 여러 메서드를 제공합니다:
Page.read_contents()– 모든 페이지 콘텐츠를 읽어서 하나의bytes객체로 연결합니다.Page.clean_contents()– 모든 페이지 콘텐츠를 읽고, 연결하고, 구문을 정리하는 MuPDF 함수의 래퍼입니다. 이후에는 하나의/Contents객체만 존재합니다. 또한 페이지resources가 동기화되어 페이지가 실제로 참조하는 이미지, 글꼴 및 기타 객체만 정확히 포함됩니다.Page.get_contents()– 페이지의contents객체의xref번호 목록을 반환합니다. 비어 있을 수 있습니다. 이러한 xref 중 하나와 함께Document.xref_stream()을 사용하여 해당 콘텐츠 섹션을 읽으세요.Page.set_contents()– 페이지의/Contents키를 제공된xref번호로 설정합니다.
- resources¶
PDF
page에 필요한 리소스(이미지 또는 글꼴 등)에 대한 참조를 포함하는dictionary입니다(필수, 상속 가능, Adobe PDF 참조 p. 81) 및 특정 다른 객체(Form XObject). 이 사전은 키 /Resources 아래의 객체 정의에 하위 사전으로 나타납니다. 상속 가능한 객체 유형이므로 모든 페이지 또는 특정 페이지 하위 집합에 대한 “부모” 리소스가 존재할 수 있습니다.
- dictionary¶
동일한 이름의 Python 개념과 어느 정도 비교할 수 있는 PDF
object유형입니다: “dictionary 객체는 dictionary의 항목으로 알려진 객체 쌍을 포함하는 연관 테이블입니다. 각 항목의 첫 번째 요소는 키이고 두 번째 요소는 값입니다. 키는 이름이어야 합니다(…). 값은 다른 dictionary를 포함하여 모든 종류의 객체일 수 있습니다. 값이 null인 dictionary 항목(…)은 없는 항목과 동일합니다.” (Adobe PDF 참조 p. 18).Dictionary는 PDF에서 가장 중요한
object유형입니다. 다음은 예제입니다(page설명):<< /Contents 40 0 R % value: an indirect object /Type/Page % value: a name object /MediaBox[0 0 595.32 841.92] % value: an array object /Rotate 0 % value: a number object /Parent 12 0 R % value: an indirect object /Resources<< % value: a dictionary object /ExtGState<</R7 26 0 R>> /Font<< /R8 27 0 R/R10 21 0 R/R12 24 0 R/R14 15 0 R /R17 4 0 R/R20 30 0 R/R23 7 0 R /R27 20 0 R >> /ProcSet[/PDF/Text] % value: array of two name objects >> /Annots[55 0 R] % value: array, one entry (indirect object) >>
Contents, Type, MediaBox 등은 키 이고, 40 0 R, Page, [0 0 595.32 841.92] 등은 각각의 값 입니다. 문자열 “<<” 및 “>>” 는 객체 정의를 묶는 데 사용됩니다.
이 예제는 중첩된 dictionary 값의 구문도 보여줍니다: Resources 는 그 값으로 객체를 가지며, 이 객체는 ExtGState (값은 <</R7 26 0 R>> 로, 또 다른 dictionary)와 같은 키를 가진 dictionary입니다.
- page¶
PDF 페이지는 PDF의 한 페이지를 정의하는
dictionary객체입니다. Adobe PDF 참조 p. 71을 참조하세요.
- pagetree¶
문서의 페이지는 페이지 트리라고 하는 구조를 통해 액세스되며, 이는 문서의 페이지 순서를 정의합니다. 트리 구조를 사용하면 제한된 메모리만 사용하여 수천 페이지를 포함하는 문서를 빠르게 열 수 있습니다. 트리에는 두 가지 유형의 노드가 포함됩니다: 중간 노드(페이지 트리 노드라고 함)와 리프 노드(페이지 객체라고 함). (Adobe PDF 참조 p. 75).
모든 페이지 참조를 하나의 배열에 나열하는 것이 가능하지만, 많은 페이지가 있는 PDF는 단일 페이지에 더 빠르게 액세스하기 위해 균형 트리 구조(“페이지 트리”)를 사용하여 생성되는 경우가 많습니다. 전체 페이지 수와 관련하여, 이를 통해 페이지 번호별 평균 페이지 액세스 시간을 선형에서 대수적 크기 순서로 줄일 수 있습니다.
빠른 페이지 액세스를 위해 MuPDF는 문서 파일에 있을 수도 있고 없을 수도 있는 것과 독립적으로 메모리에서 자체 배열을 사용할 수 있습니다. 이 배열은 페이지 번호로 인덱싱되므로 완벽하게 균형 잡힌 페이지 트리를 통한 액세스보다 훨씬 빠릅니다.
- object¶
Python과 유사하게, PDF는 object 개념을 지원하며, 8가지 기본 유형이 있습니다: 불리언 값(“true” 또는 “false”), 정수 및 실수, 문자열(항상 괄호로 묶임 – “()” 또는 16진수를 나타내는 “<>”), 이름(항상 “/”로 시작해야 함, 예:
/Contents), 배열(괄호 “[]”로 묶임), dictionary(괄호 “<<>>”로 묶임), 스트림(키워드 “stream” / “endstream”로 묶임), null 객체(“null”) (Adobe PDF 참조 p. 13). 객체는 레이블을 할당하여 식별 가능하게 만들 수 있습니다. 이 레이블은 indirect 객체라고 합니다. PyMuPDF는Document.xref_object()를 통해 교차 참조 번호로 indirect 객체의 정의를 검색하는 것을 지원합니다.
- stream¶
Python bytes 와 유사한 바이트 시퀀스가 뒤따르는 PDF
dictionaryobject유형입니다. “그러나 PDF 애플리케이션은 스트림을 점진적으로 읽을 수 있지만 문자열은 전체를 읽어야 합니다. 또한 스트림은 무제한 길이일 수 있지만 문자열은 구현 제한이 적용됩니다. 이러한 이유로 이미지 및 페이지 설명과 같이 잠재적으로 많은 양의 데이터를 가진 객체는 스트림으로 표현됩니다.” “스트림은 키워드 stream 과 endstream 사이에 괄호로 묶인 0개 이상의 바이트가 뒤따르는dictionary로 구성됩니다”:nnn 0 obj << dictionary definition >> stream (zero or more bytes) endstream endobj
Adobe PDF 참조 p. 19를 참조하세요. PyMuPDF는
Document.xref_stream()을 통해 스트림 콘텐츠를 검색하는 것을 지원합니다. 객체가 스트림 유형인지 확인하려면Document.is_stream()을 사용하세요.
- unitvector¶
노름(“길이”)이 1인 벡터를 의미하는 수학적 개념입니다 – 일반적으로 유클리드 노름을 의미합니다. PyMuPDF에서 이 용어는 Point 객체로 제한됩니다.
Point.unit을 참조하세요.
- xref¶
교차 참조 번호의 약어: PDF의 객체에 대한 고유한 정수 식별자입니다. 각 PDF에는 빠른 조회를 위해 각 객체의 상대 위치를 저장하는 교차 참조 테이블이 있습니다(물리적으로 여러 개의 별도 세그먼트로 구성될 수 있음). 교차 참조 테이블은 기존 객체 수보다 하나 더 긴 항목을 가집니다: 항목 0은 예약되어 있으며 어떤 방식으로도 사용해서는 안 됩니다. 많은 PyMuPDF 클래스에는
xref속성이 있습니다(비PDF의 경우 0).Document.xref_length()- 1 을 통해 PDF의 객체 총 수를 확인할 수 있습니다.
- fontsize¶
글꼴 크기를 나타낼 때 이 측정값은 포인트로 측정되며, 1인치 = 72포인트입니다.
- resolution¶
이미지 및 Pixmap 객체는 각 방향(수평 및 수직)에서 “인치당 도트 수”인 dpi로 제공되는 해상도 정보를 포함할 수 있습니다. MuPDF가 파일 또는 PDF 객체에서 이미지를 읽을 때 이 정보를 구문 분석하여 각각
Pixmap.xres,Pixmap.yres에 넣습니다. 입력에서 의미 있는 정보를 찾지 못하면(양수가 아닌 값 또는 4800을 초과하는 값 등) 대신 “적절한” 기본값을 사용합니다. 일반적인 기본값은 96이지만 일부 경우(예: JPX 이미지)에는 72일 수도 있습니다.
- OCPD¶
선택적 콘텐츠 속성 dictionary - PDF
catalog의 하위dictionary. 선택적 콘텐츠 정보를 저장하는 중앙 위치이며, 키/OCProperties로 식별됩니다. 이 dictionary에는 두 개의 필수 항목과 하나의 선택적 항목이 있습니다: (1)/OCGs, 필수, 모든 선택적 콘텐츠 그룹을 나열하는 배열, (2)/D, 필수, 기본 선택적 콘텐츠 구성 dictionary(OCCD), (3)/Configs, 선택, 대체 OCCD 배열.
- OCCD¶
선택적 콘텐츠 구성 dictionary - PDF
OCPD내부의 PDFdictionary. OCG의 ON/OFF 상태 설정과 PDF 뷰어 프로그램에 표시되는 방식을 저장합니다. 구성을 선택하는 것은 일시적인 대량 표시 상태 변경을 빠르게 달성하는 방법입니다. PDF를 연 후OCPD의/D구성이 항상 활성화됩니다. 뷰어는/D또는 배열/Configs에 포함된 선택적 구성 중 하나 사이를 전환하는 방법을 제공해야 합니다.
- OCG¶
선택적 콘텐츠 그룹 – 이미지 또는 주석과 같은 다른 PDF 객체의 표시를 제어하는 데 사용되는
dictionary객체. 정의된 페이지와 무관하게 동일한 OCG를 가진 객체는 OCG를 ON 또는 OFF로 설정하여 동시에 표시하거나 숨길 수 있습니다. 이는 많은 PDF 뷰어(Adobe Acrobat)가 제공하는 사용자 인터페이스를 통해 또는 프로그래밍 방식으로 달성할 수 있습니다.
- OCMD¶
선택적 콘텐츠 멤버십 dictionary –
OCG처럼 사용할 수 있는dictionary객체: 표시 상태가 있습니다. OCMD의 표시는 계산됩니다: 하나 이상의 OCG 상태를 사용하여 불리언 값을 생성하는 논리식입니다. 식의 결과는 ON(true) 또는 OFF(false)로 해석됩니다.
- ligature¶
일부 빈번한 문자 조합은 더 고급 글꼴에서 자체 특수 글리프로 표현됩니다. 일반적인 예는 “fi”, “fl”, “ffi”, “ffl”입니다. 이러한 복합체를 ligature 라고 합니다. PyMuPDF 텍스트 추출에서는 해당 유니코드를 변경하지 않고 반환하거나 ligature를 구성 요소로 분할하는 옵션이 있습니다: “fi” ==> “f” + “i” 등.
