PDFiumPas 릴리스 노트
PDFiumPas의 사용자 표시 기능, 수정 사항, 뷰어 개선, 문서 생성, PDF/A 출력, 렌더링 및 문서 업데이트 버전 기록입니다
최신 버전
- 최신 버전: 2.19.1; 출시일:
Version 2.21.12
수정됨 (Fixed)
- PDF 1.5~PDF 1.7에 대한 명시적 저장은 이제 필요한
/OCGs또는/D항목 누락, 유효하지 않은 기본 구성 값, 비배열 상태 항목을 포함한 잘못된 형식의 카탈로그/OCProperties구조를 거부합니다
Version 2.21.11
수정됨 (Fixed)
- PDF 버전에 대한 명시적 저장은 이제 주석 사전에서 필요한
/Subtype또는/Rect항목이 누락된 페이지의 직접 또는 간접/Annots항목을 거부합니다
Version 2.21.10
수정됨 (Fixed)
- PDF 1.7에 대한 명시적 저장은 이제 지리공간
/Type /Measure /Subtype /GEO사전 및 Projection 주석이/BaseVersion /1.7및/ExtensionLevel 3이상으로/Extensions /ADBE를 선언하도록 요구합니다
Version 2.21.9
수정됨 (Fixed)
- PDF 1.7에 대한 명시적 저장은 이제 RichMedia 주석 및
RichMediaExecute작업이/BaseVersion /1.7및/ExtensionLevel 3이상으로/Extensions /ADBE를 선언하도록 요구합니다
Version 2.21.8
수정됨 (Fixed)
- PDF 1.7에 대한 명시적 저장은 이제 PRC를 PDF 1.7의 핵심 기능으로 처리하는 대신 PRC 3D 스트림이
/BaseVersion /1.7및/ExtensionLevel 1이상으로/Extensions /ADBE를 선언하도록 요구합니다
Version 2.21.7
수정됨 (Fixed)
- PDF 1.4 이하에 대한 명시적 저장은 이제 명시적 값
0을 포함한 이미지 XObject/SMaskInData항목을 거부합니다. 내장된 JPEG 2000 소프트 마스크 채널에는 PDF 1.5 이상이 필요하기 때문입니다
Version 2.21.6
수정됨 (Fixed)
- PDF 1.4 이하에 대한 명시적 저장은 이제 PDF 1.5 이상이 필요한 16비트 이미지 XObject를 거부하며, PDF 1.5~PDF 1.7 대상에서는
/BitsPerComponent 16이미지 데이터가 유지됩니다
Version 2.21.5
수정됨 (Fixed)
- PDF 1.4 이하에 대한 명시적 저장은 이제 PDF 1.5 이상이 필요한 문서 카탈로그
/PageLayout /TwoPageLeft및/TwoPageRight값을 거부하며, PDF 1.5~PDF 1.7 대상에서는 요청된 이중 페이지 레이아웃이 유지됩니다
Version 2.21.4
수정됨 (Fixed)
- PDF 1.3에 대한 명시적 저장은 이제 PDF 1.4 이상이 필요한 문서 카탈로그
/Lang항목을 거부하며, PDF 1.4~PDF 1.7 대상에서는 언어 식별자가 유지됩니다
Version 2.21.3
수정됨 (Fixed)
- PDF 1.3에 대한 명시적 저장은 이제 PDF 1.4 이상을 필요로 하는 문서의
/EmbeddedFiles이름 트리를 거부하지만, 이전 파일 사양을 통해 참조된 삽입된 파일 스트림은 거부하지 않습니다
Version 2.21.2
수정됨 (Fixed)
- 최신 버전: 2.21.2; 출시일:
Version 2.21.1
수정됨 (Fixed)
- 하이브리드 참조 검증은 이제 동일 리비전의 고전적 xref 자리표시자보다 먼저 보완
/XRefStm항목을 적용하므로, 호환성 테이블이 이를 자유로 표시할 때 압축 주석과 기타 버전 제한 객체가 더 이상 누락되지 않습니다
Version 2.21.0
변경됨 (Changed)
- 모든 Delphi, C++Builder 및 Lazarus 뷷어 예제는 이제 첫 번째 명령줄 인수로 전달된 PDF를 열 수 있으며, C++Builder 및 Lazarus
MultiPageViewer예제는 전체 선택과 복사를 위한 명시적 단축키를 제공합니다
수정됨 (Fixed)
- 최신 버전: 2.21.3; 출시일:
Version 2.20.0
변경됨 (Changed)
- 모든 Delphi, C++Builder 및 Lazarus 뷷어 예제는 이제 열기, 검색, 저장, 인쇄, 확대/축소 및 페이지 탐색에 대한 일관된 단축키를 제공하며, 각
ViewerInteractionLab변형도 페이지 이동, 검증된 10–60 % 수동 확대/축소, 지속적인 상호작용 로그, 클릭 좌표 왕복 검사를 지원합니다
Version 2.19.1
수정됨 (Fixed)
- 최신 버전: 2.21.4; 출시일:
Version 2.19.0
변경됨 (Changed)
- 최신 버전: 2.21.12; 출시일:
수정됨 (Fixed)
- C++Builder
CJKTextLab이 이제 내보낸 PDFium 편집 기능을 통해 텍스트를 측정하고,MergePDF가 모호한 VCL 메시지 오버로드를 방지하여 깨끗한 RAD Studio 37 빌드를 복구합니다
Version 2.18.3
수정됨 (Fixed)
- PAdES B-LTA Document Time-stamp가 서명 필드 열거 검증기가 찾을 수 없는 도달 불가능한 고아 객체 대신, 첫 번째 페이지
/Annots및 AcroForm/Fields(ETSI EN 319 142-1 §5.4.3)를 통해 도달 가능한 보이지 않는 Widget인 검색 가능한 서명 필드로 등록되며 기존 주석과 필드는 보존됩니다
Version 2.18.2
수정됨 (Fixed)
- PAdES 서명 및 classic 상호 참조 쓰기 시 바이트 오프셋이 고정된 10자리 필드 너비(~9.3 GB)를 초과할 때,
/ByteRange자리 표시자를 쓰지 않은 채로 두어 잘못된 서명을 생성하거나 20바이트 xref 라인(ISO 32000-1 §7.5.4)을 넘치게 하는 대신 명확한 오류를 발생시킵니다; cross-reference-stream 출력은 8바이트 이진 필드를 사용하며 영향을 받지 않습니다
Version 2.18.1
수정됨 (Fixed)
- PAdES 서명 시 이제 간접 첫 번째 페이지
/Annots,/AcroForm및/Fields참조를 전체 객체 헤더(ISO 32000-1 §7.5.3) 및 참조의 실제 생성 번호로 해석합니다; 이전의 단순 하위 문자열 검색은 더 긴 객체 번호 내부의 객체 번호와 일치하여(5 0 R을15 0 obj로 해석) 잘못 서명 필드 배열을 손상시키거나 유효한 문서를 거부했으며, 하드코딩된 생성 번호는gen>0객체를 누락합니다 - 카탈로그, 첫 번째 페이지,
/Annots,/AcroForm또는/Fields가 객체 스트림 내에 있는 경우, 서명 시 문서를 즉시 거부하는 대신 확장된 복사본에서 다시 시도합니다
Version 2.18.0
추가됨 (Added)
ReadPdfVersionInfo가 PDF 스트림에서 헤더 버전, 유효 코어 버전, 카탈로그 재정의 및 Adobe 개발자 확장 수준을 보고합니다
변경됨 (Changed)
- 명시적 PDF 1.3-1.7 저장 시 이제 소유 객체 컨텍스트에서 카탈로그, 페이지 리소스, XFA, 정리 및 개발자 확장 구조를 검증합니다; 문서 무결성을 보존하기 위해 암호화된 명시적 버전 출력 및 PDF 1.3 증분 정규화는 거부됩니다
- 파일 경로 저장 시 이제 형제 임시 파일에 쓰고 모든 압축, 정규화 및 버전 검사가 성공한 후에만 대상 파일을 대체합니다
수정됨 (Fixed)
- PDF 1.3 출력이 이제 필수적인 전체
/ProcSet리소스를 전달하고, PDF 1.4 투명도 키가 PDF 1.3 초기 그래픽 상태 값을 반복할 뿐인 경우 이를 제거합니다 - hybrid-reference, xref-stream 및 object-stream 파일이 더 이상 classic-xref 압축기에 의해 다시 작성되지 않아 압축 객체 항목이 누락되는 것을 방지합니다
- 문자열, 주석 또는 관련 없는 리소스 맵 내부에서 투명도 또는 카탈로그 기능 키와 유사한 이름이 더 이상 잘못된 대상 버전 실패를 유발하지 않습니다
Version 2.17.0
추가됨 (Added)
- PAdES 서명이 이제 기존 주석과 양식 필드를 보존하면서 첫 번째 페이지
/Annots배열 및 AcroForm/Fields배열에 보이지 않는 Widget 주석으로 등록됩니다
변경됨 (Changed)
- 증분 PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA, PDF/VT 및 PAdES 업데이트가 이제 소스 상호 참조 표현을 보존합니다; ISO 32000-1 §7.5.8.1에 따라 xref-stream 문서는 xref-stream 업데이트를 받는 반면, classic 문서는 계속해서 xref 테이블을 받습니다
- 상호 참조 오프셋,
startxref,/Prev, PAdES ByteRange 값 및 SHA-256 범위 처리가 이제 청크 해싱과 함께 64비트 위치를 사용하여 64비트 빌드에서 2 GB보다 큰 파일을 지원합니다 - 생성된 쓰기 가능한 XMP 패킷이 이제 닫는 패킷 지침 앞에 2048바이트의 패딩을 예약합니다
Version 2.16.10
수정됨 (Fixed)
- 객체 스트림 확장이 증분 업데이트에 의해 객체 스트림에서 일반 정의로 마이그레이션된 객체의 오래된 복사본을 더 이상 부활시키지 않습니다(ISO 32000-1 §7.5.7); 적합성 검사 및 마커 주입 시 이전에는 이러한 파일에서 만료된 카탈로그 또는 메타데이터 사전을 참조했습니다
Version 2.16.9
수정됨 (Fixed)
- Free Pascal에서 입력이 유효한 UTF-8이 아닌 텍스트 문자열은 Latin-1로 바이트 단위 확장되어 UTF-16BE 16진수 문자열로 작성됩니다; 이전에는 원시 상위 바이트가 리터럴 문자열로 유출되었는데, 이는 유효한 PDF 1.7 텍텍스트 문자열 인코딩이 아닙니다
- 스트림 디코딩이 이제 RFC 1950 zlib 래퍼가 없는 원시 deflate 데이터를 인식하고(잘못된 라이터의 공통된 결함) 이를 원시 모드로 압축 해제하므로, 적합성 검사가 더 이상 이러한 스트림을 보지 못하고 그냥 지나치지 않습니다
Version 2.16.8
수정됨 (Fixed)
- 저장 후 처리 경로에 의해 생성된 증분 업데이트가 이제 ISO 32000-1 §14.4에 따라 두 번째(변경되는) 트레일러
/ID요소를 새로 고칩니다; 이전에는 두 요소 모두에 있는 그대로 복사되었으므로 캐싱 및 동기화 도구는 업데이트 후에도 변경되지 않은 식별자를 보았습니다
Version 2.16.7
수정됨 (Fixed)
- 적합성 검사에 사용되는 스트림 본문 공백화 시 이제
stream키워드 뒤에 줄바꿈이 와야 합니다(ISO 32000-1 §7.3.8.1); 이전에는(downstream)과 같은 리터럴 문자열 내부의 단어가 다음endstream까지의 모든 후속 구조를 공백으로 만들어 바이트 수준 검사에서 실제 위반 사항을 숨겼습니다 - PDF/X 및 PDF/E 금지 기능 검사 시 리터럴 문자열과 주석(§7.2.2)도 추가로 공백화하므로,
/Title (see /JavaScript docs)와 같은 값이나 주석 처리된 토큰이 더 이상 잘못된JavaScript,AcroForm또는LZWDecode결과를 생성하지 않습니다
Version 2.16.6
수정됨 (Fixed)
- PDF/VT DPM 항목이 문서화된 대로 쓰기 시점에 검증됩니다; ISO 16612-2 §6.6 NMTOKEN 규칙 또는 Annex E 등록자 접두사 규칙을 위반하는 키 이름 및 중복된 이름은 DPart 사전에 작성되는 대신 거부됩니다 — 공백이 포함된 이름은 이전에는 가짜 키/값 쌍으로 분할되어 사전을 손상시켰습니다
Version 2.16.5
수정됨 (Fixed)
- 값이 16진수 문자열인 사전 항목(예:
/Check <...>)을 제거할 때 이제 항목 전체가 제거됩니다; 이전에는 인젝터가 고아 16진수 값을 남겨두어 구문적으로 손상된 사전을 생성했습니다 - 토큰 사이에 줄바꿈을 사용하는 간접 참조 항목을 제거할 때(ISO 32000-1 §7.3.10은 모든 공백을 허용) 생성 번호와
R키워드가 더 이상 남지 않습니다
Version 2.16.4
수정됨 (Fixed)
- 최대 객체 번호 스캔 시 이제 객체 헤더가 줄의 시작 부분에 있을 필요가 없습니다(ISO 32000-1 §7.5.3은 그 앞의 모든 공백이나 구분 기호를 허용); 따라서 인젝터가 인라인
N G obj헤더와 충돌하는 객체 번호를 할당하여 파일을 자동으로 손상시키는 일이 더 이상 발생하지 않습니다; 객체 번호는 Annex C 상한으로 제한됩니다 /Length가 간접 참조인 스트림은 이제 참조된 정수 객체를 해석하고 닫는endstream과 일치할 때 그 값을 사용합니다; 이전에는 이러한 스트림이 패턴 검색으로 제한되어 합법적으로endstream바이트 시퀀스를 포함하는 본문이 잘렸습니다 — 임베디드 PDF 첨부 파일의 전형적인 모습입니다
Version 2.16.3
수정됨 (Fixed)
- 스트림 압축이 cross-reference-stream 문서(classic
trailer키워드가 없는 PDF 1.5+ 파일)를 변경 없이 통과시킵니다; 재구축 경로는 이전에startxref를 테이블 위치로 오분석하고 추측된 트레일러를 합성하여 열 수 없는 파일을 생성했습니다 - 압축기가 XMP 메타데이터 스트림을 건너뛰어 PDF/A 문서가 필수 필터링되지 않은 메타데이터 스트림(ISO 19005-1 §6.7.2)을 유지하도록 하고, 외부 파일 스트림(
/FFilter가 포함된/F)을 그대로 둡니다 - 재구축된 상호 참조 테이블은 문서의 스트림이 제거된 사본을 스캔하므로 이진 스트림 콘텐츠가 객체 헤더를 가장하거나 테이블을 부풀릴 수 없습니다; 재구축된 트레일러의
/Size는 이제 실제 테이블을 반영하며 객체 번호는 Annex C 상한으로 제한됩니다 - 원래 상호 참조 테이블을 찾을 때 CR 전용 줄바꿈(ISO 32000-1 §7.5.1)을 허용하고
startxref내부의xref문자와 일치하지 않습니다; 스트림 키워드 스캔은 다른 곳에서 사용되는 것과 동일한endstream-tail 가드를 획득하고 이제 건너뛴 스트림 본문 뒤로 진행합니다
Version 2.16.2
수정됨 (Fixed)
- 바이트 수준 PDF 리더 전체에서 정수 파싱 시 이제 ISO 32000-1 §7.3.3에 의해 허용되는 명시적
+기호를 수락하고 오버플로를 발생시킬 수 있는 숫자 실행을 거부하므로, 악의적이거나 손상된 문서가 더 이상 파싱된 길이와 오프셋을 잘못된 값으로 랩핑할 수 없습니다
Version 2.16.1
수정됨 (Fixed)
- PDF/UA 인젝터가 카탈로그
/Lang값을 올바른 PDF 텍스트 문자열로 씁니다; 이전에는 값을 XML 이스케이퍼를 통해 실행하여&또는 괄호가 포함된 언어 태그가 손상된 항목을 생성했고 비-ASCII 입력은 원시 UTF-8로 작성되었습니다 - PDF/E
/ISO_PDFEVersionInfo 항목은 공유 텍스트 문자열 인코더를 사용하여 비-ASCII 값을 PDF 1.7에서 유효하게 유지합니다 - XMP 패킷에 대한 XML 이스케이프가 XML 1.0에서 허용되지 않는 제어 문자를 삭제하므로, 손상된 소스 문서에서 복사된 메타데이터가 더 이상 전체 메타데이터 스트림을 유효하지 않은 형식으로 만들지 않습니다
- PDF에서 XMP로의 날짜 변환이 날짜 필드가 숫자인지 확인하고 누락된 분 필드를 패딩하여 생성된 XMP에서 잘못된 형식의 ISO 8601 날짜를 방지합니다; Windows 이외의 플랫폼에서 폴백 타임스탬프는 이제 일반 날짜 대신 하루 중 시간을 포함합니다
Version 2.16.0
추가됨 (Added)
- 스트림 디코딩이 이제 FlateDecode 후에
/Colors,/BitsPerComponent및/Columns를 준수하여/DecodeParms예측기(PNG 예측기 10-15 및 TIFF 예측기 2, ISO 32000-1 §7.4.4.4)를 재구성합니다; 예측기로 압축된 객체 스트림(PDF 1.5+ 라이터의 일반적인 선택)은 이전에는 차분 바이트를 표면화하여 그들이 운반하는 객체가 적합성 검사 및 마커 주입에 보이지 않았습니다
수정됨 (Fixed)
- FlateDecode 감지 시 이제
/Filter값을 하위 문자열 일치 대신 이름 또는 배열로 분석하므로, 계층화된 필터 체인 및 관련 없는 값 내부의 단어 발생이 더 이상 잘못된 압축 풀기를 트리거하지 않습니다; 지원되지 않는 체인은 이전과 같이 원시 바이트로 폴백합니다
Version 2.15.1
수정됨 (Fixed)
- 사전 스캐너가 이제
<</>>의 균형을 맞추는 동안 리터럴 문자열, 16진수 문자열 및 주석을 건너뜁니다(ISO 32000-1 §7.2.2); 따라서(A >> B)와 같은 값이나 닫는 구분 기호에 인접한 16진수 문자열을 포함하는 사전이 트레일러, 카탈로그 및 적합성 검사 파싱 중에 잘리지 않습니다 - 리터럴 문자열 추출 시 이제 이스케이프 문자를 있는 그대로 복사하는 대신 §7.3.4.2 Table 3 이스케이프 세트(
\n \r \t \b \f, 8진수\ddd, 줄 연속 및 이스케이프되지 않은 EOL 정규화) 전체를 디코딩하여, 8진수 이스케이프를 사용하는 라이터에 대한 올바른/Producer,/GTS_PDFXVersion및/ISO_PDFEVersion비교를 복구합니다 - 마커 인젝터에 의해 작성된 리터럴 문자열이 이제 CR, LF 및 기타 제어 문자를 이스케이프하므로 리더 측의 줄 끝 정규화에서도 값이 바이트 단위로 보존됩니다
Version 2.15.0
수정됨 (Fixed)
- PDF/A, PDF/X, PDF/E, PDF/R, PDF/UA 및 PDF/VT 마커 인젝터와 PAdES 서명 및 DSS 경로에 의해 작성되는 증분 업데이트가 이제 소스 문서의 영구 파일 식별자를 보존합니다; ISO 32000-1 §14.4에 따라 첫 번째 트레일러
/ID요소는 있는 그대로 전달되고 두 번째(변경되는) 요소만 새로 고쳐집니다; 이전에는 두 요소 모두 재생성되어 매 저장마다 외부 참조 및 장기 검증 워크플로가 다른 문서 ID를 보았습니다 - PAdES 서명, DSS 주입 및 B-LTA Document Time-stamp가 이제 소스 트레일러의
/Info참조를 앞으로 전달하여(ISO 32000-1 §7.5.6) 서명 후 리더 패널에서 문서 속성이 사라지지 않도록 합니다; Document Time-stamp 트레일러도/ID배열을 획득합니다 - cross-reference-stream 문서에 대한 트레일러
/Info폴백이 이제 XRef 스트림 사전을 올바르게 찾고 참조의 생성 번호를 보존합니다; 이전에는 표준을 준수하는 PDF 1.5+ 파일에서 일치 항목을 찾지 못해/Info를 자동으로 누락했습니다
Version 2.14.4
수정됨 (Fixed)
TPdf.SignPades및SignPadesBytes에 의해 작성되는 서명 사전/M날짜가 이제 ISO 32000-1 §7.9.4에서 요구하는 필수D:접두사 및ZUTC 오프셋 마커를 전달합니다; 이전에는 엄격한 검증기에서 서명 시간을 잘못된 형식의 날짜 문자열로 거부했습니다
Version 2.14.3
수정됨 (Fixed)
- 공유 PDF 리더의 사전 키 조회가 이제 전체 이름 토큰과 일치합니다(ISO 32000-1 §7.3.5); 이전에는 사전에서
/Length1을/Length보다 먼저 나열하는 스트림(FontFile 스트림의 전형적인 모습)이 잘못된 바이트 수로 잘려, 폰트, CMap 또는 메타데이터 스트림을 읽는 PDF/A, PDF/UA 및 기타 적합성 검사를 자동으로 보지 못하게 만들었습니다 /Encrypt,/Root,/Size및/Info트레일러 조회가 이제 동일한 접두사를 공유하는 더 긴 키(예:/EncryptMetadata)와 일치하지 않습니다- 객체 스트림 확장이 손상되었거나 악의적인
/N값을 더 이상 신뢰하지 않습니다; 정수가 아닌 값은 이제 초기화되지 않은 숫자 대신 0을 반환하며,/First에서 파생된 상한이 잘못된 형식의 문서를 스캔하는 동안 대규모 할당을 방지합니다
Version 2.14.2
수정됨 (Fixed)
- PDF/X, PDF/VT, PDF/UA, PDF/E 및 PDF/R 마커 인젝터가 이제 평문 업데이트 섹션을 추가하는 대신 암호화된 소스 문서를 수정 없이 복사합니다; 이전의 동작은 최신 트레일러가
/Encrypt항목을 잃어버리는 파일을 생성하여(ISO 32000-1 §7.5.6) 준수 리더가 암호화된 본문을 평문으로 잘못 읽도록 만들었습니다 TPdf.SignPades,SignPadesBytes및InjectPadesDssMarkers가 소스 문서가 암호화되었을 때 손상되거나 검증할 수 없는 파일을 출력하는 대신EPadesCrypto를 발생시킵니다; 서명하거나 DSS 자료를 포함하기 전에 암호화를 제거하십시오
Version 2.14.1
수정됨 (Fixed)
TPdf.SignPades및SignPadesBytes가 이제 서명 사전의 네 가지/ByteRange필드를 모두 채웁니다; 이전에는 마지막 세 필드가 제로 자리 표시자에 머물러 생성된 서명이 빈 바이트 범위를 선언했고 준수 검증기에서 검증에 실패했습니다- PAdES B-LTA Document Time-stamp 사전도 동일한
/ByteRange백필 수정 사항을 받습니다 ValidatePadesCompliance가 바이트 범위 간격이 16진수/Contents값을 보유하는 표준 서명 레이아웃을 허용하고, 두 번째 범위 세그먼트가 정확히 파일 끝에서 끝나는지 확인합니다; 이전에는 간격이 없는 범위만 범위 검사를 통과했습니다
Version 2.14.0
추가됨 (Added)
TPdf.ExportXFDF가 계층적 양식 값을 위한<fields>및 지원되는 모든 주석 하위 유형(텍스트, 강조, 밑줄, 취소선, 물결선, 선, 원, 사각형, 캐럿, 다각형, 다중선, 스탬프, 잉크, 자유 텍스트, 파일 첨부, 사운드, 링크, 정리)을 위한<annots>를 출력하여 모든 페이지의 모든 양식 필드 값과 주석을 XFDF 문서(ISO 19444-1)로 직렬화합니다TPdf.ImportXFDF가 XFDF 문서를 로드된 PDF로 다시 읽어 일치하는 페이지에 주석을 재생성하고 필드 값을 위젯 주석에 적용합니다TPdfAnnotation레코드에Name(NM),Subject,ModificationDate(M),CreationDate,Icon,Opacity(CA), 선 끝점, 다각형/다중선 꼭짓점 및 잉크 목록 제스처 필드가 추가되어 XFDF 왕복 후에도 전체 주석 메타데이터를 보존합니다- Delphi, C++Builder 및 Lazarus 데모 세트의 새로운
XfdfLab샘플이 내보내기/가져오기 왕복을 시연합니다
Version 2.13.6
수정됨 (Fixed)
ValidatePdfA가 이제/Type /Metadata또는/Subtype /XML이 없는 카탈로그/Metadata스트림을pvaiMissingXmpMetadata를 통해 누락된 XMP 메타데이터로 취급합니다- PDF/A 프리플라이트 보고서가 이제
pvaiMissingXmpMetadata를 Metadata로 분류하고,/Type /Metadata,/Subtype /XML, 필터링되지 않은 XMP 및pdfaid마커가 포함된 카탈로그/Metadata스트림을 권장합니다
Version 2.13.5
수정됨 (Fixed)
ValidatePdfA가 이제 외관 사전이 없는 Widget 주석 및/AP가 필요하지만 누락된 PDF/A-2 / PDF/A-3 주석을pvaiAnnotationApDictViolation을 통해 보고합니다- PDF/A 프리플라이트 보고서가 이제
pvaiAnnotationApDictViolation을 마커 주입으로 복구할 수 없는 콘텐츠로 분류합니다
Version 2.13.4
수정됨 (Fixed)
ValidatePdfA가 이제/I또는/Interpolate값이true인 PDF/A-2 및 PDF/A-3 인라인 이미지를pvaiImageDictionaryViolation을 통해 보고하며, 이는 기존 Image XObject 사전 적용 범위와 일치합니다- PDF/A 프리플라이트 보고서가 이제
pvaiImageDictionaryViolation을 마커 주입으로 복구할 수 없는 콘텐츠로 분류합니다
Version 2.13.3
수정됨 (Fixed)
ValidatePdfA가 이제 콘텐츠 스트림 내에서/LZWDecode또는 약축된/LZW필터를 사용하는 PDF/A-1 인라인 이미지를pvaiInlineImageLzwForbidden을 통해 보고하며, 이는 기존 PDF/A-2 및 PDF/A-3 인라인 이미지 적용 범위와 일치합니다- 인라인 이미지 필터 스캐너가 이제
/GS1과 같은 주요 리소스 이름을 지나쳐 진행하므로 더 넓은 PDF/A-1 콘텐츠 스트림을 스캔하는 동안 지연되는 것을 방지합니다
Version 2.13.2
추가됨 (Added)
TPdf.SetFocusedFormFieldText가FocusedFormFieldText와 대칭으로FORM_ReplaceSelection을 통해 현재 포커스가 있는 양식 필드의 편집 버퍼에 텍스트를 작성합니다; AcroForm 텍스트/콤보 필드의 경우 값은 포커스 해제 시/V에 커밋되고 유지됩니다; XFA 텍스트 필드의 경우 쓰기는 메모리 내 버퍼에만 적용됩니다(PDFium은 XFA 값을 데이터 세트 패킷에 다시 반영하는 공개 API를 제공하지 않으므로 저장 시 유지되지 않습니다)- 문서가 XFA인지 여부에 관계없이 V8 엔진을 사용할 수 있을 때마다 JavaScript 호스트 플랫폼이 이제 연결되므로 임베디드 AcroForm JavaScript(문서 수준 스크립트, 필드 계산,
app.alert)도 실행할 수 있습니다; 이전에는m_pJsPlatform이 XFA 문서에만 구성되어 AcroForm JS가 자동으로 비활성화 상태로 남았습니다
변경됨 (Changed)
- JavaScript 플랫폼 연결이 이제
InitializeFormFill의 XFA 결정과 무관하게 이루어집니다 —V8FeaturesAvailable이 true일 때마다m_pJsPlatform테이블이 빌드되며, XFA 버전/콜백 구성 내부에 중첩되는 대신 그 뒤에 적용됩니다
Version 2.13.1
추가됨 (Added)
- 이전의 v2.13.0 양식 채우기 콜백이 자동으로 소멸시켰던 호스트 이벤트 정보가 새로 표면화됩니다:
OnXfaUriAction,OnXfaPageCountChanged,OnXfaFocusChange,OnXfaEmail,OnXfaHttpRequest,OnXfaOpenFile,OnJavaScriptBeep,OnJavaScriptPrint,OnJavaScriptMail,OnJavaScriptSubmitForm; 모든 이벤트는 할당되지 않은 경우 기존 무동작(no-op) 동작으로 기본 설정되므로 기존 호스트는 영향을 받지 않습니다 TPdf.XfaFormPackets읽기 전용 속성이 이전에 선언되었으나 사용되지 않았던TXfaPacket/TXfaPacketList형식을 만족하는 모든 XFA 패킷(TXfaPacketList)의 일회성 스냅샷을 반환합니다- XFA 전용 PDFium 오류 코드인
FPDF_ERR_XFALOAD/FPDF_ERR_XFALAYOUT이 이제 바인딩되어LastPdfError를 통해 표시되므로 XFA 로드/레이아웃 실패에 대한 일반적인 "알 수 없는 오류"를 대체합니다
변경됨 (Changed)
FFI_DoURIActionWithKeyboardModifier가 이제 XFA 필드에서 URI를 쉘 실행하기 전에OnXfaUriAction을 검사하여 호스트에 거부권을 부여합니다(보안: 이전에는 악의적인 XFA 필드가 무조건 임의의 URL을 실행할 수 있었습니다); 할당되지 않은 핸들러는 기존ShellExecuteW기본값을 유지합니다DecodeFormFieldType이 이제 명시적인 8개 분기 분기 케이스 대신IsXfaFormField를 통해 XFA field 유형을 라우팅하므로, 열거형이 서수 오프셋에 의해FPDF_FORMFIELD_XFA_*와 정렬된 상태를 유지합니다
수정됨 (Fixed)
ValidatePdfA가 이제 PDF/A-2 및 PDF/A-3에 대해 객체 스트림을 계속 허용하면서, PDF 1.5 상호 참조 스트림 또는 객체 스트림을 사용하는 PDF/A-1 클레임을 새로운pvaiPdfA1Pdf15Structure문제와 함께 보고합니다
Version 2.13.0
추가됨 (Added)
- 전체 XFA (XML Forms Architecture) 런타임 지원:
TPdf.InitializeFormFill이 이제 14개의 버전 2FPDF_FORMFILLINFO콜백(FFI_DisplayCaret,FFI_GotoURL,FFI_PageEvent,FFI_PopupMenu,FFI_OpenFile,FFI_EmailTo,FFI_UploadTo,FFI_GetPlatform,FFI_GetLanguage,FFI_DownloadFromURL,FFI_PostRequestURL,FFI_PutRequestURL,FFI_OnFocusChange,FFI_DoURIActionWithKeyboardModifier)을 모두 구성하고IPDF_JsPlatform을 연결하여 XFA가 활성화된pdfium.dll이 동적 XFA 양식을 렌더링하고 스크립트할 수 있도록 합니다 - 이전에 주석에서만 참조되었던 XFA 상수(
FXFA_PAGEVIEWEVENT_*,FXFA_MENU_*,FXFA_SAVEAS_*,FPDF_FORMFIELD_XFA_*) 및TXfaPacket/TXfaSaveFormat형식을 선언하는 새로운Lib\FPdfXfa.pas유닛이 추가되었습니다 TPdf의 XFA 정적 패킷 리더:GetXfaPacketCount/GetXfaPacketName/GetXfaPacketContent/GetXfaPacketByName및GetXfaTemplate/GetXfaDatasets/GetXfaConfig가 XFA 활성화 런타임 없이도 XFAtemplate,datasets및config패킷을 원시 XML로 추출합니다 — 규격 감사 및 데이터 마이그레이션에 유용합니다- 기능 프로브: 전역
XfaFeaturesAvailable및 문서별TPdf.XfaRuntimeAvailable(FPDF_LoadXFA의 실제 성공 여부) 및TPdf.XfaStaticReadable(패킷 리더 내보내기 분석 여부) TPdfFormFieldType이fiXfa,fiXfaCheckBox,fiXfaComboBox,fiXfaImageField,fiXfaListBox,fiXfaPushButton,fiXfaSignature,fiXfaTextField로 확장되었으며,DecodeFormFieldType이 새로운FPDF_FORMFIELD_XFA_*값들과 일치합니다TPdf의 JavaScript 호스트 이벤트:OnJavaScriptAlert,OnJavaScriptResponse,OnXfaGotoUrl및OnXfaRuntimeMissing을 통해 호스트가 JS 대화 상자 및 XFA 탐색을 사용자 정의하거나 XFA 문서가 엔진을 실행할 수 없을 때 대응할 수 있도록 합니다- XFA 감지, 패킷 추출, 기능 프로빙 및 런타임 미싱 폴백 경로를 시연하는 새로운
XfaLabDelphi 샘플이 추가되었습니다
변경됨 (Changed)
TPdf.LoadDocument가 이제 입력에서 XFA 마커(AcroForm 사전의/XFA또는 카탈로그/NeedsRendering)를 사전 스캔하고, 발견된 경우 싱글톤 라이브러리가 처음 로드되기 전에EnableV8Engine := True를 설정하여pdfium.v8.dll을 자동으로 선택합니다; 일반pdfium.dll이 로드되면 프로세스를 전환할 수 없으므로OnXfaRuntimeMissing이 이 케이스를 알립니다TPdf.GetPageCount가 이제 정적 PDF 페이지 트리뿐만 아니라 동적 재페이지 후FFI_PageEvent를 통해 XFA 엔진이 보고하는 페이지 수를 반영합니다- XFA 문서가 열렸으나 런타임을 사용할 수 없는 경우,
InitializeFormFill이 이제 할당되지 않은 콜백과 함께 버전 2를 요청하는 대신version=1및xfa_disabled=1을 고정하여 이전의 잘못된 콜백 포인터 역참조 위험을 방지합니다
Version 2.12.2
수정됨 (Fixed)
ValidatePdfACompliance가 이제 확장 선언이 없는 표준pdfaid메타데이터를 수용하면서,pdfaExtension:schemas가 없는 상태로 사용된 사용자 정의 XMP 네임스페이스를 보고합니다- PDF/A-3 임베디드 파일 검증이 이제 filespec 사전에 최상위
/F및/UF항목을 모두 요구하고, 해당 이름을 확인할 때 중첩된/EF스트림 키를 무시합니다
Version 2.12.1
수정됨 (Fixed)
ValidatePdfACompliance가 이제 JavaScript, LZWDecode, Type1 및 관련 금지 이름과 일치시키기 전에 이스케이프된 PDF 이름 토큰을 디코딩하여 난독화되었으나 의미상 동일한 이름을 올바르게 보고합니다- PDF/A 인라인 이미지 검사가 이제 배열 및 이스케이프된 이름 형식을 포함하여
/LZWDecode, 약축된/LZW또는/Crypt를 사용하는/Filter및/F값을 거부합니다 - PDF/A 검증이 이제 금지된 스트림 필터가 있는 메타데이터 스트림,
/N구성 요소 수가 누락되었거나 일치하지 않는 OutputIntent ICC 프로필, 누락되거나 유효하지 않은/AFRelationship이 포함된 PDF/A-3 임베디드 파일 사양을 보고합니다
Version 2.12.0
추가됨 (Added)
- WinHttp의 암시적 기본값에 의존하는 대신, 느리거나 연결할 수 없는 타임스탬프 기관이 서명 스레드를 무기한으로 중지시키지 않도록 TSA HTTP 요청 시
WinHttpSetTimeouts를 통해 각 단계(확인/연결/전송/수신)에 대한 명시적 30초 타임아웃을 설정합니다 - 호출자가
TPadesSignOptions.Nonce를 생략할 때 PAdES B-T / B-LTA 타임스탬프 요청에 대한 요청당 nonce 파생: 모호한 카운터 + 시스템 시간 +GetTickCount64+ 프로세스 ID의 SHA-256 폴드가 이전의 고정된$100000000폴백을 대체하므로 동일한 밀리초 내에 실행되는 두 요청이 동일한 재생 방지 nonce를 재사용하지 않습니다 - 악의적이거나 손상된 입력으로 인해 zlib 압축 스트림이 메모리를 소모하는 것(zlib 폭탄)을 방지하기 위해
PdfInflate가 압축 해제 출력을 256 MiB로 제한합니다; 이 제한은 실제 PDF 스트림에 충분히 관대합니다
변경됨 (Changed)
TPdfView오버레이 블렌딩(검색 강조, 텍스트 선택, 단어 읽기, 스프레드 선택) 시 더 이상 픽셀당GetPixel/SetPixelV를 사용하지 않습니다; 이제 사각형 영역이 32-bpp 오프스크린TBitmap및 单일 패스의ScanLine을 통해 블렌딩되어 드로잉당 수천 개의 GDI 커널 크로싱을 제거하고 대규모 선택 작업을 반응형으로 만듭니다FPdfAsn1.TDerReader.ReadInteger가 이제 CMS/PAdES ASN.1 입력에서 정의되지 않은 시프트 동작으로 인해 잘못된 값을 계산하는 대신 8바이트보다 긴 INTEGER 필드(및 부호 비트가shl >= 64를 필요로 하는 8바이트 음수)를 거부하고 0을 반환합니다ParseTimeStampResp가 더 이상 요청 nonce를TPadesTimestamp.Nonce로 다시 반영하지 않습니다; 반환된 nonce를 검증하는 TSTInfo 워커가 구성될 때까지, 필드는 "검증되지 않음"을 나타내기 위해 0으로 유지되어 호출자에게 타임스탬프 응답이 새롭다는 잘못된 신뢰를 주지 않도록 합니다
수정됨 (Fixed)
PointsToPixels가 모든 DPI에 대해 입력을 변경 없이 반환했습니다: 나눗셈에 리터럴 72 대신PointsPerInch(상수 72)를 사용하여 수식을Result := Points로 축소시켰습니다; 이 헬퍼를 통해 points→device-pixel 크기 조정을 수행하는 외부 호출자는 이제 올바른Points × PixelsPerInch / 72를 얻습니다PdfMaxObjNum이 객체 스트림(PDF 1.5+ ObjStm)을 사용하는 문서에서 객체 수를 과소 평가했습니다:/ObjStm내부에 압축된 객체는N 0 obj마커를 운반하지 않으므로 원시 바이트 스캔에서 누락되었습니다, 이로 인해 새 객체에MaxObj+1을 할당하는 인젝터가 숨겨진 ObjStm 멤버와 충돌하여 파일을 손상시켰습니다; 이제 스캔 시 먼저 객체 스트림을 확장하므로 모든 객체 번호가 보입니다InjectPdfAMarkers가 더 이상 암호화된 문서에 PDF/A 적합성 클레임을 조작하여 생성하지 않습니다: PDF/A (ISO 19005-1 §7.1)는 암호화를 금지하며, 인젝터는 이전에는 바로 다음 검증에서 거부될 것임에도 불구하고 메타데이터를 포함한 소스 문서를 그대로 복사했습니다;HasEncrypt가 설정된 경우 이제 소스 문서를 변경 없이 통과시킵니다; 일반적인TPdf.SaveAsPdfA경로는 주입 전에 이미 암호화를 제거하므로(saRemoveSecurity) 이는 직접 호출자에게만 영향을 미칩니다PdfReadStreamBytes가 이제 결과 버퍼를 할당하기 전에 파일 전체 크기보다 큰/Length를 거부하여 손상되었거나 악의적인 간접 길이로 인해 일찍 발생하는 메모리 할당 경로를 차단합니다
Version 2.11.0
추가됨 (Added)
- PDFium
FPDF_FILEHANDLER레코드가 이제 C 헤더 레이아웃과 일치하도록 주석 대신 실제 필드로 6개의 콜백(Release,GetSize,ReadBlock,WriteBlock,Flush,Truncate)을 선언합니다;PFPDF_FILEHANDLER를 반환하거나 소비하는 XFA FFI 파일 전송 콜백(FFI_OpenFile/FFI_EmailTo/FFI_UploadTo/FFI_DownloadFromURL)은 Pascal 양식 채우기 레이어에서 여전히 구현되지 않은 상태로 남지만, 향후의 XFA 전송/업로드 경로를 위해 구조적으로 올바른 유형을 유지합니다 - PDFium 라이브러리 로드 및 언로드(
LoadLibrary/UnloadLibrary)가 이제 프로세스 전역 임계 영역에 의해 직렬화되므로, 두 개의TPdfFuture<T>워커 스레드(또는 메인 스레드와 경합하는 워커)가 동시에PDFiumLibrary=0을 목격하여 이중 바인딩되거나 한 스레드가 바인딩하는 중간에 DLL을 해제하는 것을 방지합니다 initialization/finalization섹션이 이제 유닛 언로드 시UnloadLibrary를 호출하므로, OS가 DLL을 해제하는 데만 의존하는 대신FPDF_DestroyLibrary가 정상적으로 실행(워커 스레드 조인, V8 격리 공간 폐기, 폰트/캐시 분해)되도록 보장합니다
변경됨 (Changed)
TPdf.SetActive가 이제 로드 중 발생하는 모든 예외(이전에는EPdfError만)를 흡수하므로, 양식/페이지 설정 중 발생하는 스트림 오류 또는 액세스 위반이 비결정적 상태의 불완전하게 로드된 구성 요소를 남겨두는 대신Active=False상태로 둡니다- PDFium 메타데이터 키 인수에 대해 일관된 문자 인코딩 사용:
TPdf.GetMetaText가 단순한AnsiString(Tag)캐스트 대신,GetViewerPreference및 로드 경로와 동일하게 FPCAnsiString/ DelphiUTF8Encode분기를 사용합니다 BytesToAnsi,AnsiToBytes,WriteBytes및WriteStr헬퍼 중복 제거:FPdfCompress가 이제FPdfPdfCommon에서 이들을 임포트하며(해당 유닛의WriteBytesToStream/WriteAnsiToStream별칭은 폐기됨)FPdfPdfa의 무분별한 3인수BytesToAnsi오버로드는 제거됩니다;FPdfAsn1은 암호화 레이어에 적합성 레이어 유닛 of 의존성이 새로 생기지 않도록 설계 상 로컬 복사본을 유지합니다
수정됨 (Fixed)
TPdf.LoadDocument(파일, 메모리,TBytes,TMemoryStream, 사용자 정의 스트림) 및TPdf.CreateDocument에서의 리소스 누수:FPDF_LoadDocument/FPDF_CreateNewDocument가 성공한 후InitializeFormFill또는ReloadPage가 예외를 발생시키면FActive가 여전히 False 상태였기 때문에 네이티브FPDF_DOCUMENT핸들이 누수되었습니다; 이제 각 경로가 로드 후 설정을try/except로 감싸고 실패 시 문서를 닫아 구성 요소를 비활성 상태로 안전하게 정리합니다- 더 직관적인 PDFium DLL 로드 진단:
CheckLoadLibrary가ERROR_BAD_EXE_FORMAT(193)을 감지하고 일반적인 OS 오류 대신DLLs/Win32또는DLLs/Win64빌드를 가리키며 32/64비트 아키텍처 불일치를 보고합니다;CheckGetProcAddress는 필수 함수가 누락되었을 때 단순한 OS "프로시저를 찾을 수 없음" 텍스트 대신 배포된pdfium.dll이 바인딩보다 오래되었음을 구체적으로 명시합니다
Version 2.10.1
수정됨 (Fixed)
- PAdES SignerInfo sid 표준화: 서명자 식별자가 이제 RFC 5652 §5.3
issuerAndSerialNumber형식(issuer Name + serialNumber, 둘 모두 서명자 인증서 DER에서 있는 그대로 추출)을 사용하며, Adobe Acrobat과 기타 준수 검증기가 거부했던 기존의 비표준subjectKeyIdentifier+ full-cert SHA-256 자리 표시자 형식을 대체합니다. 새로운 TbsCertificate DER 워커(ExtractIssuerAndSerial)는 issuer SEQUENCE와 serial INTEGER를 원시 TLV 바이트로 읽습니다 — 시리얼이 종종Int64범위를 초과하므로 원시 TLV가 필수입니다.subjectKeyIdentifier형식은 인증서 DER 파싱이 실패할 때에만 폴백으로 남습니다
변경됨 (Changed)
TCmsSignerId.SerialNumber: Int64가SerialDer: TBytes(원시 serialNumber TLV)로 대체되었습니다. CMS 빌더는 슬라이스된 TLV를IssuerAndSerialNumber에 있는 그대로 삽입하여 20바이트 CA 시리얼에서의Int64오버플로를 회피합니다(RFC 5280 §4.1.2.2 상한)
Version 2.10.0
추가됨 (Added)
- PAdES B-LT 장기 검증:
TPadesSignOptions.Level >= plB_LT일 때SignPadesBytes는 서명자 인증서와 전체 중간 체인을 담은/DSS사전(자체 서명 루트는 RFC 5652 §10.2.3에 따라 제외)을 운반하는 증분 업데이트를 추가하고,/Extensions /ESICLevel 1 마커(EN 319 142-1 §5.4.2)를 덧붙입니다 - PAdES B-LTA 보관 타임스탬프:
Level >= plB_LTA이고TsaUrl이 설정된 경우,/ByteRange가 파일 전체를 덮는 Document Time-stamp 서명 사전(/SubFilter /ETSI.RFC3161)이 추가되며 ESIC 마커는 Level 2로 승격됩니다. 이로써 4개의 PAdES 베이스라인 레벨(B-B, B-T, B-LT, B-LTA)이 완성됩니다 - 인증서 체인 수집:
ResolveWinSigner가 이제CertGetCertificateChain을 호출하여TPadesResolvedSigner.ChainCertDer를 중간 CA 인증서로 채웁니다. 따라서 B-LT/DSS /Certs는 외부 조회 없이 서명을 검증하는 데 필요한 모든 인증서를 운반합니다.CertFreeCertificateContext가 이제 바인딩되어 v2.8.0에서 지적된 sign당 하나의 컨텍스트 누수를 해결합니다 - PDF/A 통합 워크플로:
TPdf.SignPadesWithPdfA는 먼저 문서를 PDF/A로 변환하고(오늘날 라이브러리가 생성하는 최고 레벨) 이어서 요청된 PAdES 서명을 적용합니다 — EN 319 142-1 부속서 A.7이 권장하는 장기 보관 컨테이너 패턴입니다
Version 2.9.0
추가됨 (Added)
- PAdES B-T 신뢰할 수 있는 타임스탬프:
TPadesSignOptions에Level,TsaUrl,Nonce필드가 추가되었습니다.Level >= plB_T이고TsaUrl이 설정된 경우SignPadesBytes는 빌드된 CMS에서 서명값을 추출하고 그에 대해 RFC 3161 타임스탬프를 요청하며, 반환된 TimeStampToken을 SignerInfo unsigned 속성signature-time-stamp로 삽입합니다 — B-T 신뢰 시간 단계(EN 319 142-1 §6.3 요구사항 o)입니다 FPdfTsa: 크로스 플랫폼 RFC 3161 클라이언트 —BuildTimeStampReq(version 1, 서명값에 대한 SHA-256 messageImprint, nonce, certReq=true),ParseTimeStampResp(PKIStatus 0/1 수락, 2+ 거부, TimeStampToken ContentInfo를 있는 그대로 추출),RequestTimestamp(build+POST+parse 원샷).PadesTsaAvailable은 HTTP 백엔드가 없는 플랫폼에서 기능을 게이트합니다FPdfTsaWin: Windows WinHttp 백엔드, winhttp.dll에서 동적으로 바인딩(컴파일 시간 의존성 새로 추가 없음; HTTPS는 Windows 인증서 저장소에 의해 협상됨).FPdfCryptoWin의 동적 바인딩 패턴을 반영합니다FPdfCms:ExtractSignatureValue는 빌드된 CMS를 순회하여 원시 서명 옥텟(TSA 해시 입력)을 복구하고,AddSignatureTimestampToCms는 타임스탬프 속성을 운반하는 새로운unsignedAttrs [1](0xA1)로 ContentInfo를 재구성합니다. stage-1 검증기는 결과를 B-T 서명으로 인식합니다
Version 2.8.0
추가됨 (Added)
- PAdES B-B 서명 스택: 4개의 새로운 순수 Pascal/크로스 플랫폼 빌딩 블록(
FPdfSha256,FPdfAsn1,FPdfCms,FPdfCrypto)과 Windows CNG 백엔드(FPdfCryptoWin)로 인해TPdf.SignPades/SignPadesToStream이 PAdES B-B 서명을 엔드 투 엔드로 생성할 수 있게 되었습니다. 서명자 인증서는 Current User “MY” 저장소에서 SHA-1 지문으로 해결되며, RSA-PSS(권장), RSA PKCS#1 v1.5, ECDSA가 모두NCryptSignHash를 통해 지원됩니다 FPdfSha256: 자체 완비형 FIPS 180-4 SHA-256(Init/Update/Final + 원샷 헬퍼).FPC 3.2.2에는 SHA-2 유닛이 없으므로 라이브러리가 하나를 직접 소유하여 모든 CMS 코드 경로를 RTL 분기 없이 단일TSHA256Digest타입으로 유지합니다FPdfAsn1: DER 인코더(TDerWriter)와 리더(TDerReader)로 SEQUENCE/SET/OID/INTEGER/OCTET STRING/UTCTime/GeneralizedTime/컨텍스트 고정 태그를 다루며, CMS가 요구하는 정 길이 인코딩과 IMPLICIT 태그 처리를 제공합니다FPdfCms: CAdES SignedData 빌더(BuildSignedData)로 PAdES 베이스라인이 의무화하는 content-type, message-digest, signing-certificate-v2 signed 속성을 내보내며, 선택적으로 signing-time과 commitment-type-indication을 포함합니다. signedAttrs 다이제스트는 SET 태그(0x31) 형식으로 계산되고 RFC 5652 §5.4에 따라 IMPLICIT [0](0xA0) 태그로 재출력됩니다FPdfCrypto+FPdfCryptoWin:PadesCryptoAvailable/ResolvePadesSigner를 갖춘 암호화 백엔드 추상화이며, Windows 구현은 crypt32.dll / ncrypt.dll을 동적으로 바인딩합니다(컴파일 시간 DLL 의존성 새로 추가 없음).ECDSA 서명은 Windows IEEE P1363 r¦s 형식에서 CMS가 요구하는 DERECDSA-Sig-Value형식으로 재인코딩됩니다SignPadesBytes: 바이트 수준의 서명 주입 — 고정 폭의/Contentshex 슬롯을 예약하고 덮는/ByteRange를 계산하며 문서를 다이제스트하고 CMS를 빌드 및 삽입하고 증분 업데이트를 추가합니다. 검증기(v2.7.0)는 출력을 PAdES B-B 서명으로 인식합니다
Version 2.7.0
추가됨 (Added)
- PAdES 구조 검증기(ETSI EN 319 142-1 V1.2.1): 새로운
FPdfPades유닛과TPdf.ValidatePades메서드는/ByteRange에서 도달 가능한 서명값 사전을 검사하고,/Contents내부의 CMSSignedData를 CAdES detached 형태를 확인하기에 충분히 순회하며, 4개의 베이스라인 레벨(B-B, B-T, B-LT, B-LTA)과 Document Time-stamp 사전(/SubFilter /ETSI.RFC3161)을 감지합니다 - PAdES 조항 수준 문제 세트: 26개의
ppei*열거형이/SubFilter수용성(adbe.pkcs7.sha1과adbe.x509.rsa_sha1을 금지로 플래그),/ByteRange파일 커버리지,/Cert금지, CMSSignedData형태(단일 서명자, detached eContent, 버전 범위), 필수 signed 속성(content-type,message-digest,signing-certificate/v2), 금지 다이제스트(MD5, SHA-1),/Reason대commitment-type-indication상호 배제(요구사항 d), B-T 신뢰 시간 요구사항, B-LT/DSS+/Certs+ ESIC Level 1 마커, 그리고 B-LTA Document Time-stamp + ESIC Level 2 마커를 다룹니다 - DSS 인젝터:
TPdf.SaveAsPadesDss/SaveAsPadesDssToStream은 문서의 복사본에/DSS사전(/Certs,/OCSPs,/CRLs스트림 배열 포함)과/Extensions /ESIC마커(Level 1 또는 2)를 운반하는 증분 업데이트를 추가하되 원래 바이트를 보존합니다 — B-LT/B-LTA 검증 자료 삽입 단계(조항 5.4.2)입니다 - 크로스 플랫폼, 의존성 없는 단계: 검증기와 인젝터는 순수 Pascal이며 지원되는 모든 IDE(Delphi, Lazarus, FPC, C++Builder)에서 작동합니다.이 릴리스에는 암호화 백엔드가 필요하지 않으며 새로운 DLL 의존성도 도입되지 않습니다
Version 2.6.0
변경됨 (Changed)
- 표준 간 중복 제거: 7개의 추가 중복 헬퍼 함수(PdfEnclosingObjNum, PdfDictRefNum, PdfExpandObjectStreams, PdfTextStr, ExtractLiteralString, ExtractXmpAttr)가 개별 표준 유닛에서 제거되어
FPdfPdfCommon으로 통합되었으며, 약 300줄의 복사-붙여넣기 유지 보수 부담이 감소했습니다 - PreflightReport 품질: 이전에 일반 “missing marker” 카테고리로 떨어지던 PDF/X 및 PDF/E 콘텐츠 클래스 문제가 이제 정확한 Content/Metadata/Security 카테고리와 조항별 권장사항을 갖습니다(두 표준에 걸쳐 약 15개 열거형)
- PDF/E 및 PDF/R 테스트 커버리지: 이전에 커버리지가 0이던 6개의 열거형이 긍정 테스트를 얻었습니다(
pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden,pveiEmbeddedFilesForbidden,pvriBadHeader,pvriProhibitedInfoEntry) - Lazarus 빌드 수정:
Tests.PdfVT(v2.5.x에서 추가된 Delphi 전용 DUnitX 유닛)가 이제 Lazarus 프로젝트에서 제외되어 컴파일이 복구되었습니다
Version 2.5.3
추가됨 (Added)
- OutputIntent 완전성(PDF/X-4 §6.2.4):
pvviOutputIntentScheme은/S가/GTS_PDFX가 아닌 OutputIntent를 플래그합니다.pvviOutputIntentMissingIdentifier는 누락된/OutputConditionIdentifier를 플래그합니다 - PDF/VT-2 Reference XObject 예외(§6.2.2):
pvviReferenceXObjectForbidden는 X-5g/5pg 베이스 상에서 Reference XObject를 합법적으로 사용할 수 있는PDF/VT-2파일에 대해 더 이상 발생하지 않습니다 - MIME boundary 문자 검증(RFC 2046 §5.1.1):
vtmviBoundaryInvalidChar은 문자가 bchars 세트를 벗어나거나 길이가 70을 초과하는 boundary를 플래그합니다
수정됨 (Fixed)
InjectPdfVTMarkers가 이제 저장 옵션에서 Info/CreationDate와/ModDate를 기록하므로, 생성된 파일이 거짓pvviInfoModDateMismatch없이ValidatePdfVTCompliance를 왕복합니다(인젝터는 이전에 XMP 날짜를 다시 기록했지만 Info 사전 날짜는 오래된 상태로 남겨두었습니다)
Version 2.5.2
추가됨 (Added)
- Info
/ModDate일관성(§6.3 NOTE 2, PDF/X-4 베이스):pvviInfoModDateMismatch는 PDF 날짜에서 XMP 날짜로 정규화한 후xmp:ModifyDate와 일치하지 않는 Info 사전/ModDate를 플래그합니다 - PDF/VT-2s 인라인 청크 적합(부속서 A.2): MIME 검증기가 이제 모든 인라인
application/pdf파트에 대해ValidatePdfVTCompliance를 실행하고 비-PDF/VT 본문을vtmviInlinePdfNotPdfVT로 플래그합니다
Version 2.5.1
추가됨 (Added)
- DParts 청킹 검증(ISO 16612-2 §6.5 표 4):
pvviDPartsBadChunking은 최종이 아닌 하위 배열이 정확히 8192개 항목이 아니거나 마지막 하위 배열이 1..8192를 벗어나는/DParts배열을 플래그합니다 - RecordLevel 스트림 간 일관성(부속서 A.2): PDF/VT-2s MIME 검증기가 이제 각 인라인 PDF의
/RecordLevel을 추출하고vtmviRecordLevelMismatch로 불일치를 플래그하며 기존 NodeNameList 검사를 보완합니다 - 반복 그래픽 객체 힌트(§6.7):
pvviGtsScopeInvalidValue는 {SingleUse, Record, File, Stream, Global, Unknown}을 벗어나는/GTS_Scope를 플래그합니다.pvviGtsScopeRecordWithoutRecordLevel은/RecordLevel없는/Record를 플래그합니다.pvviGtsXidNotUuid는 RFC 4122 uuid: URI가 아닌/GTS_XID를 플래그합니다.pvviGtsEnvMissing은/GTS_Scope가 Stream 또는 Global일 때 누락된/GTS_Env를 플래그합니다(§6.7.4) - MIME 전방 참조 감지(부속서 A.2):
vtmviForwardReference는 스트림에서 더 이른 첨부 파트로 도입되지 않은 파일 이름(/EF /F를 통해)을 인용하는 인라인 PDF를 플래그합니다
수정됨 (Fixed)
FPdfPdfvtMime의ExtractNodeNameListFromPdf와ExtractRecordLevelFromPdf가AnsiFindKey가 반환한 1 기반 오프셋이 확장된 PDF에 대한 절대 바이트 오프셋으로 취급되던 반복되는 off-by-one 오류를 해결했습니다
Version 2.5.0
추가됨 (Added)
- PDF/VT Document Part Metadata(DPM, ISO 16612-2 §6.6):
TPdfVTSaveOptions에DpmEntries와DpmTarget이 추가되어 라이터가 합성된 DPart 노드에/DPM사전을 부착할 수 있습니다.키 이름 검증은 부속서 E의 제2클래스 접두사 규칙과 검증기 측 §6.6 NMTOKEN / 고유성 /GTS_Managed형태 규칙에 대해 이루어집니다 - PDF/VT-2s 스트리밍 교환(부속서 A): 새로운
FPdfPdfvtMime유닛이 인라인 PDF/VT 청크와 첨부 ICC 프로파일을 운반하는multipart/mixedMIME 봉투를 위해BuildPdfVT2sStream과ValidatePdfVT2sStream을 제공합니다.X-PDFVT-Stream-version: 1헤더 순서 규칙과 스트림 간NodeNameList일관성 검사를 갖춥니다 TPdf.ValidatePdfVT가 이제FPDFDoc_GetJavaScriptActionCount를 통해 권위 있는 JavaScript-action 개수를 수행하여 바이트 수준/JavaScript이름 스캔을 보완합니다
수정됨 (Fixed)
- PDF/X-4 베이스에서의 PDF/VT
Trapped정확성:ptvUnknown열거값이 제거되고(PDF/X-4는/Unknown을 금지),ptvUnspecified는 쓰기 시/False로 정규화되며(누락된/Trapped도 금지), 새로운pvviTrappedInvalid문제가 부재 또는Unknown값을 플래그합니다 ValidatePdfVTCompliance가 이제 스캔 전에 객체 스트림(PdfExpandObjectStreams)을 확장하므로 압축 ObjStm 내부에 저장된 카탈로그, OutputIntent 또는 Metadata 사전(PDF 1.5+, PDF/X-4 생산자에 전형적)이 바이트 수준 조회로 도달 가능합니다
변경됨 (Changed)
- PDF/VT-1이 이제 전체 PDF/X-4 콘텐츠 금지를 상속합니다:
pvviAcroFormForbidden(/AcroForm또는/XFA),pvviAdditionalActionsForbidden(카탈로그/AA),pvviMissingTrimBox,pvviReferenceXObjectForbidden(Reference XObject, X-5g/5pg 전용) - 표준 간 중복 제거:
BuildDictObj,IccComponentCount, 내장 sRGB ICC 프로파일(GetSrgbIccProfile),PdfTextStr,PdfEnclosingObjNum,PdfDictRefNum,PdfExpandObjectStreams가FPdfPdfa/FPdfPdfx/FPdfPdfvt내의 3중 복제 로컬 사본에서FPdfPdfCommon의 단일 정규 홈으로 승격되었습니다.3144바이트 ICC 리터럴은 이제 코드베이스에 정확히 한 번만 존재합니다
Version 2.4.0
수정됨 (Fixed)
InjectPdfUaMarkers가 cross-reference-stream 베이스에서 트레일러의/Info참조를 누락하지 않도록 수정되었습니다: 로컬의SourceTrailerInfoRef(xref-stream 폴백이 없었던 부분)가 공용PdfSourceTrailerInfoRef(v2.0.0부터 폴백을 보유한 PDF/A 복사본에서 마이그레이션됨)로 대체되었습니다- 공용
PdfReadStreamBytes가 이제 간접/Length N G R참조(로컬 PDF/A 복사본에서 포팅됨)를 처리하여, 간접 Length를 사용하는 도구(Acrobat, Ghostscript)가 생성한 XMP 메타데이터 스트림을 PDF/VT, PDF/R 및 PDF/E 검증기에서 잘못 읽거나 건너뛰지 않도록 수정되었습니다
변경됨 (Changed)
- 크로스 표준 중복 제거:
FPdfPdfa및FPdfPdfx내의 로컬PdfReadTrailer복사본,FPdfPdfa및FPdfPdfua내의 로컬SourceTrailerInfoRef복사본,FPdfPdfa내의 로컬PdfReadStreamBytes가 모두 삭제되었으며, 공용FPdfPdfCommon버전이 모든 곳에 적용됩니다. 이로써 약 330행의 중복 코드가 제거되고 복사본 동기화 유지를 위한 유지 관리 부담이 해소되었습니다 - PDF/X 테스트 부채 해결: 이전에 테스트 커버리지가 없었던 7개의 content-class 열거형에 대한 긍정 테스트가 보강되었습니다(
pvxiLzwForbidden,pvxiJavaScriptForbidden,pvxiFormFieldsForbidden,pvxiAdditionalActions,pvxiEmbeddedFilesForbidden,pvxiMissingTrimBox,pvxiTrappedNotSet)
Version 2.3.0
변경됨 (Changed)
- PDF/A 테스트 부채 해결 지속: 테스트 커버리지가 없었던 3개의 열거형에 대한 긍정 테스트가 추가되었습니다;
pvaiForbiddenRenderingIntent(§6.2.9)는 content stream 내의 비표준 rendering-intent 이름을 탐지합니다;pvaiJpeg2000Violation(§6.2.2)은 Part 2에서/NumComponents가 {1,3,4} 범위를 벗어난 JPXDecode 이미지를 탐지합니다;pvaiInlineImageLzwForbidden(§6.1.10)은 Part 2에서 LZW 필터를 사용하는 인라인 이미지를 탐지합니다
Version 2.2.0
변경됨 (Changed)
- 상호 참조 스트림(Cross-reference-stream) 회귀 테스트: 기존
Validate_XrefStreamTrailer_DetectsConformance가 이제 카탈로그/Metadata참조가 확인되고 XMPpdfaid:part가 (단순히/Root+/ID뿐만 아니라) xref-stream 기반에서 읽히는지도 검증하며; 새로운InjectPdfA_XrefStreamBase_RoundTrips테스트가 v2.0.0에 추가된 인젝터의 xref-stream 경로를 보호하고; 두 개의 상호 표준 테스트(PdfE_XrefStreamBase_NotRejectedAsUnparsable,PdfR_XrefStreamBase_NotRejectedAsUnparsable)가 PDF/E 및 PDF/R 검증기가 더 이상 xref-stream PDF를 파싱 불가능한 것으로 거부하지 않음을 검증합니다 - PDF/A 테스트 부채 청산:
Validate_MinimalPdf_FlagsRequiredMarkers가 최소한의 베어(bare) PDF가pvaiMissingPdfAIdentifier,pvaiMissingOutputIntent,pvaiMissingIccProfile,pvaiMissingXmpMetadata및pvaiMissingXmpDates를 트리거함을 단언(assert)하여; 이미 동등한 테스트를 제공하고 있던 PDF/E 및 PDF/X 검증기와의 대칭성 공백을 메웁니다; 커버리지가 없었던 두 개의 열거형인pvaiUnembeddedFont및pvaiSubsetMissingCidSet에 대한 양성 테스트도 추가되었습니다
Version 2.1.0
수정됨 (Fixed)
- PDF/E가 v2.0.0 상호 참조 스트림 수정에서 실수로 누락되었습니다:
InjectPdfEMarkers및ValidatePdfECompliance모두 여전히AcceptXrefStream없이PdfReadTrailer를 호출했기 때문에 PDF/E 인젝터가 PDF 1.5+ 출력(pdfium의SaveAsCopy기본값)에서 경고 없이 실패했습니다; 두 호출 위치 모두 이제True를 전달합니다 - 공유
PdfReadTrailer상호 참조 스트림 대체 작동(fallback)이 이제 PDF/A 및 PDF/X 로컬 복사본이 이미 가지고 있던/Type /XRef가드를 전달하므로, 관련 없는 딕셔너리를 가리키는 손상된startxref오프셋이 트레일러로 잘못 파싱되는 대신 깔끔하게 실패합니다 ValidatePdfUaCompliance(v2.0.0)의 간접 참조/Lang해석기가 도달할 수 없었습니다:PdfFindObjDict는<<딕셔너리만 찾지만,/Lang문자열 객체는 딕셔너리가 없는(...)또는<...>입니다; 이를 문자열 토큰을 찾는 직접 객체 본문 스캔으로 대체했습니다
변경됨 (Changed)
- 공유
FPdfPdfCommon버전과 바이트 단위로 동일한 복사본이었던 7개의 중복된 데드 섀도우(dead-shadow) 헬퍼(PdfStructureBytes, PdfHasName, PdfCountName, BuildStreamObj)가FPdfPdfa및FPdfPdfua에서 제거되었습니다 — 이제 공유 버전이uses를 통해 모든 곳에 적용됩니다
Version 2.0.0
수정됨 (Fixed)
- 상호 표준 사일런트 실패(silent failure): PDF/UA, PDF/X, PDF/VT 및 PDF/R 마커 인젝터와 검증기에서 사용되는 공유
PdfReadTrailer헬퍼가 이제AcceptXrefStream매개변수를 허용하며,trailer키워드가 없을 때(PDF 1.5+) 상호 참조 스트림 객체 딕셔너리로 대체 작동합니다; 이전에는 상호 참조 스트림을 사용하는 pdfium의SaveAsCopy출력으로 인해 모든 마커 인젝터가 경고 없이 실패했습니다(소스 바이트가 변경되지 않은 채 그대로 복사되었음에도 호출이 여전히 성공을 반환함); PDF 2.0 기반이 항상 상호 참조 스트림인 PDF/R-1.0 검증기는 사실상 아무 동작도 수행하지 않았습니다; 모든 표준이 혜택을 받을 수 있도록 PDF/A 검증기의 성숙한 구현이 공유 헬퍼로 포팅되었습니다 InjectPdfUaMarkers및InjectPdfAMarkers의 트레일러 딕셔너리 스캔이 이제 단순한>>검색 대신 깊이를 인식하는PdfDictEnd를 사용하므로, 중첩된 딕셔너리(예:/Encrypt << ... >>)를 포함하는 트레일러가 뒤따르는/Info항목 앞에서 더 이상 조기 종료되지 않습니다
변경됨 (Changed)
TPdf.ValidatePdfUa가 이제 정밀한 Pdfium 객체 모델인pvuaiPdfiumFontNotEmbedded가 이미 트리거된 경우 대략적인 바이트 수준의pvuaiFontNotEmbedded를 억제하므로, 프리플라이트 보고서에 동일한 결함에 대한 거의 중복된 “embed your fonts” 행이 두 개 실리지 않습니다pvuaiLangInvalidFormat(§7.2)가 이제 간접 참조/Lang(N 0 R)을 해당 문자열 객체로 해석하고 콘텐츠를 검증하므로, 간접적으로 참조되는 언어 태그가 더 이상 탐지되지 않는 사각지대로 남지 않습니다
Version 1.99.0
수정됨 (Fixed)
pvuaiLangInvalidFormat(§7.2)이 더 이상 16진수로 인코딩된/Lang문자열을 무비 통과시키지 않습니다: UTF-16BE 쌍(FE FFBOM 포함) 및 일반 ASCII 16진수 문자열이 이제 디코딩되어 리터럴(...)문자열과 동일한 BCP 47 문법 검사를 거치므로 잘못된 형식의 16진수/Lang이 감지되고 규격을 준수하는 것(예: UTF-16BEen-US)은 더 이상 플래그 지정될 위험이 없습니다
변경됨 (Changed)
pvuaiFontMissingToUnicode(§7.21.7)가 이제 조항에 나열된 네 가지 예외 조건과 일치하도록/WinAnsiEncoding및/MacRomanEncoding과 함께/MacExpertEncoding을 예외로 처리합니다
Version 1.98.0
추가됨 (Added)
pvuaiNeedAppearancesTrue(§7.18.4)는/NeedAppearances플래그가 true인 AcroForm에 플래그를 지정합니다. 이로 인해 위젯의 외관이 안정적으로 고정되지 않으며 보조 기술이 이를 구조 트리와 연결할 수 없습니다. PDF/A 검증기에서 포팅되었으며 스캔 범위를 좁히기 위해/AcroForm이 있는 경우에만 작동하도록 제어됩니다
변경됨 (Changed)
- veraPDF corpus 회귀: §7.20 Reference-XObject pass+fail 쌍과 §7.21.4.2 서브셋 CharSet/CIDSet pass+fail 쌍을
Live_Corpus_ValidatePdfUaMatchesConformance에 연결했습니다. §7.21.7 ToUnicode-forbidden-value 및 §7.18.6.2 media-clip 통과 샘플도 오탐 가드로 연결되었습니다(실패 샘플은 바이트 수준 스캔이 감지하지 못하는 딕셔너리 레이아웃을 사용하므로 통과하는 측면만 연결됨) - corpus 통과 경로 단언 리스트에 15개의 새로운 오탐 방지 가드가 추가되어 이제 모든 활성
pvuai*바이트 수준 및 구조 검사가 규격을 준수하는 샘플에 대해 수행됩니다(이전에는 60개의 활성 이슈 중 약 30개만 가드 처리됨).pvuaiLangInvalidFormat가드는 바이트 수준 검사기가 디코딩할 수 없는 16진수 인코딩/Lang문자열을 보수적으로 플래그 처리하기 때문에 의도적으로 제외되었습니다
Version 1.97.0
수정됨 (Fixed)
ValidatePdfUaStructureElements안정성 강화:EnclosingTable부모 체인 탐색 시 이제 요소 수로 제한되는 홉 카운터가 포함되어 합성 구조 요소 배열의 잘못된ParentIndex순환이 호출자를 더 이상 대기 상태로 정지시키지 않습니다.ValidatePdfUaPageContentTaggingmarked-content-ID 배열 할당이 이제 100만 개 항목으로 제한되어 잘못되거나 악의적인MarkedContentID로 인해 수 GB 수준의 메모리가 할당되는 것을 방지합니다
변경됨 (Changed)
pvuaiOrderedListMissingListNumbering열거형 문서 주석이 이제 검사 동작을 정확하게 설명합니다:ListNumbering값이 ISO 32000-1 Table 347 세트를 벗어나는L요소에 플래그를 지정합니다(속성이 없는 경우는 플래그 지정하지 않음). 이전 주석은 속성이 누락된 순서 있는 목록도 감지하는 것처럼 암시했으나 실제 구현은 그렇지 않습니다- 두 개의
7.21.3.3-t02WMode-mismatch corpus 실패 샘플이 이제Live_Corpus_ValidatePdfUaMatchesConformance에 연결되었습니다 — v1.95.0부터 CMap 스트림이 FlateDecode로 압축 해제되므로 딕셔너리 대 콘텐츠 비교가 이제 읽기 가능한 쪽에서 실행됩니다. 오래된 “연결되지 않음” 주석은 제거되었습니다
Version 1.96.0
추가됨 (Added)
- 크로스 표준 일관성:
TPdf.ValidatePdfUa에 PDF/A 검증기로부터 포팅된 두 가지 검사가 추가되었습니다.pvuaiAnnotationFlagsViolation(§7.18.1)은 보조 기술의 읽기 흐름을 깨뜨리는 Hidden / Invisible / NoView 플래그를 가진 예외 대상이 아닌 주석에 플래그를 지정합니다.pvuaiActionTargetMissing(§7.18.5)는 필수 대상 키(/F+/D, /URI, /F)가 누락되어 보조 기술(AT)이 링크를 사용할 수 없는 GoToR / URI / SubmitForm 액션에 플래그를 지정합니다
수정됨 (Fixed)
- 페이지 간 구조 트리 병합:
TPdf.ValidatePdfUa의AllElems누적 루프가 이제 각 요소의ParentIndex를 페이지 로컬 배열에서 병합된 배열로 재조정합니다. 이것이 없으면 페이지 2의 자식 요소들이 페이지 1의 슬라이스를 가리키는 페이지 로컬 인덱스를 유지하여 모든 ParentIndex 종속적 검사(표/목록 구조, §7.4.4 H-child 수, EnclosingTable)가 알 수 없게 손상됩니다 - RoleMap 파싱:
PdfReadRoleMapPairs가 값이 간접 참조(N 0 R) 또는 배열([...])인 경우에도 더 이상 전체 키/값 스캔을 중단하지 않습니다 — 둘 다 ISO 32000-1 14.8.5.1에 따른 유효한 RoleMap 형식입니다. 이제 중단(Break)하는 대신 해당 항목만 건너뛰어(Continue) 간접/배열 항목 뒤에 매핑된 유형에서 발생하는pvuaiRoleMapUnresolved오탐을 제거합니다
변경됨 (Changed)
FPdfPreflightReport: 이전에 범용 “마커 누락” 범주 및 권장 사항으로 누락되었던 18개의 활성TPdfUaValidationIssue값이 이제 정확한 범주(Structure / Content / Metadata / Security) 및 조항별 권장 사항을 갖습니다. 또한PDFSpecComplianceMatrix.md의puaNone / pua1→pucNone / puc1오타를 수정했습니다
Version 1.95.0
변경됨 (Changed)
TPdf.ValidatePdfUa회수 및 안전성 검사 패스: §7.21.3.3pvuaiCMapWModeMismatch검사와 §7.21.7pvuaiToUnicodeForbiddenValue검사가 이제 스캔 전에 FlateDecode로 압축된 CMap / ToUnicode 스트림의 압축을 해제합니다(이전에는 압축되지 않은 스트림만 판정하여 오탐 누락이 발생함). 공유 헬퍼인PdfInflate/PdfReadAndDecodeStream이FPdfPdfa/FPdfPdfx에서FPdfPdfCommon으로 수준이 올라가 모든 적합성 유닛이 단일 복사본을 공유합니다
추가됨 (Added)
pvuaiSubsetCharSetEmpty(§7.21.4.2)는 문자열 값이 비어 있는/CharSet키를 갖는 Type 1 서브셋FontDescriptor에 플래그를 지정합니다 — 기존pvuaiSubsetMissingCharSet은 키가 누락된 경우만 감지했습니다. CID가 없는 글꼴은 합법적으로 비어 있는 비트맵을 가질 수 있으므로 비어 있는/CIDSet에는 플래그를 지정하지 않습니다
Version 1.94.0
추가됨 (Added)
- 두 번째 패스
TPdf.ValidatePdfUa감사에서 조항별 검토와 PDF/UA 경로에서 사용되지 않았으나 래핑되어 있던 기존 Pdfium 네이티브 API의 재스캔을 통해 드러난 6개의 ISO 14289-1 간극을 해결했습니다.pvuaiHeadingFormatInvalid(§7.4.3)은 H로 시작하지만 순수한 아라비아 숫자 대신 구분 기호, 공백 또는 로마 숫자를 포함하는 사용자 정의 제목 태그에 플래그를 지정합니다.pvuaiMissingDocumentOutline(§7.17, should)은 북마크 아웃라인이 없는 다중 페이지 문서에 플래그를 지정합니다(단일 페이지 문서는 제외).pvuaiStructElementLangInvalid(§7.2)는 유효한 BCP 47 태그가 아닌 구조 요소/Lang값에 플래그를 지정합니다.pvuaiWidgetMissingPrintField(§7.14 / §7.18.4)는PrintField속성 소유자가 누락된 Widget 구조 요소에 플래그를 지정합니다.pvuaiLinkNotInStructureTree(§7.18.5)는/Subtype /Link주석이 Link 구조 요소로 노출되지 않는 문서에 플래그를 지정합니다.pvuaiPdfiumAnnotationMissingContents및pvuaiPdfiumLinkMissingContents(§7.18.1 / §7.18.5)는 숨겨진 주석, crop-box 외부 주석, Popup 및 Widget 주석을 예외 처리하는 정밀한 Pdfium 오브젝트 모델 주석 스캔을 추가하여,/F플래그나/Rect를 읽을 수 없는 바이트 수준 휴리스틱의 오탐을 제거합니다
Version 1.93.0
추가됨 (Added)
TPdf.ValidatePdfUa가 이제 PDF/A 라운드 7 아키텍처를 미러링하여 바이트 수준 검사기 위에 Pdfium 오브젝트 모델 패스를 얹습니다:FPDFTextObj_GetFont→FPDFFont_GetIsEmbedded를 통해 모든 페이지의 텍스트 오브젝트를 탐색하고(pvuaiPdfiumFontNotEmbedded, §7.21.4),FPDFText_HasUnicodeMapError(pvuaiPdfiumUnicodeMapError, §7.21.7) 및FPDFText_GetUnicode(pvuaiPdfiumNotDefGlyph, §7.21.8)를 통해 모든 문자를 스캔합니다 — 이는 폰트 프로그램이 아예 없거나/ToUnicode가 전혀 나타나지 않을 때만 활성화되는 바이트 수준 휴리스틱보다 더 정확합니다. 이 탐색은 세 가지 레벨에서 단축(short-circuit)됩니다: 세 가지 Pdfium 계층 이슈가 모두 설정되면 페이지 루프를 종료하고, 첫 번째 내장되지 않은 글꼴 발견 시 오브젝트별 루프를 종료하며,UnicodeMapError가 이미 발생한 경우 문자 스캔 시.notdef패스를 건너뜁니다. PDF/UA는 Pdfium 오브젝트 모델 계층이 없는 마지막 PDF 표준 검증기였습니다
Version 1.92.0
추가됨 (Added)
Tests.PdfR을 작성했습니다 — 헤더 유효성 검사,ObjStm금지, 래스터 마커 감지 및 깨끗한 파일의 오탐 방지 가드를 포괄하는 PDF/R-1 검증기(FPdfPdfr)를 위한 첫 번째 테스트 파일입니다. 이제 6개의 모든 PDF 표준 테스트 제품군이 전용 테스트 파일을 갖습니다: PdfA(80), PdfUa(101), PdfX(7), PdfE(5), PdfVT(15), PdfR(4) = 총 212개 테스트
Version 1.91.0
추가됨 (Added)
ValidatePdfE및ValidatePdfVT가 이전에 PDF/A, PDF/UA 및 PDF/X 검증기에서만 제공되던 콘텐츠 수준의 검사를 획득했습니다:pveiLzwForbidden,pveiJavaScriptForbidden,pveiFormFieldsForbidden(PDF/E 전용),pveiEmbeddedFilesForbidden(PDF/E 전용),pveiOpiForbidden,pvviLzwForbidden,pvviJavaScriptForbidden,pvviEmbeddedFilesForbidden,pvviOpiForbidden.TPdf.ValidatePdfE및TPdf.ValidatePdfVT도FPDFFont_GetIsEmbedded를 통해 페이지 텍스트 오브젝트를 탐색하여 첫 번째 내장되지 않은 글꼴에서 단축 종료되는 Pdfium 오브젝트 모델 계층(pveiPdfiumFontNotEmbedded/pvviPdfiumFontNotEmbedded)을 얻었습니다
Version 1.90.0
추가됨 (Added)
TPdf.ValidatePdfX가 이제 바이트 수준 검사기 위에 Pdfium 오브젝트 모델 패스를 얹습니다:FPDFTextObj_GetFont→FPDFFont_GetIsEmbedded를 통해 모든 페이지의 텍스트 오브젝트를 탐색하고 포함되지 않은 글꼴을pvxiPdfiumFontNotEmbedded로 보고합니다 — 이는 폰트 프로그램이 없을 때만 활성화되는 바이트 수준 휴리스틱보다 더 정확합니다. 탐색은 처음으로 포함되지 않은 글꼴을 발견할 때 단축 종료됩니다
변경됨 (Changed)
TPdf.ValidatePdfUa구조 트리 탐색:pvuaiUntaggedContent가 이미 발견되면 후속 페이지에서 (표시 콘텐츠 ID 클레임 맵을 빌드하고 모든 텍스트/이미지 개체를 교차 검증하는) 페이지별ValidatePdfUaPageContentTagging호출을 건너뜁니다 — 구조 요소는 페이지 간 검사(Note unique ID, 제목 시퀀스)를 위해 계속 수집되지만 비용이 많이 드는 페이지별 콘텐츠 태깅 패스는 조기 종료됩니다
Version 1.89.0
변경됨 (Changed)
TPdf.ValidatePdfAPdfium 오브젝트 모델 계층 성능: 페이지/오브젝트 탐색이 이제 세 가지 레벨에서 단축 종료됩니다 — 모든 관련 Pdfium 계층 이슈가 이미 발견되면 페이지 루프가 종료되고, 오브젝트별 이슈(글꼴 내장 + 투명도)가 모두 설정되면 오브젝트별 루프가 종료되며,UnicodeMapError가 이미 발생한 경우 텍스트 페이지 문자 스캔이.notdef패스를 건너뜁니다.Assigned()API 가용성 검사 및 적합성 플래그가 매 페이지/오브젝트/문자마다 재평가되는 대신 루프 전에 로컬 부울로 한 번 캐싱됩니다. 대규모 규격 비준수 문서의 경우 탐색이 모든 페이지를 스캔하는 대신 첫 페이지 이후 중단될 수 있으며, 규격을 준수하는 문서의 경우 페이지당 오버헤드가 낮아집니다(중복된Assigned호출 없음)
Version 1.88.0
추가됨 (Added)
ValidatePdfX가 파일 형식 마커를 넘어 PDF/X가 부과하는 인쇄 교환 제한 사항을 다루는 8개의 새로운 콘텐츠 수준TPdfXValidationIssue값을 얻었습니다:pvxiLzwForbidden(/LZWDecode),pvxiJavaScriptForbidden(/JavaScript),pvxiFormFieldsForbidden(/AcroForm//XFA),pvxiAdditionalActions(/AA),pvxiEmbeddedFilesForbidden(/EmbeddedFiles//FileAttachment),pvxiOpiForbidden(/OPI//Alternates),pvxiMissingTrimBox(페이지에/TrimBox없음),pvxiTrappedNotSet(/Trapped가 없거나/Unknown). PDF/X 검증기는 이전에는 XMP/OutputIntent 마커만 확인했으나 이것이 첫 번째 콘텐츠 수준 패스입니다. 공유 헬퍼인PdfStructureBytes/PdfHasName/PdfCountName이FPdfPdfCommon에 추가되어 모든 적합성 유닛이 사용할 수 있습니다
Version 1.87.0
추가됨 (Added)
- PDF/UA 유효성 검사가 이제 ISO 14289-1 §7.21.3 복합 폰트 규칙을 포함합니다:
pvuaiCidSystemInfoMismatch는 내장된 CMap과 하위 CIDFont가Registry/Ordering에서 일치하지 않거나 CIDFont의Supplement가 CMap의 값을 초과하는 Type0 폰트에 플래그를 지정하고,pvuaiCMapNotEmbedded는 ISO 32000-1 Table 118의 사전 정의된 CMap이 아닌 이름으로 참조된(Encoding또는UseCMap으로) CMap에 플래그를 지정하며,pvuaiCMapWModeMismatch는 딕셔너리의WMode가 스트림 내용의 WMode와 다른 내장 CMap에 플래그를 지정합니다
수정됨 (Fixed)
- §7.21.3.2
pvuaiCidFontMissingCidToGidMap검사가Subtype키/값 쌍이 개행으로 구분된 CIDFontType2 딕셔너리를 누락했으며, 이제Identity이외의CIDToGIDMap이름 값도 플래그 처리합니다
Version 1.86.0
추가됨 (Added)
- PDF/UA 유효성 검사가 이제 ISO 14289-1 §7.21.6 TrueType 인코딩 규칙을 포함합니다:
pvuaiTrueTypeEncodingInvalid는Encoding이 없거나MacRomanEncoding또는WinAnsiEncoding이 아닌(직접 또는BaseEncoding을 통해) 비기호성 TrueType 폰트에 플래그를 지정하고,pvuaiSymbolicTrueTypeEncoding은 비표준Encoding이름을 가진 기호성 TrueType 폰트에 플래그를 지정합니다
Version 1.85.1
변경됨 (Changed)
- ISO 14289-1 §7.18.3 탭 순서 검사
pvuaiMissingTabsOrder가 이제 페이지별로 실행됩니다: 주석이 있는 모든 페이지는 자체 페이지 딕셔너리에/Tabs /S를 선언해야 하므로, 규격에 맞는 인접 페이지가 없는 페이지를 더 이상 가리지 않습니다
Version 1.85.0
추가됨 (Added)
- PDF/UA 유효성 검사가 이제 ISO 14289-1 §7.15에 따라 동적 XFA 양식과 정적 XFA 양식을 구별합니다:
pvuaiXfaDynamic은 XFA 구성이dynamicRender를required로 설정한 양식에 플래그를 지정합니다
변경됨 (Changed)
- 기존의 XFA 존재 여부 후보 플래그
pvuaiXfaPresent는 폐기되어 더 이상 발생하지 않습니다(정적 XFA는 §7.15를 준수함). API 호환성을 위해 열거형 값은 유지됩니다
Version 1.84.0
추가됨 (Added)
- PDF/UA 유효성 검사가 이제 ISO 14289-1 §7.1에서 요구하는 태그되지 않은 실제 콘텐츠를 감지합니다:
pvuaiUntaggedContent는 페이지의 구조 트리에서 (표시 콘텐츠 ID를 통해) 소유권이 주장되지 않고 Artifact로도 표시되지 않은 렌더링된 텍스트 및 이미지 오브젝트에 플래그를 지정합니다 - 직접 사용을 위한 새로운 페이지 수준 헬퍼
GetPageContentMarkInfos와ValidatePdfUaPageContentTagging및TPdfPageContentMarkInfo레코드
Version 1.83.0
추가됨 (Added)
- PDF/UA 유효성 검사가 이제 ISO 14289-1 §7.4.4 제목 모델을 강제합니다:
pvuaiHeadingModelMixed는 일반H태그와 번호가 매겨진H1..Hn제목을 혼용하는 문서에 플래그를 지정하고,pvuaiHeadingMultipleInNode는 두 개 이상의 자식H제목을 가진 구조 노드에 플래그를 지정합니다
Version 1.82.0
추가됨 (Added)
- PDF/UA 유효성 검사가 이제 ISO 14289-1 §7.1에서 요구하는 RoleMap을 해석합니다:
pvuaiRoleMapRemapsStandard는 표준 구조 유형을 재정의하는 RoleMap 항목에 플래그를 지정하고,pvuaiRoleMapUnresolved는 RoleMap 체인이 누락, 끊어짐 또는 순환인 사용된 비표준 구조 유형에 플래그를 지정합니다 — 표준 유형에 도달하는 간접 체인은 허용되며, 사용되지 않는 RoleMap 항목은 절대 판정하지 않습니다 - 직접 사용을 위한 새로운 헬퍼
PdfUaIsStandardStructType,PdfReadRoleMapPairs(PDF 이름#hh이스케이프 디코딩 포함) 및ValidatePdfUaRoleMapUsage
Version 1.81.0
추가됨 (Added)
- PDF/UA 유효성 검사가 이제 ISO 14289-1 §7.6에서 요구하는 ISO 32000-1 목록 태깅을 포함합니다:
pvuaiListStructureInvalid는 L 컨테이너 외부의 LI 항목과 LI 항목 외부의 Lbl/LBody 부분에 플래그를 지정하며, 중첩 목록과 Note 및 BibEntry 요소 내부의 합법적인 Lbl 사용은 허용합니다
Version 1.80.0
추가됨 (Added)
- PDF/UA 유효성 검사가 이제 ISO 14289-1 §7.5에서 요구하는 ISO 32000-1 표 태깅을 포함합니다:
pvuaiTableStructureInvalid는 TR 행 외부의 TH/TD 셀과 Table 컨테이너 외부의 행 또는 행 그룹에 플래그를 지정하고,pvuaiTableHeaderMissingScope는 Scope 속성이나 Headers/ID 연결을 통해 관계를 확인할 수 없는 헤더 셀에 플래그를 지정하며,pvuaiTableHeadersUndefinedId는 구조 요소 ID를 정의하지 않는 문서의 Headers 참조에 플래그를 지정합니다 TPdfStructureElement가 구조 트리 탐색 중 해석된 표 속성Scope,HasHeaders,HeadersIds,ColSpan,RowSpan을 노출합니다
변경됨 (Changed)
- 구조 트리 탐색이 이제 속성당 한 번씩 스캔하는 대신 각 요소의 속성 딕셔너리에 대한 단일 패스로 모든 레이아웃 및 표 속성을 읽습니다
Version 1.79.1
수정
- 기존 Delphi 콘솔 샘플에 더해, Lazarus 및 C++Builder용
AnnotationsLab샘플을 이식했습니다.
수정
TPdf.CreateAnnotation은 새 주석에 아직 바꿀 quad 슬롯이 없었기 때문에 quad 포인트를 사용하는 마크업 주석(Highlight, Underline, StrikeOut, Squiggly)에 대해 “Cannot set attachment points”를 발생시킬 수 있었습니다. 이제 대신 첫 번째 quad를 추가합니다.
Version 1.79.0
추가
- 새로운
AnnotationsLabDelphi 콘솔 샘플: Text, Highlight, Square 및 Circle 주석을 만들고 PDF에 쓴 다음 파일을 다시 로드하고 페이지 주석 목록을 열거합니다.
Version 1.78.0
추가
- 새로운
TPdf.MeasureText및TPdf.MeasureTextWidth: 페이지에 내용을 추가하지 않고 특정 글꼴 및 크기(PDF 사용자 단위, 1 단위 = 1/72인치)에 대해 렌더링된 문자열의 너비와 높이를 측정하므로AddText를 기반으로 레이아웃 및 자동 줄 바꿈(word-wrap) 로직이 가능해집니다. 독립 실행형FPdfMeasure유닛에서 클래스 도우미로 제공됩니다. - 새로운
TPdf.WrapText: 공백을 기준으로 텍스트를 분할하고 주어진 너비(PDF 사용자 단위)보다 넓지 않은 줄로 단어를 묶는MeasureTextWidth를 기반으로 한 탐욕적 자동 줄 바꿈입니다. 너무 긴 단일 단어는 자체 줄을 가지며(단어 내 분리 없음), 래핑된 줄을 배열로 반환합니다.
Version 1.77.0
추가
ValidatePdfA는 초기 갭 분석에서 이전에 "NO" 또는 "reader behaviour"로 평가된 조항을 다루는 3개의 새로운TPdfAValidationIssue값을 확보했습니다(서수 추가됨, 기존 값 변경되지 않음).pvaiPdfiumNotDefGlyph(PDF/A-2 6.2.11.8 — 매핑 오류 없이 유니코드 0으로 확인되는 문자, 즉.notdef문자 모양 참조의 런타임 증상. Pdfium 개체 모델 계층을 통해 감지됨),pvaiWordBreakMissing(Level A 6.8.3.2 — 공백 없이 20자를 초과하는 콘텐츠 스트림 show 문자열로 단어 병합 위반 가능성이 높음. CJK 오탐지를 방지하는 대략적인 휴리스틱),pvaiLinkActionMissingTarget(6.6.3 — 독자가 표시할 수 없도록 표시 대상 키가 누락된 GoToR/URI/SubmitForm 동작).
Version 1.76.0
추가됨 (Added)
ValidatePdfA에 3개의 새로운TPdfAValidationIssue값이 추가되었습니다(순서 번호가 추가되었으며, 기존 값은 변경되지 않음):pvaiNameNotValidUtf8(PDF/A-2/3 6.1.8 — 올바른 UTF-8을 형성하지 않는 0x80 이상의 바이트를 포함하는/BaseFont또는/FontName토큰),pvaiInlineImageLzwForbidden(PDF/A-2/3 6.1.10 — 페이지 콘텐츠 스트림의 인라인 이미지에서 LZW 또는 Crypt 필터를 사용함) 및pvaiTrueTypeDifferencesForbidden(6.3.7 Cor.2 — Encoding 사전에/Differences가 포함된 비기호성 TrueType 글꼴)
Version 1.75.0
추가 (Added)
ValidatePdfA에 세 가지 새로운TPdfAValidationIssue값이 추가되었습니다 (서수가 추가됨, 기존 값은 변경되지 않음):pvaiIntegerImplementationLimit(PDF/A-2/3 6.1.13 — 32비트 부호 있는 정수 한계인 2,147,483,647을 초과하는 숫자 토큰),pvaiBlendModeNotWhitelisted(PDF/A-2/3 6.2.10 — ISO 32000-1 §11.3.5 표준 혼합 모드 집합을 벗어나는/BM값. Normal/Compatible만 허용하는 PDF/A-1pvaiTransparentColorSpace를 보완함), 그리고pvaiHexStringOddDigits(6.1.6 — 홀수 개의 16진수 숫자를 가진<...>16진수 문자열)
Version 1.74.0
추가 (Added)
ValidatePdfA에 세 가지 새로운TPdfAValidationIssue값이 추가되었습니다 (서수가 추가됨, 기존 값은 변경되지 않음):pvaiPermissionsViolation(6.1.12 —/DocMDP와 함께/DigestLocation,/DigestMethod또는/DigestValue를 포함하는/Perms딕셔너리),pvaiTransActionForbidden(PDF/A-2 6.5.1 —/Transparency와의 오탐을 피하기 위해/S /Trans액션 딕셔너리 패턴을 통해 감지된 Trans 전환 액션), 그리고pvaiPdfiumObjectTransparency(PDF/A-1 6.4 — 페이지 오브젝트가FPDFPageObj_HasTransparency에 따라 실제 투명도를 포함함. 바이트 레벨 이름 스캔이 놓칠 수 있는 혼합 모드/소프트 마스크 효과를 포착하기 위해 v1.73.0에서 도입된 Pdfium 오브젝트 모델 계층을 확장함)
Version 1.73.0
추가 (Added)
TPdf.ValidatePdfA는 이제 바이트 레벨 검사기 위에 Pdfium 오브젝트 모델 패스를 추가합니다:FPDFPage_GetObject→FPDFTextObj_GetFont→FPDFFont_GetIsEmbedded를 통해 모든 페이지의 텍스트 오브젝트를 탐색하고 포함되지 않은 렌더링 글꼴을pvaiPdfiumFontNotEmbedded(ISO 19005 6.3.4)로 보고하며, 각 텍스트 페이지를 로드하여FPDFText_HasUnicodeMapError를 스캔하고 깨진 유니코드 매핑을pvaiPdfiumUnicodeMapError(6.3.8)로 보고합니다. 이는 바이트 레벨 검사기가 할 수 없는 검사입니다 — 이름 토큰만 볼 뿐, 확인된 글꼴 핸들이나 문자별 매핑 상태는 볼 수 없습니다 — 그리고 바이트 레벨 결과에 병합됩니다. 독립형ValidatePdfACompliance바이트 레벨 함수는 변경되지 않았습니다
Version 1.72.0
추가 (Added)
ValidatePdfA에 다섯 가지 새로운TPdfAValidationIssue값이 추가되었습니다 (서수가 추가됨, 기존 값은 변경되지 않음):pvaiNeedsRenderingPresent(PDF/A-2 6.4.2 — 카탈로그는/NeedsRendering을 포함해서는 안 됨),pvaiDestOutputProfileRef(PDF/A-3 6.2.3 — OutputIntent는/DestOutputProfileRef를 포함해서는 안 됨),pvaiEmbeddedFileMissingUF(PDF/A-3 6.8 —/EF가 있는 파일 사양은/UF도 포함해야 함),pvaiXmpPacketBytesAttr(6.7.5 — XMP 패킷 헤더는 더 이상 사용되지 않는bytes=또는encoding=속성을 포함해서는 안 됨), 그리고pvaiAnnotationToggleNoView(PDF/A-2 6.3.2 — 주석의/FToggleNoView 비트, 값 512,는 금지됨)
Version 1.71.0
변경 (Changed)
ValidatePdfUa는 이제pvuaiOrderedListMissingListNumbering을 발생시킵니다 (ISO 14289-1 7.6): 구조 트리(structure-tree) 워커(walker)는 Pdfium 속성 API를 통해 모든L요소에서ListNumbering레이아웃 속성을 확인하고 ISO 32000-1 표 347 집합(Decimal,UpperRoman,LowerRoman,UpperAlpha,LowerAlpha,None,Circle,Disc,Square)을 벗어나는 모든 값을 플래그 처리합니다. 목록이 순서가 없는 목록(unordered list)일 수 있으므로 속성이 없는 경우에는 플래그를 지정하지 않습니다. 이로써 라운드 5(round 5) 마지막에 기록된 마지막 남은 ISO 14289-1 간극이 해소되었습니다.
Version 1.70.0
추가 (Added)
ValidatePdfUa에 네 가지 새로운TPdfUaValidationIssue값이 추가되었습니다 (서수가 추가됨, 기존 값은 변경되지 않음):pvuaiSubsetMissingCidSet(ISO 14289-1 7.21.4.2 — CID 서브셋FontDescriptor는/CIDSet을 선언해야 함),pvuaiToUnicodeForbiddenValue(7.21.7 — ToUnicode CMap은 어떠한 코드도U+FEFF또는U+FFFE에 매핑해서는 안 됨. 압축되지 않은 스트림은<FEFF>/<FFFE>출력 형식에 대해 스캔됨),pvuaiLangInvalidFormat(7.2 —/Lang은 유효한 RFC 1766 / BCP 47 태그여야 함. 허용적인 문법은en,en-US,zh-Hans,es-419를 허용하고 명백하게 규칙을 따르지 않는 값을 플래그 처리함), 그리고pvuaiOrderedListMissingListNumbering(7.6 — API 완전성을 위해 유지됨. 순서가 있는 목록과 없는 목록을 안정적으로 구별하려면 구조 트리 워커가 노출하지 않는ListNumbering속성 값이 필요하기 때문에 아직 검증기(validator)에 의해 발생되지 않음).
Version 1.69.0
추가 (Added)
ValidatePdfUa에 두 가지 새로운TPdfUaValidationIssue값이 추가되었습니다 (서수가 추가됨, 기존 값은 변경되지 않음):pvuaiWidgetOutsideForm(ISO 14289-1 7.18.4 — Widget 구조 요소는Form요소 내에 중첩되어야 함. 구조 트리 워커는 이제 각 Widget의 직접적인 부모 유형을 확인함) 및pvuaiSubsetMissingCharSet(7.21.4.2 — Type 1 서브셋FontDescriptor는/FontName에 6자리 글자의+서브셋 이름 접두사로 식별되는/CharSet을 선언해야 함).
Version 1.68.0
추가 (Added)
ValidatePdfUa에 두 가지 새로운TPdfUaValidationIssue값이 추가되었습니다 (서수가 추가됨, 기존 값은 변경되지 않음):pvuaiUriActionIsMap(ISO 14289-1 7.18.5 — URI 액션 딕셔너리는true값의/IsMap을 포함해서는 안 됨. 접근 가능한 링크 대상을 비활성화하기 때문임) 및pvuaiHeadingSequenceViolation(7.4.2 — 번호가 매겨진 제목은H1에서 시작해야 하며 내림차순 시퀀스는 중간 레벨을 건너뛰어서는 안 됨. 예:H1→H3는 위반임). 제목 확인은 검증기의 첫 번째 구조 트리 레벨 PDF/UA 규칙입니다.ValidatePdfUaStructureElements는 이제 유형이 지정된 요소 목록을 탐색하고 문서 순서대로H1…H6(그리고 7.4.3에 따른H7+) 시퀀스를 확인합니다.
Version 1.67.0
추가 (Added)
ValidatePdfUa에 다섯 가지 새로운TPdfUaValidationIssue값이 추가되었습니다 (서수가 추가됨, 기존 값은 변경되지 않음):pvuaiLinkMissingContents(ISO 14289-1 7.18.5 — Link 주석(annotation)은/Contents를 통해 대체 설명을 포함해야 함),pvuaiAnnotationMissingContents(7.18.1 —/Contents가 없는 모든 예외 대상이 아닌 주석은 대체 설명을 가져야 함. Popup과 Widget은 예외임),pvuaiEmbeddedFileMissingName(7.11 — 파일 사양(specification) 딕셔너리는/F및/UF를 포함해야 함),pvuaiMediaClipMissingAlt(7.18.6.2 — 미디어 클립 데이터 딕셔너리는/CT및/Alt를 포함해야 함), 그리고pvuaiCidFontMissingCidToGidMap(7.21.3.2 — 포함된 Type 2 CIDFont는/CIDToGIDMap을 포함해야 함).
Version 1.66.0
추가 (Added)
ValidatePdfUa에 다섯 가지 새로운TPdfUaValidationIssue값이 추가되었습니다 (서수가 추가됨, 기존 값은 변경되지 않음):pvuaiRoleMapMissing(ISO 14289-1 7.1 — 비표준 구조 유형을 가진 태그가 지정된(tagged) 문서는/RoleMap을 포함해야 함),pvuaiOptionalContentAsKey(7.10 — 선택적 콘텐츠 구성 딕셔너리는/AS자동 상태 키를 포함해서는 안 됨),pvuaiXfaPresent(7.15 — 동적 XFA가 금지되어 있으므로 AcroForm/XFA존재 여부가 플래그 처리됨),pvuaiTrapNetAnnotation(7.18.2 —/TrapNet주석은 금지됨), 그리고pvuaiReferenceXObject(7.20 —/Ref마커를 키로 사용하는 Reference XObjects는 금지됨).
수정 (Fixed)
ValidatePdfUa는 더 이상 모든 암호화된 파일에서pvuaiEncryptionPresent를 오탐(false-positive)하지 않습니다. PDF/UA는 암호화 딕셔너리의/P키에 보조 기술 액세스를 허용하는 비트 위치 10(값 1024)이 설정되어 있는 한 암호화를 허용합니다 (7.16). 정확한 위반 사항은 이제 새로운pvuaiEncryptionPBitMissing을 통해 보고됩니다.pvuaiEncryptionPresent는 API 호환성을 위해 enum에 유지되지만, 바이트 레벨 검증기(byte-level validator)에 의해 더 이상 발생되지 않습니다.
Version 1.65.0
추가 (Added)
ValidatePdfA에 다섯 가지 새로운TPdfAValidationIssue값이 추가되었습니다 (서수가 추가됨, 기존 값은 변경되지 않음):pvaiCidFontMissingCidToGidMap(ISO 19005-1 6.3.3.2 Cor.2 — 포함된 Type 2 CIDFont는/CIDToGIDMap을 포함해야 함),pvaiSubsetMissingCharSet(6.3.5 — Type 1 서브셋FontDescriptor는/CharSet을 포함해야 함),pvaiSubsetMissingCidSet(6.3.5 — CID 서브셋FontDescriptor는/CIDSet을 포함해야 함),pvaiWidgetActionForbidden(6.6.1 — Widget 주석은/A또는/AA를 포함해서는 안 됨), 그리고pvaiOptionalContentAsKey(ISO 19005-2 6.9 — 선택적 콘텐츠 구성 딕셔너리는/AS자동 상태 키를 포함해서는 안 됨. PDF/A-2에서 선택적 콘텐츠를 허용함에 따라 새롭게 관련성을 가짐).
Version 1.64.0
추가 (Added)
ValidatePdfA에 여덟 가지 새로운TPdfAValidationIssue값이 추가되었습니다 (서수가 추가됨, 기존 값은 변경되지 않음):pvaiHeaderBinaryMarkerMissing(ISO 19005-1 6.1.2 —%PDF-x.y헤더 다음에는 127보다 큰 바이트가 최소 네 개 이상 포함된%주석이 와야 함),pvaiExternalStreamRef(6.1.7 — 스트림 딕셔너리는/F,/FFilter또는/FDecodeParms를 포함해서는 안 됨),pvaiOutputIntentScheme(6.2.2 — OutputIntent/S는/GTS_PDFA1이어야 함),pvaiInfoXmpDateMismatch(6.7.3 — InfoCreationDate/ModDate는xmp:CreateDate/xmp:ModifyDate로도 나타나야 함),pvaiMarkInfoMissing(6.8.2.2 — Level A는/Marked true가 포함된/MarkInfo를 요구함),pvaiAnnotationApDictViolation(6.5.3 Cor.2 — 주석/AP딕셔너리에는/N만 포함되어야 함),pvaiEmbeddedFileMissingAFRelationship(ISO 19005-3 Annex E.2 — 연결된 각 filespec은/AFRelationship을 포함해야 함), 그리고pvaiJpeg2000Violation(ISO 19005-2 6.2.8.3 — JPEG2000 이미지는 1, 3 또는 4개의 구성 요소를 선언해야 함).
수정 (Fixed)
ValidatePdfA는/Font << /F 5 0 R >>와 같이 단일 문자로 된 폰트 리소스 이름을 사용하는 문서에서 더 이상pvaiAnnotationFlagsViolation을 오탐하지 않습니다./F플래그 스캔은 이제 문서화된 동작(6.5.3)과 일치하도록 주석 컨텍스트(주석 유형의/Subtype)에 따라 제어됩니다.ValidatePdfA는 이제 각 파일마다 PDF/A-3 연결된 파일(associated-file) 요구 사항을 보고합니다. 이전의 문서 전체적인 유무 확인(any-or-none check) 대신,/EF를 통해 포함된 스트림을 참조하는 포함된/Type /Filespec에/AFRelationship이 없는 경우에만 문서가 플래그 처리됩니다 (ISO 19005-3 Annex E.2).- 금지된 액션 세트에
/SetOCGState와 함께 더 이상 사용되지 않는(deprecated)/SetState액션이 추가되어, PDF Reference 액션 이름이 직접 포착됩니다 (6.6.1).
Version 1.63.0
추가됨 (추가 (Added))
TPdf.MeasureText와TPdf.MeasureTextWidth추가: 페이지에 내용을 추가하지 않고 지정된 글꼴과 크기에서 텍스트의 렌더링 너비와 높이를 측정합니다(PDF 사용자 단위, 1단위 = 1/72인치).AddText위에서 레이아웃 계산과 자동 줄 바꿈을 구현하는 데 활용할 수 있으며, 독립 유닛FPdfMeasure에서 class helper 형태로 제공됩니다
변경됨 (변경 (Changed))
- 세 IDE의
Demo\Delphi\MergePDF,Demo\CBuilder\MergePDF,Demo\Lazarus\MergePDF개선: 파일별 페이지 범위 선택, 선택적 출력 경로, 중복 제거, 실행 로그, 취소 버튼, 병합 완료 요약 지원; 첫 번째 소스 가져오기 시 북마크와 메타데이터를 함께 포함 - 세 IDE의
CreatePDF데모에 "유럽 텍스트" 옵션 추가: 체코어, 프랑스어, 독일어, 스페인어, 포르투갈어, 폴란드어, 터키어의 악센트 텍스트를 작성하여 글꼴 선택 및 Unicode 처리를 확인할 수 있음(기존EuropeanText샘플이 통합됨) ExtractTextPages와EuropeanText샘플 제거:ExtractTextPages의 페이지별 텍스트 출력 기능은ExtractText의 페이지 범위 및 페이지 구분 기호 옵션으로 대체되었고,EuropeanText의 다국어 텍스트 렌더링은CreatePDF에 통합됨
Version 1.62.2
수정
- C++Builder 헤더(
.hpp)를 모든 RAD Studio 버전과 플랫폼(Win32/Win64/Win64x)에 대해 다시 생성했습니다. Pascal 소스와 어긋나 오래된 함수 시그니처와 누락된 유닛이 소스 배포를 통해 C++Builder 사용자에게 전달되고 있었습니다
Version 1.62.1
수정
- RAD Studio 12 Athens 및 그 이전 버전에서 소스 컴파일을 복구했습니다: PDF/UA 검증 경로의
TArray<Byte>대입이 Delphi 13 전용 암시적 배열 변환을 사용하고 있어 오래된 IDE에서는 컴파일되지 않았습니다
Version 1.62.0
추가
TPdf.RenderPageThumbnail은 문서의 현재 페이지, 로드된 페이지를 바꾸거나OnPageChange를 발생시키지 않고, 인덱스로 지정한 어떤 페이지든 종횡비에 맞는 비트맵으로 렌더링합니다
수정
TPdfThumbnailView는 그리는 동안 호스트 문서의PageNumber를 더 이상 건드리지 않습니다. 이전에는 다시 그릴 때마다 페이지를 다시 읽어들이고OnPageChange를 발생시키며 텍스트 페이지를 버려서 연결된TPdfView를 흔들고 다시 그리기 루프를 일으킬 수 있었습니다. 이제 썸네일은RenderPageThumbnail로 렌더링되며 이런 부작용이 없습니다- PDF/X 적합성 검증은 이제 교차 참조 스트림이 있는 문서(PDF 1.6, 일반적인 PDF/X-4)와 압축 오브젝트 스트림에 저장된 오브젝트를, 비적합으로 통째로 보고하는 대신 검사합니다.
GTS_PDFXVersion마커는 XMP의 요소 형식과 RDF 속성 형식 모두에서 읽습니다 - PDF/R 검증은 이제 Info 딕셔너리와 XMP가 Producer 또는 Creator에서 일치하지 않으면
pvriInfoXmpMismatch를 보고합니다. 이 문제는 이전에 선언만 되어 있었고 실제로는 보고되지 않았습니다 - 폼 채우기 타이머는 이제 요청별로 추적되므로, 예를 들어 JavaScript 간격과 필드 커서 깜박임을 동시에 실행하는 문서도 마지막 타이머만 남기지 않고 모두 유지합니다
TPdfView의 그리기와 공개 메서드RenderPage/RenderTile은 이제 문서 렌더 잠금을 유지해 같은TPdf의 작업자 스레드 렌더링과 직렬화됩니다(PDFium은 스레드 안전하지 않습니다)- PDF/X, PDF/R, PDF/VT 메타데이터에 기록되는 비 ASCII 텍스트(OutputIntent 조건 이름, Creator, Producer)는 이제 원시 UTF-8이 아니라 ISO 32000-1 §7.9.2.2에 따른 UTF-16BE 문자열로 인코딩되어, 호환 리더가 잘못 읽지 않도록 했습니다
- 적합성 도우미는 이제
/Length가 간접 참조인 포함 메타데이터 스트림을 올바르게 읽고,ReadBuffer로 원본 바이트를 읽어 짧은 읽기가 깔끔하게 실패하도록 하며, 음수startxref오프셋을 범위 밖 읽기 위험 없이 거부합니다
Version 1.61.0
변경
- 영향을 받는 콜백을 구현한 코드를 다시 컴파일해야 할 수 있는 FFI/ABI 선언 수정: 폼 채우기 콜백
FFI_OpenFile은 이제cdecl(Win32 스택 규약)을 사용하고,value매개변수는FPDFAnnot_SetStringValue및FPDFAttachment_SetStringValue에서 PDFium 헤더와 맞추기 위해 이제FPDF_WIDESTRING(UTF-16LE)입니다 - 점진적 로드 콜백
FX_FILEAVAIL.IsDataAvail및FX_DOWNLOADHINTS.AddSegment는 이제size_t오프셋을 받으며, Free Pascal / Lazarus Win64에서size_t는 포인터 폭이므로 이전의 32비트 잘림 문제가 사라져 FPC Win64에서 데이터 가용성 처리와outsize_tAPI 호출이 올바르게 동작합니다
수정
- 메모리 안전성 수정: 활성 AcroForm 캐럿이 있는
TPdf를 파괴할 때 발생하던 폼 채우기 타이머 use-after-free, 오류 경로에서FPDF_CloseDocument가 두 번 호출되던ImportNPagesToOne, 저장 및 JPEG 삽입 중FPDF_FILEWRITE/FPDF_FILEACCESS콜백에서 C 경계를 넘어 빠져나가던 Pascal 예외, 그리고 시작 인덱스부터 페이지 끝까지 읽을 때의 텍스트 추출 정수 오버플로를 해결했습니다 TPdfFuture<T>는 이제 결과 콜백을 안정적으로 전달합니다. 이전에는 작업자가 큐에 들어간 응답이 실행되기 전에 자신을 먼저 해제해 응답이 거의 항상 사라졌고 해제된 스레드에 접근할 수도 있었습니다- PDF/A, PDF/X, PDF/E, PDF/R, PDF/VT, PDF/UA 출력은 이제 ISO 32000-1 §7.5.4가 요구하는 정확히 20바이트 길이의 교차 참조 항목을 기록합니다
- 표준 마커 주입은 제거된 키가 마지막 항목이었을 때도 딕셔너리를 깨뜨리지 않습니다. 예를 들어
/Trapped가 마지막 키였던 경우에도 닫는>>가 사라져 잘못된 오브젝트가 만들어지지 않습니다 - OutputIntent ICC 프로필 스트림은 이제 PDF/X 및 PDF/VT에 필요한
/N컴포넌트 수를 선언합니다. 암호화된 원본 문서는 PDF/X, PDF/E, PDF/R, PDF/VT, PDF/UA 마커를 주입하기 전에 먼저 복호화되므로 출력이 조용히 손상되지 않고 유효하게 유지됩니다 - 생성된 XMP의 UTF-8 xpacket BOM은 이제 정확한 바이트로 출력되어 ANSI 코드 페이지가 Latin-1이 아닌 Delphi 설치에서의 손상을 해결하며, 증분 업데이트 트레일러도 이제 문서의
/Info참조를 유지합니다 SaveAswith compression은 이제/Length가 간접 참조인 스트림을 잘라내지 않으며, 다시 만든 교차 참조 테이블도 20바이트 항목, 실제 세대 번호, 오래된/Prev포인터 제거를 사용합니다- 적합성 검증은 이제 PDF/E와 PDF/X의 속성형 XMP 버전 마커를 읽어 속성 직렬화된 PDF/X-4 파일을 인식하고, 정확한
PDF/E-1식별자를 요구하며, indirect-/Length메타데이터 스트림을 올바르게 읽고, PDF/UA 트레일러 검사에서 구조 요소의/ID또는/StructTreeRoot키를 잘못 일치시키지 않으며, 잘못된startxref오프셋도 더 이상 범위 오류를 일으키지 않습니다 TPdfThumbnailView: 이제 스크롤바로 마지막 페이지까지 도달할 수 있고, 썸네일을 그린 뒤 호스트 문서의 현재 페이지가 복원되며, 표준 mouse-leave 처리도 다시 전달됩니다- 회색조 페이지와 이미지 비트맵은 더 이상 잘못된 팔레트로 렌더링되지 않으며,
TPdfView도 자신의TPdf가 먼저 해제될 때 더 이상 dangling reference를 남기지 않습니다 - 프리플라이트 보고서: HTML은 선언된 charset에 맞게 UTF-8로 저장되며, JSON 문자열 이스케이프는 Free Pascal에서 비 ASCII 문자에 대해 올바른
\u시퀀스를 생성합니다 - 시험판 빌드: 시험판 알림 대화상자가 표시되기 전에 억제되지 않고 이제 정상적으로 표시됩니다
TPdfStreamAdapter는 이제 4 GiB보다 큰 스트림을 PDFium에 전달할 길이를 조용히 잘라내는 대신 명확한 오류와 함께 거부합니다
Version 1.60.1
변경
- AccessibilityReader 데모(Delphi, Lazarus, C++Builder)는 이제
TPdfReadingSession위에서 읽기 소리를 재생합니다. 각 페이지는BuildSpokenTextFromWords로 하나의 음성 청크로 묶이고, SAPI 단어 위치가FeedSpokenPosition으로 전달되며, 세션이 페이지를 진행하고 뷰의 단어 커서를 구동합니다. 각 데모에 있던 수작업 오케스트레이션은 이로써 대체되었습니다 - 데모의 단어 수준 카라오케 추적은 이제 NVDA가 음성 엔진이어도 동작합니다.
EstimatePacing은 경과한 읽기 시간에 맞춰 읽기 커서를 조정하며, 이전의 NVDA는 단어 추적 없이 그대로 읽었습니다 - 데모의 Pause와 Resume도 이제 NVDA에서 동작합니다.
ResumeRestartsChunk는 Resume 시 현재 페이지를 처음부터 다시 읽고, SAPI는 기존의 제자리 pause / resume을 유지합니다
Version 1.60.0
추가
TPdfView의 라이브 저시력 렌더링: 새로운 렌더 옵션reInvert와reNightDuotone은 검색, 선택, 읽기, 단어 커서 오버레이가 그려지기 전에 렌더된 각 페이지 타일의 색을 다시 칠합니다(전체 색 반전 또는 야간용 2색조 팔레트). 기존 비트맵 색 변환을 단일 페이지와 맞쪽 페이지 레이아웃 모두에 대한 대화형 뷰어로 가져옵니다. 옵션을 토글하면 즉시 다시 그려집니다NightDuotoneInk와NightDuotonePaper는 야간 팔레트를 설정하며, 기본값은 검은 페이지 위의 호박색 텍스트입니다. 두 옵션이 모두 설정되면reInvert가 우선합니다
Version 1.59.0
추가
TPdfReadingSession: 음성 엔진에 중립적인 read-aloud 오케스트레이션 컴포넌트입니다. 청크 커서, 단어 커서, 재생 상태 (Play/PlayFrom/Pause/Resume/Stop)를 유지하고, 로드된TPdfSpokenText청크를 호스트가Tick으로 엔진 유휴 상태를 알릴 때마다 순서대로 진행하며, spoken-text 오프셋을 페이지 문자로 다시 매핑하고, 연결된TPdfView의 단어 커서를 자동으로 움직입니다. 호스트는OnSpeak및 cancel / pause / resume 요청 이벤트를 통해 어떤 음성 엔진이든 연결할 수 있으므로 라이브러리 자체는 어떤 speech API도 직접 링크하지 않습니다FeedSpokenPosition은 SAPIStatus.InputWordPosition같은 엔진의 단어 위치를 받아들이고,EstimatePacing와EstimatedWordsPerMinute는 위치 신호가 없는 엔진의 진행 속도를 맞추며,ResumeRestartsChunk는 native pause가 없는 엔진에서 현재 청크를 다시 읽어 줍니다OnChunkChange,OnWordChange및OnFinished는 실제 변경이 있을 때만 발생하며, 해제된 연결 뷰는 자동으로 분리되므로 호스트 코드는 깜박임 없이 충돌에도 안전하게 유지됩니다
Version 1.58.0
추가
EstimateSpokenWordIndex는 경과 시간과 분당 단어 수를 바탕으로 음성 엔진이 말하는 단어를 추정해, 긴 단어에 비례해 더 많은 시간을 줍니다. 단어 위치를 보고하지 않는 엔진(NVDA controller client 등)도 단어 수준 읽기 커서를 구동할 수 있으며, 호출자가 경과 시간을 넘기므로 루틴은 시계에 의존하지 않아 단위 테스트가 가능합니다
Version 1.57.0
추가
- 읽기 소리 추적을 위한 2도메인 매핑을 갖춘 음성 텍스트 조립:
BuildSpokenTextFromWords와SpokenTextAppend는 페이지의 단어 상자에서 텍스트 음성 변환 엔진에 넘길 문자열을 구성하면서 스팬 표를 기록하고,SpokenToPageChar는 엔진이 보고한 읽기 오프셋(SAPI의Status.InputWordPosition등)을 페이지 문자 인덱스로 되돌립니다. 이를 통해 읽기 텍스트가 페이지 전체 텍스트가 아니어도 단어 수준 하이라이트 추적이 정확하게 유지됩니다(건너뛴 영역, 단위별 읽기, 발음 재정의) TPdfSpokenText와TPdfSpokenSpan타입은 말해진 문자열과 그것이 만들어진 원본 페이지 범위를 함께 보관합니다. 삽입된 구분자 위의 오프셋은 다음으로 매핑된 단어로 해석되며, 매핑된 범위를 넘는 오프셋은 일치 없음으로 보고됩니다
Version 1.56.9
추가 (추가 (Added))
Demo\Delphi\PreflightReport는 비통과 표준, 우선순위, 다음 조치, 이슈 코드, 권고 사항을 하나의 remediation 체크리스트로 압축한 Action Plan 미리보기를 추가합니다Demo\Delphi\PreflightReportCli는 단일 파일 실행과 배치 실행에서 출력 형식으로plan/actionplan을 받아 같은 remediation 체크리스트를 텍스트 파일로 기록합니다
변경됨 (변경 (Changed))
- 두 Delphi PreflightReport 데모는 이제 총 표준 수와 이슈 수와 함께 pass / action / review 상태 개수도 표시합니다
Version 1.56.8
변경됨 (변경 (Changed))
ViewerInteractionLab은 이제 페이지 이동 컨트롤, 수동 줌 컨트롤, 클릭 기반DeviceToPage/PageToDevice좌표 로깅을 포함하며, 선택·검색·회전·내비게이션 검사에서 더 명확한 상호작용 로그를 제공합니다ViewerInteractionLabreadme 페이지는 로컬라이즈된 데모 readme 세트 전체에서 추가된 상호작용 워크플로를 문서화합니다
Version 1.56.7
추가됨 (추가 (Added))
AccessibilityWorkbenchCli는 트리거된 각 finding을 WCAG 2.1 Success Criteria 및 ISO 14289-1 (PDF/UA-1) 조항 영역에 매핑하고 보고서에 standards-coverage 섹션을 표시합니다AccessibilityWorkbenchCli는 공개된 패널티 루브릭과 excellent / good / needs work / poor 구간으로 0-100 accessibility 점수를 계산합니다. 이 값은 파일별 및 배치 평균으로 노출됩니다AccessibilityWorkbenchCli는failscore=N을 받아 어떤 파일이 N 미만이면 실행을 실패 처리하고 exit code 2로 종료합니다AccessibilityWorkbenchCli는 배치 요약 이름이.sarif로 끝나는 경우 SARIF 2.1.0 로그를 기록하며 finding 종류당 1개 규칙에 WCAG 2.1 및 PDF/UA 태그를 부착해 CI와 코드 스캔 수집에 사용합니다AccessibilityWorkbenchCli는 연결된 PDFiumPas 버전을 출력하는version명령을 추가합니다
Version 1.56.6
추가됨 (추가 (Added))
IntakeWorkbenchCli는 각 입력 파일의 SHA-256 포렌식 해시를 계산하며,unavailable로 저하되는 경우는System.Hash가 없는 컴파일러뿐이고, 그 결과를 모든 출력 형식에 보고합니다IntakeWorkbenchCli는 후보 목록으로 비밀번호가 필요한 문서를 시험 해제할 수 있도록passwords=file.txt를 받으며, 비밀번호 텍스트는 절대 로그에 남기지 않고 일치한 후보 인덱스만 기록합니다IntakeWorkbenchCli는 각 감사 파일을 위험도별 하위 폴더로 보내는copyto=dir를 받아 감사기를 intake sorter로도 사용할 수 있게 합니다IntakeWorkbenchCli는 배치 요약 이름이.sarif로 끝나면 SARIF 2.1.0 로그를 기록하며, 위험 플래그마다 규칙 하나와 표시된 파일마다 결과 하나를 생성해 CI와 코드 스캔 수집에 바로 사용할 수 있습니다IntakeWorkbenchCli는 연결된 PDFiumPas 버전을 출력하는version명령도 추가합니다
Version 1.56.5
추가됨 (추가 (Added))
IntakeWorkbenchCli는 accept, request-password, manual-review, quarantine, deduplicate 같은 권장 사후 처리 동작을 유도하고 배치 요약에서 동작 수를 노출합니다AccessibilityWorkbenchCli는 pass-through, remediate-tags, run-ocr, remediate-semantics, manual-review 같은 권장 remediation 동작을 유도하고 일치하는 배치 동작 수를 표시합니다
변경됨 (변경 (Changed))
- 도구급 CLI 데모 2개 모두 추천 동작을 콘솔, 텍스트, HTML, JSON, CSV 출력에서 제공하여, 배치 운영자가 추가 후처리 위험이나 상태 필드 없이 파일을 라우팅할 수 있습니다
Version 1.56.4
수정됨 (수정 (Fixed))
- 주석, 북마크, 링크 주석을 루프로 읽을 때 이전 항목의 텍스트 문자열이 더 이상 누수되지 않습니다.
TPdfAnnotation,TBookmark,TLinkAnnotation결과 레코드는 이제 원시 메모리 0 초기화 대신 관리형 타입을 인식하는 초기화로 정리되므로, 텍스트를 많이 담은 주석이 매우 많은 문서도 애플리케이션 수명 동안 프로세스 메모리를 부풀리지 않습니다 TPdf에 등록된OnUnsupportedFeature핸들러는 이제 해당TPdf가 파괴될 때 프로세스 전역 PDFium 콜백에서 분리되므로, 이후 다른 인스턴스가 자체 핸들러 없이 문서를 열어도 해제된 컴포넌트로 디스패치되지 않습니다
Version 1.56.3
수정됨 (수정 (Fixed))
AccessibilityWorkbenchCli는 빈 페이지를 heuristic reading-order 페이지로 더 이상 카운트하지 않기 때문에 구분 페이지가 빈 tagged 문서가 올바른 accessibility 상태를 유지하고, 읽을 수 있는 콘텐츠가 없는 페이지는 별도로 보고됩니다AccessibilityWorkbenchCli의 테이블 헤더 감지는 nested table에 속한TH셀을 outer table로 계산하지 않으며, 폼 필드 및 폰트 이름은 대소문자 구분 매칭되어 서로 다른 필드가 병합되지 않습니다IntakeWorkbenchCli의 URL host 인벤토리는 이제 userinfo, query, fragment 부분을 제거합니다. 그래서trusted.example@evil.example와 같은 조작 링크는 실제 호스트로 귀속되며,mailto:대상은 보이지 않던 상태 대신 도메인을 기여합니다IntakeWorkbenchCliMarkdown 보고서는 공격자가 제어한 경로, 호스트, 첨부 이름 내의 백틱을 이스케이프해 문서 내부에서 보고서 포맷이 깨지는 것을 방지합니다
변경됨 (변경 (Changed))
AccessibilityWorkbenchCli는 font-scan 및 form-field-scan 실패를 개별 카운터로 보고하고, 임베드 인스턴스가 있는 비임베드 폰트를 표시하며, 긴 폰트 목록은 명시적 truncation marker로 상한을 둡니다IntakeWorkbenchCli배치 요약은 attachment-annotation 수 열을 추가하며, 페이지당 주석 수 집계는 페이지당 20000개로 제한되어 모든 형식에서 해당 제한이 보고됩니다
Version 1.56.2
추가 (추가 (Added))
AccessibilityWorkbenchCli는 이제 글꼴 임베딩, 양식 필드 tooltip, 읽기 순서 출처, 문서 outline, 표와 목록 구조, 의심스러운 대체 텍스트, 더 풍부한 페이지별 검토 세부 정보를 감사하여 accessibility 배치 보고서가 더 많은 수정 대상을 식별할 수 있게 합니다IntakeWorkbenchCli는 이제 페이지 스캔 제한, launch 및 remote-go-to 작업, URI host 인벤토리, 주석 수, 지원되지 않는 PDFium 기능, 중복 문서 식별자, 자동 intake 검토를 위한 확장 위험 플래그를 보고합니다
변경 (변경 (Changed))
IntakeWorkbenchCli는 단일 파일 및 배치 모드에서maxpages=N을 허용하여 metadata, attachment, script, XFA, signature, risk 보고를 계속 완료하면서 문서별 페이지 스캔 수를 제한합니다
Version 1.56.1
수정됨 (수정 (Fixed))
- 더 새로운 내보내기가 없는 이전
pdfium.dll을 로드하면 이제 깔끔하게 실패합니다. 실패 경로가 바인딩된 모든 API 진입점을 재설정하므로Assigned()검사(예:FPDF_GetLastError또는FPDF_GetSecurityHandlerRevision)는 이미 언로드된 모듈을 호출해 액세스 위반으로 충돌하는 대신 라이브러리가 로드되지 않았다고 보고합니다 UnloadLibrary는 이제 선택적 V8 도우미뿐 아니라 모든 PDFium API 바인딩을 지우므로 DLL이 해제된 뒤 오래된 함수 포인터가 남지 않습니다
Version 1.56.0
추가됨 (추가 (Added))
TPdfView의 단어 단위 karaoke 읽기 커서:TrackReadingWordAt는 SAPIStatus.InputWordPosition같은 텍스트 음성 변환 엔진의 현재 단어 문자 오프셋을 페이지 단어 상자에 매핑하고, 이를 포함하는 단어를 읽기 블록 위의 별도 오버레이로 강조 표시하며, 화면 안으로 스크롤하고 단어 인덱스를 반환하므로 음성이 진행될 때 읽는 단어가 켜집니다SetReadingWord와ClearReadingWord는TPdfWordBox에서 강조 표시된 단어를 직접 설정하거나 지웁니다. 같은 단어를 다시 설정하는 것은 no-op이므로 단어 단위 추적은 뷰를 깜박이게 하지 않습니다ReadingWordColor와ReadingWordFollow는 단어 커서 색상과 뷰가 읽는 단어를 자동으로 화면 안으로 스크롤할지 여부를 제어합니다
Version 1.55.2
수정됨 (수정 (Fixed))
- ViewerInteractionLab은 이제 도구 모음 행에 더 많은 세로 공간을 제공하므로 배율 조정된 글꼴에서 Open PDF, Create Sample, 탐색, 검색, 선택 컨트롤이 더 이상 겹치지 않습니다
Version 1.55.1
수정됨 (수정 (Fixed))
- ViewerInteractionLab은 이제 Prev, Next, Rotate를 두 번째 도구 모음 행에 배치하여 시작 시 Open PDF 및 Create Sample과 겹치는 문제를 피합니다
Version 1.55.0
추가됨 (추가 (Added))
- 읽고 선택하는 흐름을 위한 단어-선택 연결:
TPdfView.SelectWordBox와SelectWordSpan은PageWordBoxes의 단일 단어 상자나 같은 페이지 범위를 문자 범위로 선택하므로 현재 읽는 단어나 줄도 선택하고 복사할 수 있습니다 WordBoxIndexAtCharIndex는 문자 인덱스를 해당 문자를 포함하는 단어 상자로 다시 매핑하여 TTS 읽기 커서가 진행될 때 단어별 강조를 구동합니다
Version 1.54.0
추가됨 (추가 (Added))
- 논리 커서에서 바로 포커스된 필드를 읽는 음성 폼 채우기 접근자:
FocusedFormFieldValue,FocusedFormFieldName,FocusedFormFieldDetails가TPdf와TPdfView에 추가되어 현재 필드의 값, 사람이 읽을 수 있는 이름 (/TU툴팁, 없으면/T) 그리고 전체TPdfFormFieldInfo(type, flags, options)를 보고하므로 음성 UI가 폼을 따라가며 안내하는 데 필요한 정보를 모두 제공합니다
수정됨 (수정 (Fixed))
FocusedFormFieldValue는 이제 pdfium interactive focus가 아니라FocusedFormFieldIndex로 필드를 읽으므로 화면 캐럿이 없어도 음성 기반 폼 채우기에서 올바른 값을 얻습니다. 기존FocusedFormFieldText는 계속 pdfium focus를 반영하며 동작은 바뀌지 않습니다
Version 1.53.0
추가됨 (추가 (Added))
- 단어 단위 강조 지원:
TPdf.PageWordBoxes와TPdfView.PageWordBoxes는 페이지를TPdfWordBox레코드로 분할하며, 각 레코드는 단어 텍스트, 문자 범위, 페이지 공간 경계 사각형을 담고 있으므로 접근성 리더가 그 사각형을SetReadingHighlight에 넘겨 발화 중인 단어를 순서대로 강조하는 "karaoke" 읽기를 구현할 수 있습니다 BuildWordBoxes는 토크나이저 단계를 별도로 노출해 페이지 텍스트를 문자 범위를 포함한 단어 상자들로 직접 변환합니다
Version 1.52.0
추가됨 (추가 (Added))
- 저시력 렌더링 도우미
InvertPdfBitmap,GrayscalePdfBitmap,DuotonePdfBitmap는 렌더링된 32비트 비트맵에 제자리 색상 변환을 적용하므로 접근성 리더가 페이지를 반전 / 다크 모드, 회색조, 또는 사용자 지정 2색 구성으로 표시할 수 있습니다. 예를 들어 어두운 배경에 밝은 텍스트 같은 구성이 가능합니다 - 이 변환은 픽셀 단위로 수행되며 VCL과 Lazarus/LCL에서 동일하게 동작하고 비트맵 크기는 바꾸지 않습니다
Version 1.51.0
추가됨 (추가 (Added))
- 보조적 listen-reading을 위한 문장 단위 읽기 유닛:
TPdf.ReadingUnits,TPdf.DocumentReadingUnits,TPdfView.ReadingUnits는 읽을 수 있는 콘텐츠 스트림을 순서가 보장된 문장 크기의TPdfReadingUnit레코드로 선형화합니다. 각 레코드는 발화할 텍스트와 semantic kind, page, highlight rectangle, language tag를 담으므로 스크린 리더 앱이 페이지 또는 전체 문서를 spoken unit 단위로 이동할 수 있습니다 NextReadingUnitOfKind를 통한 의미 기반 탐색으로, 음성 UI가 스트림을 손으로 스캔하지 않고도 다음 또는 이전 heading, figure, list item, table cell로 점프할 수 있습니다BuildReadingUnits는 어떤TPdfContentFragments든 직접 reading units로 변환합니다. heading과 figure/alt 설명은 하나로 유지하고, 문단은 문장 경계에서 분리하며, 소수점은 보존하고, reading cursor는 호출자가 소유하는 단순 인덱스로 유지됩니다
Version 1.50.0
추가 (추가 (Added))
ValidatePdfA가 이제 catalog, OutputIntent 또는 기타 딕셔너리를 압축된 object stream(/Type /ObjStm) 안에 저장하는 PDF 1.5+ 문서도 검사할 수 있습니다. object stream을 풀어서 그 안에 담긴 객체들을 해석하므로, 이러한 문서는 PDF/A 마커가 누락되었다고 보고되는 대신 실제 내용에 따라 검증됩니다
Version 1.49.5
수정 (수정 (Fixed))
ValidatePdfA가 더 이상pdfaExtension:schemas설명이 누락된 것을 문제로 보고하지 않습니다. PDF/A 식별자 스키마(pdfaid)는 잘 알려진 스키마이므로 veraPDF나 PDF/A-2/-3 모두 이에 대한 확장 스키마 설명을 요구하지 않으며, 그 부재를 표시하면 규격을 준수하는 모든 서드파티 PDF/A가 잘못 보고됩니다. 라이브러리가 직접 생성하는 문서에는 여전히 해당 설명이 포함됩니다
Version 1.49.4
수정 (수정 (Fixed))
ValidatePdfA가 이제 PDF/A 식별자가 자식 요소가 아니라 XML 속성(pdfaid:part="2")으로 작성된 경우에도 준수 수준을 감지하므로, 속성 형식의 문서가 더 이상 알 수 없는 수준으로 보고되지 않습니다. 또한 감지되지 않은 수준 때문에 부분별 검사가 엄격한 PDF/A-1 규칙으로 되돌아가, PDF/A-2와 PDF/A-3가 허용하는 포함 파일 및 투명도를 잘못 표시하던 연쇄 문제도 함께 바로잡습니다
Version 1.49.3
수정 (수정 (Fixed))
ValidatePdfA가 이제 cross-reference 데이터가 cross-reference stream인 PDF 1.5+ 문서(trailer키워드가 없는 파일)도 검사합니다. 준수 수준, 트레일러/ID및 기타 마커를 cross-reference stream 딕셔너리에서 읽어 오므로, 이러한 문서는 전혀 규격을 준수하지 않는다고 보고되는 대신 실제 내용에 따라 검증됩니다
Version 1.49.2
수정 (수정 (Fixed))
ValidatePdfA가 모든 글꼴을 포함하는 문서에서 더 이상 잘못된 비임베디드 글꼴 문제를 보고하지 않습니다. 이전 휴리스틱은/FontDescriptor토큰 수를 임베디드 글꼴 프로그램 수와 비교했으나, 각 임베디드 글꼴은/FontDescriptor토큰을 두 개(글꼴 딕셔너리 참조와 디스크립터 객체) 기여하므로 임베디드 글꼴 파일이 모두 잘못 표시되었습니다. 이제 이 검사는 글꼴을 참조하면서 글꼴 프로그램을 전혀 포함하지 않는 문서만 보고하며, 이는 그에 대응하는ValidatePdfUa수정 사항을 반영합니다
Version 1.49.1
수정 (수정 (Fixed))
- PDF/A 출력이 이제 veraPDF에서 규격을 준수하는 PDF/A-1b 및 PDF/A-1a로 검증됩니다: 포함된 sRGB OutputIntent ICC 프로파일 스트림(
/DestOutputProfile로 참조됨)이 이제 ISO 19005-1 6.2.3.2가 요구하는 대로 필수/N구성 요소 개수(내장 RGB 프로파일의 경우 3)를 선언합니다.SaveAsPdfA로 생성된 문서는 이전에는 대상 프로파일 스트림이/N을 빠뜨렸기 때문에 엄격한 PDF/A-1 검증에 실패했으며, 그 값은 ICC 프로파일 헤더에서 유도되므로 호출자가 제공한 CMYK 또는 Gray 프로파일도 올바른 개수를 받게 됩니다
Version 1.49.0
수정 (수정 (Fixed))
ValidatePdfUa는 더 이상 규격을 준수하는 tagged PDF에서 XMP 식별 정보 누락을 허위로 보고하지 않습니다. PDF/UA 식별자 (pdfuaid:part),dc:title, XMP 날짜, 트레일러/ID를 이제/MetadataXMP 스트림과 cross-reference-stream 파일의 트레일러/ID를 빠뜨리는 재저장 사본이 아니라 원본 문서 바이트에서 읽습니다ValidatePdfUa의 글꼴 임베딩 검사가 수정되어 모든 글꼴을 임베드한 문서를 더 이상 비임베드 글꼴이 있다고 보고하지 않으며, 이제는 글꼴을 참조하면서 글꼴 프로그램을 하나도 임베드하지 않은 문서만 표시합니다ValidatePdfUa는 이제Formula구조 요소의 대체 텍스트가ActualText를 통해 제공되고Alt항목에 있지 않더라도 기존Figure규칙과 일관되게 허용합니다 (ISO 14289-1 §7.7)
Version 1.48.0
추가 (추가 (Added))
TPdfView에서 코드로 텍스트를 선택하는 기능:SelectTextRange(페이지와 문자 범위로 지정)와SetSelection(페이지별 명시적 범위로 지정)은 코드에서 텍스트를 선택합니다. 예를 들어 특정 구절을 읽어 주고 하이라이트할 때 사용할 수 있으며, 선택이 변경되면 두 메서드 모두 화면을 다시 그리고OnSelectionChange를 발생시킵니다.SelectionRanges는 현재 선택 영역을 페이지별 문자 범위로 읽어 오고,SelectionRectangles는 사용자 지정 하이라이트나 해당 위치로 스크롤하기 위해 그 사각형들을 페이지 좌표로 반환합니다
Version 1.47.0
추가 (추가 (Added))
- 음성 기반 양식 작성을 위한 양식 필드 탐색 기능이
TPdf와TPdfView모두에 추가되었습니다:FormFieldTabOrder,FocusedFormFieldIndex,FocusFormField,FocusNextFormField,FocusPreviousFormField,ClearFormFieldFocus및FocusedFormFieldText. 이들은 논리적 필드 커서를 페이지의 위젯 필드 위에서 탭 순서대로(양 끝에서 순환) 이동시키므로, 보조 읽기 도구가 양식을 따라가며 각 필드를FormFieldInfo[Index].AlternateName(/TU 툴팁)을 통해 읽어 주고FormField[Index]로 입력할 수 있습니다 TPdfView.OnFormFieldFocusChange이벤트는 필드 커서가 이동할 때 발생하며, 새 필드 인덱스(지워진 경우 -1)를 전달합니다
Version 1.46.0
추가 (추가 (Added))
- 보조 듣기·읽기용 콘텐츠 스트림:
TPdf.ReadableContent,TPdf.ReadablePageContent,TPdf.DocumentReadableContent및TPdfView.ReadableContent는 의미론적TPdfContentFragment항목의 정렬된 목록을 반환합니다. 각 항목은 읽어 줄 텍스트(실제 글리프, 또는 도형의 경우ActualText/Alt), 조각 종류(레벨이 있는 제목, 단락, 도형, 목록 항목, 표 셀, 링크, 일반 텍스트), 언어, 1부터 시작하는 페이지 번호, 그리고 블록 및 줄 단위 하이라이트 사각형을 함께 담고 있습니다. 태그가 있는 PDF는 구조 트리를 따라 논리적 읽기 순서로 선형화되며, 태그가 없는 페이지는 렌더링 순서로 대체되어 어떤 문서든 소리 내어 읽을 수 있습니다 TPdfView의 동기화된 읽기 하이라이트:SetReadingHighlight,ClearReadingHighlight및 게시된ReadingHighlightColor는 검색 및 선택 오버레이 위에 현재 읽고 있는 블록을 하이라이트합니다- 새로운 공개 형식
TPdfContentFragment,TPdfContentFragments,TPdfReadableContent,TPdfContentFragmentKind및TPdfReadingOrderSource, 그리고 새 헬퍼ClassifyStructType가 추가되었습니다
Version 1.45.0
추가 (추가 (Added))
ValidatePdfUa는 이제 라이브 태그 구조 트리도 탐색하여 바이트 수준 스캔으로는 감지할 수 없는 세 가지 고신뢰도 콘텐츠 위반 사항을 보고합니다: Alt 항목과 ActualText가 모두 없는Figure요소(ISO 14289-1, 7.3), Alt 속성이 없는Formula요소(7.7), 고유 ID가 없는Note요소(7.9). 이를 표면화하는 세 가지 새로운TPdfUaValidationIssue값이 추가되었습니다:pvuaiFigureMissingAlt,pvuaiFormulaMissingAlt,pvuaiNoteMissingId. 태그가 없는 문서의 경우 트리 탐색을 건너뜁니다- 새로운 공개 헬퍼
ValidatePdfUaStructureElements는 해당 구조 트리 규칙을 (TPdf.StructureElements가 반환하는 것과 같은) 평면 요소 목록에 적용하므로, 전체 문서를 로드하지 않고도 검사를 실행하거나 단위 테스트할 수 있습니다
Version 1.44.5
수정 (수정 (Fixed))
ValidatePdfA글꼴 임베딩 검사 (pvaiFontNotEmbedded, ISO 19005-1, 6.3.4)는 이제/FontDescriptor가 없는 비임베드 simple font도 감지합니다. 특히 PDF/A가 예외 없이 임베드를 요구하는 14개의 표준 Type 1 글꼴 (Helvetica, Times, Courier 등)이 여기에 포함됩니다. 이전에는 이런 글꼴이 빠졌지만, 이제는 simple-font 딕셔너리 (/Type1,/TrueType,/MMType1)도 임베드된 글꼴 프로그램과 대조하므로 1.44.3의 PDF/UA 수정과 같은 방식으로 동작합니다
Version 1.44.4
수정 (수정 (Fixed))
ValidatePdfVT는 이제 ISO 16612-2 §6.5의 잘못된 DPart 트리를 거부합니다. 예를 들어/DParts가 요구되는 array of arrays가 아니라 평면 참조 배열이거나, 리프 DPart가 실제로는 한 페이지 범위인데도 자신의/Start페이지를/End로 반복하는 경우가 이에 해당합니다ValidatePdfVT는 이제/NodeNameList이름을 PDF name#xxescape 확장 뒤의 XML NMTOKEN 값으로 검증하므로, 잘못된 계층 수준 이름은 사용 가능한 DPart 구조로 받아들여지지 않고pvviMissingDPartRoot를 통해 보고됩니다
Version 1.44.3
수정 (수정 (Fixed))
ValidatePdfUa폰트 임베딩 검사(pvuaiFontNotEmbedded, ISO 14289-1, 7.21.4)가 이제/FontDescriptor가 없는 비임베디드 단순 폰트도 감지합니다. 가장 중요한 것은 PDF/UA가 임베딩 면제를 부여하지 않는 14개의 표준 Type 1 폰트(Helvetica, Times, Courier 등)입니다. 이전에는 이러한 폰트가 감지되지 않아 해당 폰트를 사용하는 문서가 적합한 것으로 보고될 수 있었습니다. 이제 이 검사는 단순 폰트 딕셔너리(/Type1,/TrueType,/MMType1)도 임베디드 폰트 프로그램에 대해 검사합니다
Version 1.44.2
수정 (수정 (Fixed))
ValidatePdfVT는 존재하지만 인식할 수 없는pdfvtid:GTS_PDFVTVersion마커를 이제pvcUnknown으로 유지하고pvcNone으로 낮추지 않습니다. 따라서PDF/VT-2s같은 잘못된 파일 수준 문자열을 PDF/VT 마커가 전혀 없는 문서와 구분할 수 있습니다. PDF/VT-2s는 PDF 파일의 XMP 마커가 아니라 ISO 16612-2 Annex A의 MIME stream header로 식별됩니다/DPartRoot검사는 이제 ISO 16612-2 §6.5의 트리 의미를 더 엄격하게 검증합니다./DPartRootNode와/NodeNameList는 실제 DPart 깊이를 설명해야 하고, DPart 부모 링크는 트리를 형성해야 하며,/Start와/DParts는 서로 배타적이어야 하고, 각 페이지의/DPart는 페이지 트리와 같은 depth-first 순서에서 해당 페이지를 덮는 리프 DPart를 가리켜야 합니다
Version 1.44.1
수정 (수정 (Fixed))
SaveAsPdfVT는 원본 PDF에 사용할 수 있는/DPartRoot가 없을 때 ISO 16612-2 §6.5의 최소 Document Part Hierarchy를 기록합니다. 생성된 트리는 각 페이지를/DPart로 연결하고, 기존의 유효한 계층은 보존하며, 더 풍부한 수신자/DPM 메타데이터는 호출 워크플로에 맡깁니다ValidatePdfVT는 이제 사용할 수 있는 DPart 구조를 검증하고, RDF 속성과 요소 텍스트 양쪽에서 PDF/VT XMP 값을 읽으며, 정확한 PDF/VT 대 PDF/X 기반 조합을 강제합니다. PDF/VT-1에는 PDF/X-4가 필요하고, PDF/VT-2에는 PDF/X-4p, PDF/X-5g 또는 PDF/X-5pg가 필요합니다TPdfVTSaveOptions.Conformance = pvc2는 더 이상 잘못된 단일 파일 PDF/VT-2 마커를 쓰지 않습니다. PDF/VT-2에는 파일 세트 의미가 필요하므로 단일 파일 writer는 출력을 PDF/VT-1로 정규화합니다
Version 1.44.0
추가 (추가 (Added))
ValidatePdfUa는 이제 파일 형식 마커 외에도 바이트 검사 가능한 콘텐츠 수준의 PDF/UA 위반 사항도 보고함: 임베드되지 않은 폰트 프로그램(ISO 14289-1, 7.21.4), 면제되는 단순 폰트 인코딩이 없는 경우/ToUnicodeCMap이 없는 폰트(7.21.7), 주석이 있지만 페이지/Tabs /S탭 순서가 선언되지 않은 문서(7.18.3)- 세 가지 새로운
TPdfUaValidationIssue값 —pvuaiFontNotEmbedded,pvuaiFontMissingToUnicode,pvuaiMissingTabsOrder— 이ValidatePdfUa와 프리플라이트 보고서에 표시됨. 이들은 완전한 ISO 14289-1 검증이 아닌 프리플라이트 힌트로 제공되는 대략적인 휴리스틱임
Version 1.43.1
수정 (수정 (Fixed))
SaveAsPdfUa는 이제 소스 문서가 해당 딕셔너리를 이미 가지고 있어도 값이 빠졌거나 충돌하면 ISO 14289-1, 7.1이 요구하는 필수/ViewerPreferences/DisplayDocTitle true및/MarkInfo/Marked true/Suspects false카탈로그 항목을 강제로 맞춥니다. 이전에는 딕셔너리가 완전히 없을 때만 마커가 주입되어, 예를 들어/ViewerPreferences에DisplayDocTitle이 없거나/MarkInfo에/Marked false가 있는 소스가 비준수 파일로 저장될 수 있었습니다- 기존
/ViewerPreferences또는/MarkInfo딕셔너리에 있던 키는 그대로 보존되며, 간접 참조로 제공된 딕셔너리도 필수 키를 적용하기 전에 먼저 해석됩니다
Version 1.43.0
추가 (추가 (Added))
- 이제
ValidatePdfA가 임베디드 파일과 연결된 파일, 그리고 Level U 텍스트에 대해 PDF/A-2 / PDF/A-3 규칙을 적용함. 임베디드 파일은 PDF/A-1에서는 계속 거부됨. PDF/A-3의 경우 필수/AFRelationship키(ISO 19005-3 부속서 E)가 없는 임베디드 파일에 플래그가 지정되는 반면, PDF/A-2 첨부 파일은 허용됨(그 자체의 준수성은 재귀적으로 검증되지 않음). 새로운pvaiUnicodeMappingMissing문제는 폰트에/ToUnicode매핑이 전혀 없는 PDF/A-2u 또는 PDF/A-3u 문서를 보고함(ISO 19005-2 6.2.11.7). 투명도와 선택적 콘텐츠는 계속 PDF/A-1에 대해서만 플래그가 지정됨
Version 1.42.0
추가 (추가 (Added))
- 이제
SaveAsPdfA,ValidatePdfA및PdfAConformance속성이 세 가지 모든 준수 수준(a, b, u)에서 PDF/A-2(ISO 19005-2)와 PDF/A-3(ISO 19005-3)를 지원함.TPdfAConformance열거형에pac2a,pac2u,pac3a,pac3u가 추가됨(PDF/A-1에는 Level u가 없음). 저장 시 일치하는pdfaid:part(2 또는 3)와pdfaid:conformance(A, B 또는 U)가 기록되며, ISO 19005-2가 호환성을 위해 유지하는GTS_PDFA1OutputIntent 서브타입은 그대로 유지됨. 문서에 해당 수준이 요구하는 태그 구조가 없는 경우, Level A 요청은 (어떤 part에서든) 일치하는 Level B로 다운그레이드됨
Version 1.41.0
추가 (추가 (Added))
ValidatePdfA가 이제 이미 보고하던 구조적 표시에 더하여, 표시 주입으로는 복구할 수 없는 콘텐츠 수준의 PDF/A 위반을 감지함: JavaScript 및 기타 금지된 액션, 추가 액션(/AA), 임베디드 파일,LZWDecode, 투명도(소프트 마스크 및 투명 그룹), 선택적 콘텐츠(/OCProperties), 금지된 주석 서브타입(FileAttachment, Sound, Movie, 3D, Screen), AcroForm의/NeedAppearances true및/XFA, 디스크립터에 임베디드 폰트 프로그램이 없는 폰트, 그리고 ISO 19005-1 6.8이 요구하는 태그 구조 없이 이루어진 Level A 주장. 투명도, 선택적 콘텐츠 및 임베디드 파일 검사는 PDF/A-1에만 적용됨(이러한 기능은 PDF/A-2 및 PDF/A-3에서 허용됨). 새로운TPdfAValidationIssue값이 각 경우를 표면화하며, 기존 값은 변경되지 않음
Version 1.40.3
수정됨 (수정 (Fixed))
SaveAsPdfA가 이제 PDF/A 출력을 생성하기 전에 원본 문서의 모든 암호화를 제거함. ISO 19005-1 6.1.3은 trailer의/Encrypt키를 금지하지만, 이전의 저장 경로는 원본 문서의 보안 처리기를 유지했기 때문에, 암호화된 문서를 PDF/A로 저장하면 암호화되고 비준수인 파일이 생성되었음. 이제 PDF/A 저장은 먼저 문서를 복호화함. 암호화되지 않은 문서는 영향을 받지 않음
Version 1.40.2
수정됨 (수정 (Fixed))
SaveAsPdfA는 더 이상 잘못된 PDF/A Level A 적합성 주장을 내보내지 않습니다. Level A (pac1a)가 요청되었지만 원본 문서에 ISO 19005-1 6.8이 요구하는 tagged 구조 마커인 카탈로그의/StructTreeRoot와/MarkInfo딕셔너리의/Marked true가 없으면, 저장된 파일은 이제 Level A를 주장하는 대신 대응되는 Level B (pdfaid:conformance=B)로 식별됩니다. 순수한 시각형 PDF/A-1b 출력은 영향을 받지 않습니다
Version 1.40.1
수정됨 (수정 (Fixed))
- PDF 버전 호환성 검증을 강화하여
SetOCGState(set-optional-content-group-state) 액션을 PDF 1.5 기능으로 인식하도록 함. ISO 32000-1(Table 198)에 맞추어,SetOCGState액션을 포함하는 문서를 PDF 1.2, 1.3 또는 1.4 대상으로 저장하면 이제 거부됨. 이전에는 이러한 액션이 더 낮은 버전 출력으로 그대로 통과될 수 있었음. 이와 구별되는 폐기된 PDF 1.2SetState액션은 여전히 PDF 1.2부터 허용됨
Version 1.40.0
추가 (추가 (Added))
- 업스트림 API
FPDFPageObj_AddExistingMark()를 바인딩함. 기존 콘텐츠 마크를 페이지 객체에 첨부함. 연속된 페이지 객체가 동일한 마크를 공유하면 저장된 PDF는 이들을 모두 아우르는 단일 마크로 합침. 비연속 객체는 각각 별도의 사본을 받음 - 업스트림 API
FPDFTextObj_SetFontSize()를 바인딩하여 기존 텍스트 객체의 글자 크기(포인트)를 변경할 수 있게 함. 기존FPDFTextObj_GetFontSize()바인딩과 짝을 이룸
변경 (변경 (Changed))
- 동봉된 PDFium 런타임 DLL(Win32 및 Win64, 표준 빌드 및 V8 빌드)을 2026-06-02 업스트림 스냅샷으로 갱신함
Version 1.39.53
변경 (변경 (Changed))
- Delphi
PDFViewer,SplitView,MultiPageViewer예제가 기본적으로Zoom to Page모드에서 문서를 열도록 변경했습니다 - 초기 렌더링은 사용자가 수동 확대/축소 수준을 선택하기 전에 전체 페이지를 뷰어 영역에 맞춥니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 버전 메타데이터가 1.39.53을 보고하도록 업데이트했습니다
Version 1.39.52
변경 (변경 (Changed))
Demo\Lazarus\CreatePDF를 개선하여 입문 샘플이 이제 vector paths, table content, embedded image, text annotation, rotated text, 더 명확한 document-building walkthrough를 포함한 2페이지 PDF를 생성합니다- 모든 Delphi, C++Builder, Lazarus demo folder에 보기 좋은
README.html페이지를 추가하고, 남아 있던 text-only demo README를 브라우저에서 읽기 쉬운 guide로 교체했습니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.52로 업데이트했습니다
Version 1.39.51
Demo\Delphi\PreflightReportClibatch summary를 개선하여 selected standards 전체의 Pass, Action required, Review results에 대한 standard status totals를 추가했습니다- TXT / HTML / JSON / CSV summary의 per-file rows에는 action-required count와 review count가 포함되어 각 generated report를 열지 않고도 CI artifacts를 더 쉽게 검사할 수 있습니다
TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.51로 업데이트했습니다
Version 1.39.50
Demo\Delphi\PreflightReportClidirectory batch mode를 개선하여batchdir=folder가 발견한 PDF paths를 수집하고 정렬한 뒤 안정적인 순서로 reports를 생성합니다- Recursive directory scans는 재현 가능한 report order와 summary rows를 생성하며, 명시적
batch=list.txtprocessing은 계속 list file order를 유지합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.50으로 업데이트했습니다
Version 1.39.49
Demo\Delphi\PreflightReportClibatch summary를 개선하여 source kind, source path, recursive state, output directory, report format, selected standards,failon=mode 같은 run settings를 기록합니다- JSON summary에는
runobject가 추가되고, TXT 및 HTML summary는 run settings section을 표시하며, CSV rows는 spreadsheet 및 CI pipelines용 동일 audit columns를 반복합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.49로 업데이트했습니다
Version 1.39.48
Demo\Delphi\PreflightReportCli의 batch output naming을 개선해 같은outdir=를 공유하는 duplicate input file names가 서로의 generated reports를 덮어쓰지 않게 했습니다- Batch runs는 같은 실행에서 generated report path가 이미 할당된 경우
-2,-3및 이후 suffixes를 추가하고, summaries는 최종 collision-safe report path를 기록합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.48로 업데이트했습니다
Version 1.39.47
Demo\Delphi\PreflightReportClibatch summaries를 개선해 TXT와 JSON 출력이 이제 total files, processed files, failed files, issues,failon=matches의 aggregate totals를 포함합니다- CSV summaries는 기존 consumers를 위해 순수 row table로 유지하고, HTML summaries는 dashboard header에 같은 aggregate metrics를 계속 표시합니다
TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.47로 업데이트했습니다
Version 1.39.46
Demo\Delphi\PreflightReportCli에summary=batch.html/.htm을 추가해 batch runs가 TXT / CSV / JSON manifests와 함께 browser-readable dashboard를 출력할 수 있게 했습니다- HTML summaries는 total, processed, failed, issue,
failon=match metrics를 보여주고 각 input을 report links, status, counts, error text와 함께 나열합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.46으로 업데이트했습니다
Version 1.39.45
Demo\Delphi\PreflightReportCli에batchdir=folder와recursive를 추가해 scripts가 list file을 먼저 만들지 않고 PDF folders를 직접 스캔할 수 있게 했습니다- Directory batch mode는 list-based batch mode의
outdir=,summary=,standards=,failon=동작을 재사용합니다. non-recursive는 선택한 folder만 스캔하고recursive는 subfolders를 포함합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.45로 업데이트했습니다
Version 1.39.44
Demo\Delphi\PreflightReportCli에summary=batch.csv|json|txt를 추가해 batch runs가 per-file reports 옆에 machine-readable manifest를 출력할 수 있게 했습니다- Batch summaries에는 각 input path, report path, status, standard count, passed count, issue count,
failon=match state, error text가 포함되어 CI jobs와 외부 scripts에서 사용할 수 있습니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.44로 업데이트했습니다
Version 1.39.43
Demo\Delphi\PreflightReportCli에batch=list.txt와outdir=reports를 추가해 scripts가 한 번의 실행으로 PDF files 목록에 대한 preflight reports를 생성할 수 있게 했습니다- Batch mode는 빈 줄과
#comment lines를 건너뛰고 입력 PDF에서 각.preflight.<ext>report name을 만들며, per-file errors 뒤에도 계속 처리하고 반환 전에 processed 및 failed files를 요약합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.43으로 업데이트했습니다
Version 1.39.42
Demo\Delphi\PreflightReportCli에failon=none|issues|action|review를 추가하여 CI jobs가 생성된 preflight results를 결정적인 exit codes로 변환할 수 있게 했습니다- CLI는 report file과 optional attached-report PDF가 생성된 뒤 선택한
failon=rule이 일치하면 exit code 2를 반환하며, runtime errors는 계속 exit code 1을 반환합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.42로 업데이트했습니다
Version 1.39.41
Demo\Delphi\PreflightReportCli에attach=output.pdf를 추가하여 생성된 preflight report를 새 PDF copy의 document-level attachment로 포함할 수 있게 했습니다- CLI는 생성된 TXT / HTML / Markdown / JSON / CSV report file을 디스크에 유지하고 원래 input PDF path에 다시 첨부하는 것을 거부하여 우발적 덮어쓰기 위험을 줄입니다
TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.41로 업데이트했습니다
Version 1.39.40
Demo\Delphi\PreflightReportCli를 추가했습니다. 이 Delphi console companion은 뷰어를 열지 않고도 스크립트 가능한 방식으로FPdfPreflightReport를 생성할 수 있습니다- 이 CLI는 인수 없는 sample 생성, input / output arguments, optional password,
text/html/md/json/csv출력 형식, 그리고 PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, PDF/VT용standards=필터링을 지원합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.40을 보고하도록 갱신했습니다
Version 1.39.39
FPdfPreflightReport에TPdfPreflightReport.ToMarkdown및SaveMarkdownToFile을 추가하여 preflight reports를 issue tracker에 적합한 Markdown으로 내보낼 수 있게 했습니다- Delphi, C++Builder, Lazarus
PreflightReport샘플에 기존 TXT / HTML / JSON / CSV workflow와 함께 Markdown preview switching 및 Save MD actions를 추가했습니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.39로 보고하도록 업데이트했습니다
Version 1.39.38
- Delphi, C++Builder, Lazarus
SecurityAudit샘플에 기존 TXT save / copy workflow와 함께 JSON audit report export를 추가했습니다 - JSON report에는
format,generatedAt,summary,findingCount, 그리고 severity, area, detail 필드를 가진 구조화된findingsrows가 포함됩니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.38로 보고하도록 업데이트했습니다
Version 1.39.37
FPdfPreflightReport에TPdfPreflightReport.ToCsv와SaveCsvToFile를 추가하여 preflight reports를 spreadsheet-friendly CSV로 내보낼 수 있게 했습니다- Delphi, C++Builder, Lazarus
PreflightReportsamples를 업데이트하여 기존 TXT / HTML / JSON workflow와 함께 CSV preview switching 및 Save CSV actions를 추가했습니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 업데이트하여 1.39.37을 보고하도록 했습니다
Version 1.39.36
FPdfPreflightReport에TPdfPreflightReport.IssueCategoryCounts와 재사용 가능한TPdfPreflightIssueCategoryCount,TPdfPreflightIssueCategoryCounts타입을 추가해 marker-level issues를 category별로 집계할 수 있게 했습니다TPdfPreflightReport.ToText,ToHtml,ToJson을 업데이트하여 생성되는 PreflightReport 출력에 per-standard rows와 detailed issue recommendations alongside issue-category count summaries가 포함되도록 했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.36으로 업데이트했습니다
Version 1.39.35
- 확장된
PrintDialogsample을 Delphi, C++Builder, Lazarus에서PrintPreferences로 이름 변경하여 demo name이 PDF author print preferences, N-up printing, odd / even filtering, grayscale, cell border, duplex mapping workflow와 일치하도록 했습니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.35로 업데이트했습니다
Version 1.39.34
Demo\Delphi\PrintPDF에 드래그 앤 드롭 PDF 로드를 추가하고, 기존Demo\CBuilder\PrintPDFworkflow를 Delphi 및 Lazarus PrintPDF 예제와 함께 문서화했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.34로 보고하도록 업데이트했습니다
Version 1.39.33
Demo\CBuilder\SplitView를 추가하여 Delphi, C++Builder, Lazarus 전체의 SplitView sample matrix를 완성했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.33으로 보고하도록 업데이트했습니다
Version 1.39.32
Demo\Lazarus\SplitView를 추가하여 two- or three-pane layouts, active-view navigation, synchronized commands, zoom presets, rotation을 포함한 side-by-side PDF comparison을 Lazarus에서도 사용할 수 있게 했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.32로 보고하도록 업데이트했습니다
Version 1.39.31
Demo\Lazarus\PrintPDF를 추가하여 preview navigation, page ranges, copies, collate mode, progress, cancellation을 포함한 standard PDF print workflow를 Lazarus에서도 사용할 수 있게 했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.31로 보고하도록 업데이트했습니다
Version 1.39.30
Demo\Lazarus\FontProperties를 추가하여 Delphi, C++Builder, Lazarus 전반의 FontProperties sample matrix를 완성했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.30으로 보고하도록 업데이트했습니다
Version 1.39.29
Demo\CBuilder\FontProperties를 추가하여 Delphi sample과 함께 C++Builder에서도 indexed character 및 font metadata 검사를 사용할 수 있게 했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.29로 보고하도록 업데이트했습니다
Version 1.39.28
Demo\Delphi\ExtractTextPages를 추가하여 Delphi, C++Builder, Lazarus 전반의 페이지별 텍스트 추출 sample matrix를 완성했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.28로 보고하도록 업데이트했습니다
Version 1.39.27
Demo\Lazarus\PrintDialog를 추가해 Delphi, C++Builder, Lazarus의 PrintDialog sample matrix를 완성했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.27을 보고하도록 업데이트했습니다
Version 1.39.26
Demo\CBuilder\PrintDialog를 추가해 N-up printing과 PDF author print preferences workflow를 Delphi sample과 함께 C++Builder에서도 사용할 수 있게 했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.26을 보고하도록 업데이트했습니다
Version 1.39.25
Demo\CBuilder\ViewerInteractionLab를 추가해 Delphi, C++Builder, Lazarus의 ViewerInteractionLab sample matrix를 완성했습니다- library build workflow와 Win64 C++Builder package outputs를 업데이트해
TPdfViewviewer interaction methods가 Win64 demos에서 올바르게 링크되도록 했습니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.25를 보고하도록 업데이트했습니다
Version 1.39.24
Demo\Lazarus\ViewerInteractionLab를 추가해 focused viewer interaction workflow를 Delphi sample과 함께 Lazarus에서도 사용할 수 있게 했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.24를 보고하도록 업데이트했습니다
Version 1.39.23
Demo\Lazarus\SearchAndSelect를 추가해 Delphi, C++Builder, Lazarus의 SearchAndSelect sample matrix를 완성했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.23을 보고하도록 업데이트했습니다
Version 1.39.22
Demo\CBuilder\ContentExtractionLab와Demo\Lazarus\ContentExtractionLab를 추가해 multi-category content extraction workflow를 지원되는 모든 demo IDE로 확장했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.22를 보고하도록 업데이트했습니다
Version 1.39.21
Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReport,Demo\CBuilder\PreflightReport에 preview format selector를 추가하여 보고서를 저장하기 전에 text 또는 JSON output을 확인할 수 있게 했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.21을 보고하도록 업데이트했습니다
Version 1.39.20
FPdfPreflightReport에 JSON 내보내기를 추가해TPdfPreflightReport.ToJson및SaveJsonToFile를 통해 machine-readable summary, 표준별 status / priority, next action, issue detail을 생성합니다Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReport,Demo\CBuilder\PreflightReport에는 TXT / HTML 내보내기와 함께 Save JSON 동작도 추가했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.20을 보고하도록 갱신되었습니다
Version 1.39.19
FPdfPreflightReport에TPdfPreflightStatus, issue categories, per-standard priority, TXT / HTML reports의 next-action guidance를 추가했습니다Demo\Delphi\PreflightReport,Demo\Lazarus\PreflightReport,Demo\CBuilder\PreflightReport가 summary grid에 status, priority, issue count, next action을 표시하도록 업데이트했습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.19를 보고하도록 업데이트했습니다
Version 1.39.18
Demo\Lazarus\SecurityAudit를 추가하여 read-only PDF risk-surface audit workflow에 대한 Delphi, C++Builder, Lazarus 예제 매트릭스를 완성했습니다- Lazarus 샘플은 permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability, unsupported-feature callbacks를 열거하고 finding list를 TXT report로 저장하거나 복사합니다
TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.18을 보고하도록 업데이트했습니다
Version 1.39.17
Demo\CBuilder\SecurityAudit를 추가하여 기존 Delphi 예제와 함께 read-only PDF risk-surface audit workflow를 C++Builder에서도 제공합니다- C++Builder 샘플은 permissions, attachments, JavaScript actions, URI / Launch link annotations, web links, signatures, XFA state, V8 / XFA helper availability, unsupported-feature callbacks를 열거하고 finding list를 TXT report로 저장하거나 복사합니다
TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.17을 보고하도록 업데이트했습니다
Version 1.39.16
Demo\CBuilder\SearchAndSelect를 추가하여 기존 Delphi 예제와 함께 독립 SearchAndSelect viewer workflow를 C++Builder에서도 제공합니다- C++Builder 샘플은 PDFs 생성 또는 열기, 모든 페이지 matches의 page / character-index previews 목록, Previous / Next 및 double-click navigation,
HighlightSearchText를 통한 현재 페이지 matches 강조를 보여 줍니다 AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection,OnSelectionChange, spreadDisplayModeoptions도 노출하며, 버전 메타데이터는 이제 1.39.16을 보고합니다
Version 1.39.15
Demo\CBuilder\WatermarkStamp를 추가하여 재사용 가능한 Form XObject watermark 및 stamp workflows에 대한 Delphi, Lazarus, C++Builder demo matrix를 완성했습니다- C++Builder 예제는 target 및 stamp PDF를 만들고,
CreateXObjectFromPage로 stamp page를 재사용하며,TPdfMatrixtransforms를 적용해 centered watermarks, corner stamps, page number labels를 저장합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.15를 보고하도록 업데이트했습니다
Version 1.39.14
Demo\Lazarus\WatermarkStamp를 추가하여 재사용 가능한 Form XObject watermark 및 stamp workflow를 Lazarus로 가져왔습니다- Lazarus 예제는 target 및 stamp PDF를 만들고,
CreateXObjectFromPage로 stamp page를 재사용하며,TPdfMatrixtransforms를 적용해 centered watermarks, corner stamps, page number labels를 저장합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata가 1.39.14를 보고하도록 업데이트했습니다
Version 1.39.13
Demo\CBuilder\PreflightReport를 추가하여 재사용 가능한FPdfPreflightReportworkflow의 Delphi, Lazarus, C++Builder demo matrix를 완성했습니다- C++Builder 예제는
FPdfPreflightReport.hpp를 사용해 standard summaries, TXT report previews, TXT / HTML report files와 Open Last Report 동작을 생성합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 업데이트하여 1.39.13을 보고하도록 했습니다
Version 1.39.12
Demo\Lazarus\PreflightReport를 추가하여 PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, PDF/VT preflight report workflow를 Lazarus에서도 사용할 수 있게 했습니다- Lazarus 예제는 PDF를 열거나 만들고, target standards를 선택하고, summary rows와 TXT report output을 미리 보고, TXT / HTML reports를 저장하고, 가장 최근에 저장한 report를 열 수 있습니다
TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 업데이트하여 1.39.12를 보고하도록 했습니다
Version 1.39.11
Demo\Delphi\SearchAndSelect를 강화하여 모든 페이지의 검색 결과 목록에서 page number, character index, preview text를 기록하도록 했습니다- 현재 페이지의
HighlightSearchText동작을 유지하면서 Previous / Next match navigation과 double-click result jumping을 추가했습니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 업데이트하여 1.39.11을 보고하도록 했습니다
Version 1.39.10
Demo\Delphi\SecurityAudit에 Save Report 및 Copy Report actions를 추가하여 현재 summary와 finding rows를 TXT audit report로 내보낼 수 있게 했습니다- audit panel이 reset될 때 report export state를 지워, 복사하거나 저장한 reports가 보이는 findings와 일치하도록 했습니다
TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.10으로 업데이트했습니다
Version 1.39.9
Demo\Delphi\ContentExtractionLab에 source-PDF save, report copy-to-clipboard, all / none category selection actions를 추가했습니다- category selection이 변경되면 현재 report를 무효화하여 TXT / JSON exports가 보이는 extraction scope를 반영하도록 했습니다
TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.9로 업데이트했습니다
Version 1.39.8
Demo\Delphi\ContentExtractionLab를 추가했습니다. document metadata, page text, page objects, images, attachments, links, annotations, bookmarks, font / character metrics를 다루는 통합 content extraction workflow sample입니다- 이 sample은 기존 PDF를 열거나 text, image, attachment, annotation 콘텐츠가 포함된 synthetic PDF를 만든 뒤 summary rows와 상세 TXT / JSON reports를 생성할 수 있습니다
TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.8로 업데이트했습니다
Version 1.39.7
Lib\FPdfPreflightReport.pas를 추가했습니다. 이 재사용 가능한 report helper는ValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfR,ValidatePdfVT를 하나의TPdfPreflightReport객체로 감쌉니다Demo\Delphi\PreflightReport도 추가했습니다. 이 workflow sample은 PDF를 열거나 만들고, 대상 표준을 선택하고, 요약 행과 이슈 권고를 미리 본 다음 TXT 또는 HTML 보고서를 저장합니다- 생성된 보고서는 내장된 marker-level validation 경계를 명시적으로 설명하므로, 필요한 경우 애플리케이션이 전용 content-level preflight 도구와 함께 사용할 수 있습니다
TPdf.AboutInfo, Lazarus package metadata, package project lists, installer version metadata를 1.39.7을 보고하도록 업데이트했습니다
Version 1.39.6
- search highlighting, text selection, selected-text preview, copy, clear, spread display modes에 집중한 viewer workflow 샘플
Demo\Delphi\SearchAndSelect를 추가했습니다 - 이 샘플은 새 라이브러리 API를 추가하지 않고
HighlightSearchText, match-case / whole-word 검색 옵션,AllowUserTextSelection,SelectedText,SelectAll,CopySelectionToClipboard,ClearSelection을 보여 줍니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.6으로 업데이트했습니다
Version 1.39.5
Demo\Delphi\ViewerInteractionLab을 SearchAndSelect 스타일 viewer UX 샘플로 확장하여HighlightSearchText, match-case / whole-word 옵션, 선택 텍스트 미리보기, 기존 selection / clipboard controls를 포함했습니다Demo\Delphi\PrintDialog를 확장하여 PDF author print preferences인PrintCopies,PrintPageRanges,PrintScaling,PrintPaperHandling및SetPdfPrintPaperHandlingDevModeduplex mapping을 표시합니다- 읽기 전용 risk-surface 샘플인
Demo\Delphi\SecurityAudit을 추가하여 permissions, attachments, document JavaScript, URI / Launch links, web links, signatures, XFA state, V8 / XFA helper availability를 나열합니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.5로 업데이트했습니다
Version 1.39.4
Demo\CBuilder\ImageToPDF와Demo\Lazarus\ImageToPDF를 추가하여 Delphi, C++Builder, Lazarus 전반의 ImageToPDF 샘플 매트릭스를 완성했습니다- 새 샘플은 다중 이미지 선택, 선택 이미지 미리보기, 이미지당 PDF 페이지 1개, A4 portrait / landscape 페이지 크기, 중앙 정렬 이미지 스케일링, 이미지별 진행률, 저장 후 생성된 PDF 열기를 보여줍니다
TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.4로 업데이트했습니다
Version 1.39.3
Demo\CBuilder\BatchExport를 추가하여 기존 Delphi 및 Lazarus 샘플과 함께 C++Builder에서도 다중 파일 PDF to JPG 내보내기 workflow를 사용할 수 있게 했습니다- 이 샘플은
LoadCustomDocument,IPdfCancellationTokenSource, 스트리밍TFileStream입력, 파일별 및 페이지별 진행률, 취소 처리, DPI / quality / password 입력, 완료 후 출력 폴더 열기를 보여줍니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.3으로 업데이트했습니다
Version 1.39.2
Demo\Delphi\WatermarkStamp를 추가했습니다. 이 실행 가능한 Form XObject workflow sample은 대상 PDF와 재사용 가능한 stamp PDF를 만든 뒤 모든 페이지에 가운데 워터마크, 우상단 스탬프, 페이지 번호 라벨을 적용합니다- 이 예제는 새 라이브러리 API를 추가하지 않고
CreateXObjectFromPage,InsertFormObjectFromXObject,TPdfMatrix,FPDFPageObj_SetMatrix를 시연합니다 Docs\en-us\Examples.html을 업데이트해 행렬을 전달할 때 현재TPdfMatrix.Handle패턴을FPDFPageObj_SetMatrix와 함께 사용하도록 맞췄습니다TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.2를 보고하도록 업데이트했습니다
Version 1.39.1
Demo\Delphi\ViewerInteractionLab를 추가했습니다. 이 집중형TPdfViewsample은 display mode, fit mode, page color, rotation, user text selection, clipboard action,DeviceToPage좌표 피드백을 다룹니다Demo\CBuilder\StandardsLab/Demo\Lazarus\StandardsLab도 추가되어 Lazarus 사용자가 PDF/A, PDF/UA, PDF/E, PDF/X, PDF/R, PDF/VT 검증과 marker-output workflow를 실행할 수 있습니다Lib\37.0\PDFiumPas.dproj와Lib\FPC\PDFiumLaz.lpk에 standards unit을 나열하고, DelphiSplitViewdemo 빌드에서는 중복된Winapi.ShellAPIimport를 제거해 문제를 고쳤습니다BatchExport,PDFViewer,MultiPageViewer,SplitView의 Delphi demo batch-build blocker도 런타임 동작을 바꾸지 않고 수정했습니다- 현재 프로젝트 모드에 맞게
PDFViewer와MultiPageViewer에서nullptr를NULL로 바꿔 C++Builder demo batch-build 호환성도 수정했습니다 TPdf.AboutInfo, Lazarus package metadata, installer version metadata를 1.39.1을 보고하도록 업데이트했습니다
Version 1.39.0
Demo\Delphi\StandardsLab를 추가했습니다. PDF를 로드하거나 만들고ValidatePdfA,ValidatePdfUa,ValidatePdfE,ValidatePdfX,ValidatePdfR,ValidatePdfVT를 실행한 뒤 감지된 conformance, 통과 상태, issue 수를 하나의 그리드에 표시하는 실행 가능한 표준 워크플로 예제입니다- StandardsLab의 저장 버튼은
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfR,SaveAsPdfVT를 호출하므로 사용자 지정 harness 없이 PDF 표준 marker 출력을 확인할 수 있습니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 버전 메타데이터를 1.39.0으로 업데이트했습니다
Version 1.38.0
TPdfView검색 및 텍스트 선택 오버레이는 이제 논리 마스크 페인팅 대신 실제 alpha blending을 사용하므로 하이라이트 아래의 페이지 내용이 보존됩니다SetPdfPrintPaperHandlingDevMode를 추가해TPrintPaperHandling을 WindowsDEVMODE.dmDuplex값인DMDUP_SIMPLEX,DMDUP_HORIZONTAL,DMDUP_VERTICAL로 매핑할 수 있게 했습니다TPdfView.SmoothScroll은 이제 line/page scrollbar command를 timer-driven segment로 애니메이션하며, thumb tracking은 계속 즉시 반응합니다TPdf.AboutInfo와 installer version metadata를 1.38.0을 보고하도록 업데이트했습니다
Version 1.37.0
TPdf에 인스턴스별 render lock을 추가하여RenderPage,RenderTile,RenderPageProgressive, 페이지 reload, 문서 unload 경로를 직렬화합니다. 공유 컴포넌트를 통한 worker 렌더링이 실용적이 되었으며, 문서 변경과 수명 관리는 여전히 애플리케이션이 조율합니다- zero-copy bitmap wrapper가 bottom-up
TBitmapDIB를 거부하고 PDFium 소유 버퍼로 fallback 후 복사하도록 수정하여 VCL 렌더 테스트의 stride corruption / access violation을 제거했습니다 TPdfView선택 동작을 보강했습니다.AllowUserTextSelection은 사용자 입력만 막고 코드 수준 선택 API는 계속 그리며,SelectAll은 실제 표시 spread를 따라 표지 페이지가 페이지 2를 선택하지 않습니다. Delphi, Lazarus, C++Builder 테스트를 확장했습니다TPdf.AboutInfo및 설치 관리자 버전 메타데이터를 1.37.0으로 업데이트했습니다
Version 1.36.0
TPdfView에서 최종 사용자 텍스트 선택이 활성화되었습니다. v1.17.0부터 예약만 되어 있던AllowUserTextSelection속성이 이제 완전한 drag-select 파이프라인을 구동합니다. 텍스트 문자에서 왼쪽 클릭하면 선택 모드로 들어가고, 빈 영역에서 왼쪽 클릭하면 예전처럼 패닝이 이어집니다. form-fill 위젯이 우선권을 유지하므로 폼 필드를 클릭하면 선택이 시작되지 않고 여전히 해당 필드에 포커스가 갑니다- 더블 클릭은 단어를 선택하고, 트리플 클릭은 줄을 선택하며,
Ctrl+A는 현재 페이지를 선택하고 (spread 표시 모드에서는 양쪽 페이지 모두),Ctrl+C는 선택 영역을 Windows 클립보드에CF_UNICODETEXT로 복사합니다 Shift+Left/Shift+Right는 선택을 한 글자씩 확장하고 (spread 모드에서는 인접 페이지로 이어짐),Shift+Home/Shift+End는 시작 문자의 박스 높이를 줄 클러스터 허용치로 사용해 시각적 줄 끝까지 확장하므로 글꼴 크기가 섞인 줄도 올바르게 묶입니다- 텍스트 위에 마우스를 올리면 커서가
crIBeam으로 바뀌고, 텍스트 밖으로 나오면 기본 커서로 복원됩니다. 텍스트 선택 드래그가 진행되는 동안 뷰어 가장자리의 20픽셀 dead zone으로 끌어가면 페이지가 자동 스크롤되므로 마우스를 먼저 놓지 않고도 현재 viewport 밖으로 선택을 확장할 수 있습니다 - spread 표시 모드 (
dmTwoPageContinuous,dmTwoPageContinuousWithCover)에서는 페이지를 가로지르는 선택도 동작합니다. 왼쪽 페이지에서 시작해 오른쪽 페이지에서 끝나는 드래그는 두 페이지를 잇는 연속 범위를 선택하며,SelectedText는 페이지별 조각을 CR/LF로 이어 붙여 일반적인 여러 줄 텍스트처럼 round-trip됩니다 - 새 published 속성
SelectionColor(기본값clHighlight, Windows 시스템 선택 색상)가 추가되었습니다. 이 속성은 검색 결과를 노란색으로 칠하는HighlightColor와 독립적이므로 검색 하이라이트와 실시간 drag-selection을 동시에 화면에 표시해도 색상이 충돌하지 않습니다 - 새 published 이벤트
OnSelectionChange는 선택의 materialised range가 실제로 바뀔 때만 발생하며, 동일한 선택을 다시 적용할 때는 발생하지 않으므로 호스트 애플리케이션이 디바운싱 없이 상태 표시줄 텍스트나 버튼 enabled 상태에 직접 연결할 수 있습니다 TPdfView에 새 public API가 추가되었습니다:HasSelection,SelectionCharCount,SelectedText,ClearSelection,SelectAll,CopySelectionToClipboard. 이들은 코드 수준 진입점이므로AllowUserTextSelection과 무관하게 항상 동작합니다. 이 플래그는 사용자 입력만 제어하므로 (mouse, Ctrl+C, Ctrl+A, Shift+arrows), kiosk host는 사용자 주도 선택을 막으면서도 같은 API를 호출하는 "Select All / Copy" 도구막대 버튼을 계속 제공할 수 있습니다- 기본 우클릭
Copy/复制popup menu는 호스트가 자체PopupMenu를 지정하지 않았을 때 자동으로 연결되어, 표준적인 "텍스트 선택 후 우클릭하여 복사" 흐름이 바로 동작합니다. 캡션은SysLocale.PriLangID에 따라 영어와 중국어 사이에서 선택되며, 전체 현지화나 더 풍부한 메뉴가 필요한 호스트는 자체PopupMenu를 지정하면 기본 메뉴가 억제됩니다 - 선택은
SetPdf,SetPageNumber,SetActive(False),DisplayMode전환 시 자동으로 지워지며, 이전 선택이 비어 있지 않았을 때만OnSelectionChange가 정확히 한 번 발생합니다. form-fill 하위 시스템이 우선권을 유지하므로 폼 필드를 편집하는 동안에는 모든 선택 키보드 단축키가 양보되어 해당 필드가 자신의 선택을 위해Ctrl+C/Ctrl+A/Shift+arrows를 받습니다 - Delphi와 Lazarus 회귀 테스트는 각각 202개, C++Builder 테스트는 159개까지 확장되어 기본값, round-trip, public API 동작, 상태 변경 시 선택 해제, mouse drag (hit-text / hit-blank), click 대 drag, IBeam 커서 전환, double-click 단어 선택, triple-click 줄 선택, keyboard shortcut, 기본 popup attach / defer / caption, spread 페이지 간 선택, 그리고 clipboard CR/LF round-trip 검사까지 포괄합니다
Version 1.35.0
- PDF/VT (ISO 16612-2:2010) 마커 주입 지원이 추가되었습니다. TPdf.SaveAsPdfVT는 현재 문서를 PDF/VT-1 또는 PDF/VT-2 준수 파일, 즉 가변 데이터 및 트랜잭션 인쇄용 PDF 하위 집합으로 승격합니다. PDF/VT는 PDF/X-4 위에 세워지며 ISO 16612-2 §6.2.1은 모든 PDF/VT-1 파일이 PDF/X-4도 충족해야 한다고 요구하므로, 이 주입기는 PDF/VT 전용 속성과 함께 전체 PDF/X-4 마커 세트인 XMP
pdfxid:GTS_PDFXVersion = "PDF/X-4", Info/GTS_PDFXVersion (PDF/X-4)및/Trapped, 그리고 임베드된 ICC 프로필을 담은 OutputIntent 딕셔너리를 참조하는 catalog/OutputIntents도 함께 기록합니다 - PDF/VT 전용 주입은 XMP
pdfvtid:GTS_PDFVTVersion(§6.3 Table 2에 따라 "PDF/VT-1" 또는 "PDF/VT-2")과pdfvtid:GTS_PDFVTModDate(§6.3 NOTE 1에 따라xmp:ModifyDate와 동기화됨), 그리고 pdfxid와 pdfvtid 네임스페이스 둘 다를 선언하는 pdfaExtension:schemas 설명 (NPES URIhttp://www.npes.org/pdfx/ns/id/및http://www.npes.org/pdfvt/ns/id/)을 포함합니다. 트레일러는/ID배열도 가집니다 - 메모리 내 PDF/VT 출력을 위한 TPdf.SaveAsPdfVTToStream과 기본 옵션 단축형
TPdf.SaveAsPdfVT(FileName)도 추가되었습니다. 이 단축형은 번들된 sRGB IEC61966-2.1 OutputIntent (3144 bytes, SaveAsPdfA / SaveAsPdfX와 같은 프로필)와/Trapped /False를 사용해 기본적으로 PDF/VT-1을 생성합니다 - TPdf.ValidatePdfVT도 추가되었습니다. 이 함수는 열린 PDF에서 PDF/VT 적합성 마커를 확인하며, XMP
pdfvtid:GTS_PDFVTVersion및GTS_PDFVTModDate의 존재,pdfvtid:GTS_PDFVTModDate와xmp:ModifyDate의 동일성, 기반pdfxid:GTS_PDFXVersion식별자의 존재, §6.5에 따른 catalog/DPartRoot존재,/OutputIntents와 그 안의/DestOutputProfile, trailer /ID, 암호화 상태,xmp:CreateDate/ModifyDate존재를 검사하고 감지된 적합 수준과 문제 집합을 담은 TPdfVTValidationResult를 반환합니다 - TPdf.PdfVTConformance 속성도 추가되어 ValidatePdfVT를 명시적으로 호출하지 않아도 현재 열린 문서의 적합 수준인 pvc1, pvc2, pvcNone, pvcUnknown을 돌려줍니다
- 새 unit FPdfPdfvt는 TPdfVTConformance (pvcUnknown/None/1/2), TPdfVTTrappedState (ptvUnspecified/True/False/Unknown), TPdfVTValidationResult, TPdfVTValidationIssue, TPdfVTSaveOptions를 내보냅니다
- 문서 파트 계층인
DPartRoot/DPart트리 (§6.5)는 수신자 / 페이지 범위 매핑에 의존하는 애플리케이션 수준 구조이므로 SaveAsPdfVT가 자동으로 합성하지 않습니다. 대신 ValidatePdfVT는 누락된/DPartRoot를pvviMissingDPartRoot로 보고하여 호출자가 별도의 DPart 구축 단계로 PDF/VT 파일을 넘길 수 있게 합니다. 글꼴 임베딩, 투명도, ICC 관리 색상, OPI / JavaScript / Reference XObject 금지 같은 콘텐츠 수준 PDF/X-4 요구사항은 계속 문서 작성자와 PDFium 렌더링 파이프라인의 책임입니다 - TPdf.AboutInfo 문자열도 현재 제품 버전을 보고하도록 업데이트했습니다
Version 1.34.0
- PDF/R-1 (ISO 23504-1:2020) 마커 주입 지원이 추가되었습니다. TPdf.SaveAsPdfR은 현재 문서를 PDF/R-1 준수 파일, 즉 스캔 문서용 PDF 래스터 이미지 전송 하위 집합으로 승격합니다. 이 주입은 후처리로 덧붙일 수 있는 파일 형식 수준 요구사항을 다루며, trailer dictionary와 startxref 사이에 기록되는 고유한
%PDF-raster-1.0버전 식별 주석 (§5), §6.3 화이트리스트만 남긴 catalog, §6.4.3 화이트리스트만 남긴 Document Information Dictionary, §6.4.4 Table 1의 4개 항목을 담은 catalog /Metadata XMP 스트림, 그리고 trailer /ID 배열을 포함합니다 - 메모리 내 PDF/R 출력을 위한 TPdf.SaveAsPdfRToStream과 일반적인 경우를 위한 단축형
TPdf.SaveAsPdfR(FileName)도 추가되었습니다 - TPdf.ValidatePdfR도 추가되었습니다. 이 함수는 열린 PDF에서 PDF/R-1 적합성 마커인
%PDF-raster-x.yfooter comment, header version, /Type /ObjStm 부재, catalog 화이트리스트 준수, Info dictionary 화이트리스트 준수, XMP metadata stream 존재, trailer /ID를 검사하고 감지된 적합 수준과 문제 집합을 담은 TPdfRValidationResult를 반환합니다 - TPdf.PdfRConformance 속성도 추가되어 ValidatePdfR를 명시적으로 호출하지 않아도 현재 열린 문서의 적합 수준인 prc1, prcNone, prcUnknown을 반환합니다
- 새 unit FPdfPdfr는 TPdfRConformance, TPdfRValidationResult, TPdfRValidationIssue, TPdfRSaveOptions를 내보냅니다.
TPdfRSaveOptions.Default는 StripInfoOptionalEntries와 StripCatalogOptionalEntries를 True로 설정하므로 주입기는 기본적으로 §6.3 / §6.4.3을 만족하는 catalog와 Info dictionary를 생성합니다. 호출자는 이를 False로 바꿔 원본 항목을 보존할 수 있지만, 그 경우 해당 PDF/R 조항은 만족하지 못해도 다른 마커는 그대로 붙습니다 - 콘텐츠 수준 요구사항은 계속 원본 PDF의 책임입니다. 페이지별 Contents 구조 (§6.5.1), MediaBox
[0 0 w h]형식 (§6.5.3), 필터 제한, object stream 부재 (§6.2.4), §6.6의 strip layout은 후처리만으로 강제할 수 없습니다. PDF/R은 다른 PDF/x 표준보다 구조적으로 훨씬 더 엄격한 하위 집합이므로, 전체 콘텐츠 수준 검증에는 TWAIN Working Group PDF/R validator와 함께 사용해야 합니다 - TPdf.AboutInfo 문자열도 현재 제품 버전을 보고하도록 업데이트했습니다
Version 1.33.0
- PDF/X (ISO 15930 계열) 마커 주입 지원이 추가되었습니다. TPdf.SaveAsPdfX는 베이스 PDF를 증분 업데이트로 후처리하여 현재 문서를 PDF/X-1a:2001, PDF/X-3:2002, PDF/X-4 준수 파일로 승격합니다. 이 주입은 후처리로 덧붙일 수 있는 파일 형식 수준 요구사항을 다루며,
pdfxid:GTS_PDFXVersion및pdfxid:GTS_PDFXConformance를 담은 XMP 메타데이터 스트림과 그에 대응하는 pdfaExtension:schemas 설명,/GTS_PDFXVersion,/GTS_PDFXConformance,/Trapped항목을 포함하도록 다시 쓴 Document Information Dictionary, 임베드된 ICC 프로필과/OutputIntents [N 0 R]및/S /GTS_PDFX를 가진 OutputIntent 딕셔너리를 참조하는 catalog, 그리고 trailer/ID배열을 포함합니다 - 메모리 내 PDF/X 출력을 위한 TPdf.SaveAsPdfXToStream과 기본 옵션 단축형
TPdf.SaveAsPdfX(FileName)도 추가되었습니다. 이 단축형은 번들된 sRGB IEC61966-2.1 OutputIntent (3144 bytes, SaveAsPdfA와 동일한 프로필)를 사용해 기본적으로 PDF/X-4를 생성합니다 - TPdf.ValidatePdfX도 추가되었습니다. 이 함수는 열린 PDF에서 PDF/X 적합성 마커를 검사하며, XMP pdfxid 식별자와 Info dictionary 값의 일치, pdfxid extension schema 설명, /OutputIntents 배열의 /DestOutputProfile, Title 존재, trailer /ID, 암호화 상태, xmp:CreateDate / xmp:ModifyDate 존재를 확인하고 감지된 수준과 문제 집합을 담은 TPdfXValidationResult를 반환합니다
- TPdf.PdfXConformance 속성도 추가되어 ValidatePdfX를 명시적으로 호출하지 않아도 현재 열린 문서의 적합 수준인 pxc1a, pxc3, pxc4, pxcNone, pxcUnknown을 반환합니다. XMP 버전 문자열을 파싱해 세 가지 적합 수준을 구분합니다
- 새 unit FPdfPdfx는 TPdfXConformance (pxcUnknown/None/1a/3/4), TPdfXTrappedState (ptUnspecified/True/False/Unknown), TPdfXValidationResult, TPdfXValidationIssue, TPdfXSaveOptions를 내보냅니다.
TPdfXSaveOptions.Default는 sRGB OutputIntent와/Trapped /False를 사용하는 PDF/X-4를 기본 목표로 하며, 호출자는Conformance를 바꾸거나 상업 인쇄용 CMYKIccProfileDatablob을 제공하거나 특정 ICC 특성화 레지스트리 항목을 가리키도록OutputCondition,OutputConditionIdentifier,RegistryName을 변경할 수 있습니다 - 모든 폰트 임베딩, JavaScript 금지, visible annotation 금지, OPI 금지, PDF/X-1a / PDF/X-3의 투명도 규칙 같은 콘텐츠 수준 요구사항은 계속 문서 작성자와 PDFium 렌더링 파이프라인의 책임입니다. 전체 적합성 검증에는 ValidatePdfX를 callas pdfaPilot 또는 Ghent PDF Workgroup Output Suite 같은 preflight 도구와 함께 사용해야 합니다
- TPdf.AboutInfo 문자열도 현재 제품 버전을 보고하도록 업데이트했습니다
Version 1.32.0
- PDF/E-1 (ISO 24517-1:2008) 마커 주입 지원 추가: TPdf.SaveAsPdfE는 베이스 PDF에 증분 업데이트로 후처리하여 현재 문서를 PDF/E-1 준수 파일로 승격합니다. 주입은 후처리로 달성 가능한 파일 형식 수준 요구사항을 포함합니다 —
pdfe:ISO_PDFEVersion = "PDF/E-1"과 일치하는 pdfaExtension:schemas 설명을 포함하는 XMP 메타데이터 스트림, §5에서 필수인/ISO_PDFEVersion (PDF/E-1)항목을 포함하도록 재작성된 Document Information Dictionary, §13.1을 통해 ISO 19005-1 §6.7에서 상속된 Info-XMP 동등성, §6.2에서 필수인 trailer/ID배열 - 메모리 내 PDF/E 출력을 위한 TPdf.SaveAsPdfEToStream과 일반적인 경우를 위한 단축형
TPdf.SaveAsPdfE(FileName)추가 - TPdf.ValidatePdfE 추가: PDF/E-1 준수 마커를 확인하고 TPdfEValidationResult를 반환합니다
- TPdf.PdfEConformance 속성 추가: ValidatePdfE를 명시적으로 호출하지 않고 준수 수준을 반환합니다
- 새 단위 FPdfPdfe에 내보낸 새 타입: TPdfEConformance, TPdfEValidationResult, TPdfEValidationIssue, TPdfESaveOptions
- Info 사전 재작성은 PDFiumPas의 PDF/x 후처리 경로에서 처음 있는 일 — 기존 Info 객체를 동일한 객체 번호로 재작성하고 (trailer의 /Info 참조 유지), 소스 trailer에 /Info가 없으면 새 Info 사전을 합성합니다
- 콘텐츠 수준 요구사항 (폰트 임베딩, ToUnicode CMap, 금지된 XObject / ExtGState 키 / XFA 폼)은 계속 문서 작성자의 책임입니다
- TPdf.AboutInfo 문자열을 현재 제품 버전을 보고하도록 업데이트했습니다
Version 1.31.0
- PDF/UA-1 (ISO 14289-1:2014) 마커 주입 지원 추가: TPdf.SaveAsPdfUa는 베이스 PDF에 증분 업데이트로 후처리하여 현재 문서를 PDF/UA-1 준수 파일로 승격합니다. 주입은 후처리로 달성 가능한 파일 형식 수준 요구사항을 포함합니다 —
pdfuaid:part = 1과 일치하는 pdfaExtension:schemas 설명을 포함하는 XMP 메타데이터 스트림, 필수dc:title, catalog/MarkInfo << /Marked true /Suspects false >>및/ViewerPreferences << /DisplayDocTitle true >>(소스에 없는 경우에만 주입), catalog/Lang(호출자가 BCP 47 태그를 제공한 경우), trailer/ID배열 - 메모리 내 PDF/UA 출력을 위한 TPdf.SaveAsPdfUaToStream, 그리고 일반적인 경우를 위한 기본 옵션 단축형
TPdf.SaveAsPdfUa(FileName)추가 - TPdf.ValidatePdfUa 추가: 열린 PDF에서 PDF/UA-1 준수 마커 (StructTreeRoot 존재, /Lang, /MarkInfo /Marked true 및 /Suspects = false, /ViewerPreferences /DisplayDocTitle true, XMP pdfuaid:part 식별자, dc:title 존재, trailer /ID, 암호화 상태)를 확인하고, 감지된 준수 수준과 발견된 문제 집합을 포함하는 구조화된 결과를 반환합니다
- TPdf.PdfUaConformance 속성 추가: ValidatePdfUa를 명시적으로 호출하지 않고 열린 문서의 준수 수준 (puc1, pucNone 또는 pucUnknown)을 직접 반환합니다
- 새 단위 FPdfPdfua에 내보낸 새 타입: TPdfUaConformance, TPdfUaValidationResult, TPdfUaValidationIssue, TPdfUaSaveOptions
- TPdfUaSaveOptions의 빈 필드 (Title / Author / Subject / Keywords / Creator / Producer / CreationDate / ModDate / DocumentId / InstanceId / Language)는 FPDF_GetMetaText / FPDF_GetFileIdentifier / FPDFCatalog_GetLanguage를 통해 자동으로 채워집니다
- 콘텐츠 수준 요구사항 (StructTreeRoot 태깅 완전성, Figure Alt 텍스트, ToUnicode CMap, 폰트 임베딩 등)은 계속 문서 작성자의 책임입니다 — SaveAsPdfUa는 파일 형식 마커만 추가합니다. ValidatePdfUa는 StructTreeRoot의 부재를
pvuaiMissingStructTreeRoot로 보고합니다 - TPdf.AboutInfo 문자열을 현재 제품 버전을 보고하도록 업데이트했습니다
Version 1.30.0
- PDF/A-1b 출력이 이제 ISO 19005-1 (Cor.1:2007 포함)의 Document Information Dictionary와 XMP 동등성 요구사항을 충족합니다. PDFium이 베이스 PDF에 기록하는 모든 Info dictionary 항목이 XMP 패킷에 반영되며, Title (dc:title), Author (dc:creator), Subject (Cor.1에 따라 dc:description), Keywords (pdf:Keywords), Creator (xmp:CreatorTool), Producer (pdf:Producer), CreationDate (xmp:CreateDate), ModDate (xmp:ModifyDate)를 포함합니다. xmp:MetadataDate도 함께 발행됩니다
- PDF/A 문서의 trailer는 이제 항상 /ID 배열을 포함합니다 (ISO 19005-1 6.1.3 필수 요구사항). TPdf.SaveAsPdfA가 이미 file identifier를 가진 문서를 처리할 때, 기존 16바이트 permanent 및 changing ID가 재사용됩니다. 그렇지 않으면 소스 바이트에서 결정적 16바이트 폴백 ID가 도출됩니다
- 주입되는 XMP는 이제 ISO 19005-1 6.7.8 (Cor.1로 대체)에서 요구하는 pdfaid extension schema 설명을 포함합니다. pdfaid는 XMP Specification 2004에 대한 extension schema로 간주되므로, 모든 준수 파일은 pdfaExtension:schemas 컨테이너에 property names, value types, categories를 선언해야 합니다
- TPdfASaveOptions에 5개의 새로운 선택적 필드가 추가되었습니다: Producer, CreationDate, ModDate (PDF 날짜 문자열 “D:YYYYMMDDHHmmSSOHH'mm'” 형식), DocumentId, InstanceId (trailer /ID 배열용 16바이트 문자열). TPdf.SaveAsPdfA / SaveAsPdfAToStream은 FPDF_GetMetaText 및 FPDF_GetFileIdentifier를 통해 누락된 필드를 자동으로 채우므로, 기존 호출 코드는 변경 없이 계속 작동합니다
- TPdf.ValidatePdfA / TPdf.PdfAConformance는 이제 세 가지 추가 문제를 보고합니다: pvaiMissingTrailerId (trailer에 /ID 없음), pvaiMissingXmpDates (xmp:CreateDate 또는 xmp:ModifyDate 누락), pvaiMissingExtensionSchema (pdfaid extension schema 설명 누락)
- Title, Author, Subject, Keywords, Creator, Producer의 비 ASCII 문자가 이제 XMP 패킷에서 UTF-8로 인코딩됩니다 (XMP Specification은 UTF-8 필요). SaveAsPdfA를 통해 다국어 메타데이터가 완전히 보존됩니다
- TPdf.AboutInfo 문자열을 현재 제품 버전을 보고하도록 업데이트했습니다
Version 1.29.0
- 포함된 PDFium DLL(Win32 및 Win64, 표준 빌드와 V8 빌드 모두)을 2026-05-22 업스트림 스냅샷으로 갱신하여 FPDFText_SetText / FPDFText_SetCharcodes 크래시 경로에 대한 업스트림 수정과 PDFium 프로젝트의 다양한 내부 강화 사항을 반영함
- FPdfPageOps.pas에 PDFium의 새로운 저장 플래그 FPDF_SUBSET_NEW_FONTS를 노출하여, FPDF_SaveAsCopy 호출자가 새로 추가된 텍스트 객체에 사용된 임베드 폰트 파일을 자동 서브세팅하도록 요청 가능. 기존 FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL, FPDF_REMOVE_SECURITY 상수는 업스트림의 비트 시프트 형식으로 재정의됨(레거시 숫자 값 3은 바이너리 호환성을 위해 FPDF_REMOVE_SECURITY_DEPRECATED로 보존)
- FPdfView.pas에 FPDF_FONT_BACKEND_TYPE 열거형(FREETYPE / FONTATIONS) 및 FPDF_LIBRARY_CONFIG의 m_FontLibraryType 필드를 추가하여, Skia 렌더러로 PDFium을 초기화하는 애플리케이션이 시작 시 폰트 백엔드를 선택할 수 있도록 함
- TFPDFPage_InsertObject 시그니처를 업스트림에 맞춰 갱신: C 함수는 이제 void가 아니라 FPDF_BOOL을 반환함(성공 시 TRUE, page_object가 NULL이거나 소유권 이전이 실패하면 FALSE). Delphi / FPC는 함수 반환값 무시를 허용하므로 PDFiumPas 기존 호출자는 수정 없이 계속 컴파일됨
- TPdf.AboutInfo 문자열을 수정하여 현재 제품 버전을 보고하도록 함(v1.28.0이 문서 전용 릴리스였던 탓에 v1.27.0에서 멈춰 있었음)
Version 1.28.0
- API 참조 페이지의 인페이지 문서를 대폭 확장. 모든 속성, 메서드, 이벤트, 전역 함수 항목에 3단락 Description, Remarks 목록, 다중 라인 Delphi Example, 더욱 풍부한 See Also 블록을 추가 — 이전에 내용이 부족했던 200+ 페이지를 포함하여 모든 TPdf 카운터, 메타데이터 게터, 폰트 및 문자 액세서, 페이지 레벨 속성, 인덱스 레코드, 문서 레벨 메서드, 그리고 TPdfView의 전체 상태/표시/이벤트 표면을 포괄
- 도움말 레이아웃을 losLab HotXLS 참조에서 사용하는 시각 베이스라인에 맞춰 미세 조정. h1/h2 크기 통일, API 내비게이션 그리드 스타일을 공유 StyleSheet에 통합, Navigation.html의 페이지별 인라인 CSS 오버라이드 제거
- 문서에 헬퍼 스크립트(Docs\Build-Expand-Entries.ps1)가 동봉되어 단일 데이터 테이블로부터 항목 페이지 보강 내용을 반복적으로 재생성할 수 있도록 유지보수 가능
Version 1.27.0
- PDF/A-1b 생성 지원 추가. TPdf.SaveAsPdfA는 현재 열려 있는 문서를 PDF/A-1b 호환 파일로 저장 — 베이스 PDF에 증분 업데이트로 XMP 메타데이터 스트림, sRGB ICC OutputIntent, 갱신된 문서 카탈로그를 주입하여 처리하며, 별도의 DLL API 없이 PDFiumPas이 지원하는 모든 플랫폼에서 동작
- 인메모리 PDF/A 출력을 위한 TPdf.SaveAsPdfAToStream 추가
- TPdf.ValidatePdfA 추가. 열려 있는 PDF의 PDF/A 준수 여부(XMP pdfaid 마커, 임베디드 ICC 프로파일을 포함한 OutputIntent, 암호화)를 검사하여 검출된 준수 레벨과 발견된 구체적 이슈 집합을 담은 구조화된 결과를 반환
- TPdf.PdfAConformance 속성 추가. ValidatePdfA를 명시적으로 호출하지 않고도 현재 열려 있는 문서의 준수 레벨(pac1b, pac1a, pac2b, pac3b, pacNone, pacUnknown)을 반환
- 새로 내보낸 타입(새 유닛 FPdfPdfa.pas에 위치): TPdfAConformance, TPdfAValidationResult, TPdfAValidationIssue, TPdfASaveOptions
- SaveAsPdfA는 TPdfASaveOptions.IccProfileData로 사용자 정의 ICC 프로파일을 지원. 비워두면 내장된 sRGB IEC61966-2.1(HP/Microsoft, 3144 bytes) 프로파일을 자동 사용
- 단일 HTML 참조를 재구성된 웹 도움말 시스템으로 교체. TPdf 및 TPdfView의 모든 속성, 메서드, 이벤트, 전역 함수마다 한 페이지씩 302개의 개별 API 항목 페이지를 제공하며, 각 페이지는 전체 설명, 파라미터 표, Delphi 코드 예제, See Also 링크를 포함
- Navigation.html 추가. 여섯 섹션(TPdf 속성/메서드/이벤트, TPdfView 속성/메서드/이벤트, 전역 함수)으로 구성된 종합 한 페이지 API 내비게이션 인덱스. 빠른 검색을 위해 5열 flex 그리드 사용
- TPdf.html과 TPdfView.html을 타입 참조 섹션(Types, Constants, Global Variables)을 유지한 컴팩트 컴포넌트 개요 페이지로 재구성하고, 모든 멤버에 대해서는 개별 항목 페이지로 링크
- Search.js로 구동되는 전문 검색 추가. 312개의 인덱싱된 페이지 전체에 대해 클라이언트 측 증분 매칭
- 사이트 전반의 모든 내비게이션 바를 Navigation.html을 가리키도록 업데이트
Version 1.26.0
- Demo/Lazarus/BatchExport 추가. v1.14.0 Delphi BatchExport 데모의 LCL 포팅 버전. 동일한 기능 세트: 다중 파일 PDF -> JPG 내보내기, 파일별 전체 진행률 및 페이지별 현재 진행률, DPI/품질/비밀번호 입력, IPdfCancellationToken 기반 협력적 취소 가능 배치 처리. 추출이 성공적으로 끝나면 출력 폴더를 플랫폼 파일 관리자로 자동으로 열어줌
Version 1.25.0
- TPdf에 Form XObject 페이지 재사용 기능을 추가하여 워터마크, 템플릿 오버레이, “한 페이지를 여러 페이지에 도장 찍기” 워크플로를 지원. CreateXObjectFromPage는 다른 문서의 임의 페이지로부터 재사용 가능한 핸들을 생성. InsertFormObjectFromXObject는 래핑된 페이지의 사본 하나를 현재 페이지에 삽입. 삽입된 FPDF_PAGEOBJECT를 반환하여 호출자가 FPDFPageObj_SetMatrix와 v1.9.0의 TPdfMatrix 헬퍼로 위치 지정/스케일링/회전 가능
- 새로운 TPdfXObject Pascal 클래스가 PDFium의 FPDF_XOBJECT 핸들을 래핑하고 소멸자에서 자동으로 닫아주므로 수동 FPDF_CloseXObject 호출 의식이 사라짐
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 147 케이스로, C++Builder 스위트를 123 케이스로 확장. 핸들 생성과 페이지 객체 삽입 계약을 커버
Version 1.24.0
- TPdf.RenderPageProgressive 추가 — PDFium의 점진적 렌더링 루프를 구동하면서 반복 사이마다 v1.7.0의 IPdfCancellationToken을 폴링하는 취소 가능한 RenderPage 변종. 장시간 고 DPI 렌더링을 완료까지 호출자를 막아두지 않고 페이지 중간에 중단 가능
- TPdfProgressiveStatus 값을 반환: prsDone, prsCancelled, prsFailed. AToken = nil을 전달하면 일시 정지 없이 완료까지 렌더링(prsCancelled가 발생할 가능성 없음)
- v1.21.0에서 도입된 동일한 zero-copy 빠른 경로 사용 — PDFium이 대상 TBitmap의 DIB에 직접 렌더링. DIB를 래핑할 수 없을 때 동일한 레거시 폴백이 적용됨
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 145 케이스로, C++Builder 스위트를 121 케이스로 확장. nil 토큰(완료), 사전 취소 토큰(prsCancelled), 라이브 토큰에서 동기 RenderPage와의 픽셀 동등성을 커버
Version 1.23.0
- TPdfView에 PDFium의 폼 위젯 텍스트 선택 및 Undo/Redo를 애플리케이션에 노출하는 여섯 개의 새 메서드 추가. GetSelectedFormText는 포커스된 폼 위젯 내에서 현재 선택된 텍스트를 반환. SelectAllFormText는 모든 문자를 선택. FormUndo / FormRedo / FormCanUndo / FormCanRedo는 포커스된 위젯의 편집 히스토리를 구동. 기반 PDFium API는 이미 바인딩되어 있었지만 고수준 진입점이 없었음. 뷰가 비활성이거나 문서에 AcroForm 위젯 포커스가 없을 때 여섯 메서드 모두 안전하게 단락(short-circuit) 처리
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 142 케이스로, C++Builder 스위트를 119 케이스로 확장. 모든 새 메서드에 대해 폼 없음/포커스 없음 계약을 커버
Version 1.22.0
- TPdf에 페이지 구성 래퍼 추가. ImportPagesByIndex는 0 기반 인덱스 배열을 받아 소스 문서에서 지정된 페이지를 복사. ImportNPagesToOne은 이 문서의 페이지를 N-up 합성한 새로운 TPdf를 반환. MovePages는 페이지를 in-place로 재정렬. 기반 PDFium API는 이미 바인딩되어 있었지만 Pascal 친화적 진입점이 없었음
- ImportPagesByIndex는 모든 소스 페이지를 가져오기 위해 빈 배열을 허용(C ABI 레벨에서 nil 전달과 동등)
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 136 케이스로, C++Builder 스위트를 115 케이스로 확장. 부분 집합 가져오기, 전체 문서 가져오기, 페이지 재정렬, N-up 합성을 커버
Version 1.21.0
- TPdf.RenderPage / TPdf.RenderTile(및 대응되는 TPdfView 헬퍼)를 zero-copy 출력 경로로 전환하여 렌더링 성능 개선. 이제 PDFium은 내부 버퍼에 쓴 뒤 행 단위로 복사하는 대신 대상 TBitmap의 DIB 버퍼에 직접 기록하므로 렌더링당 width x height x 4 bytes의 메모리 복사 하나를 절약. 고 DPI(썸네일 패널, 인쇄 품질 내보내기, 배치 내보내기)에서 가장 두드러진 개선
- 대상 DIB를 래핑할 수 없는 드문 경우(극단적인 치수, 비정상적인 stride, OOM)에 대비하여 레거시 행 단위 경로를 안전 폴백으로 유지. 두 경로의 동작은 바이트 단위로 동일하며 폴백은 단지 더 느릴 뿐
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 132 케이스로, C++Builder 스위트를 112 케이스로 확장. 호출자 비트맵 pf32bit 업그레이드, 치수 라운드 트립, 대형 비트맵 stride sanity 테스트를 커버
Version 1.20.0
- TPdfView에 검색 결과 하이라이트 기능 추가. HighlightSearchText(Text, MatchCase, MatchWholeWord)는 현재 뷰 페이지를 스캔하여 발견된 매치 수를 반환하고, 다시 그릴 때마다 각 매치 위에 HighlightColor 마스크를 그림. ClearHighlight는 하이라이트를 제거. 매치는 페이지별이므로 뷰를 다른 페이지로 전환하면 자동으로 지워짐
- HighlightColor의 기본값은 clYellow이며 published이므로 애플리케이션이 자체 UI 팔레트에 맞게 하이라이트 색을 테마화할 수 있음
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 129 케이스로, C++Builder 스위트를 109 케이스로 확장. 기본 색, 색 라운드 트립, sample.pdf 문자열에 대한 “실제 fixture 단어 매치”, “존재하지 않는 단어가 0 매치를 반환”하는 계약을 커버
Version 1.19.0
- TPdfView에 네 가지 값을 갖는 FitMode 속성 추가: pfmNone(수동 줌), pfmActualSize(100%), pfmFitPage(전체 페이지가 뷰포트에 맞춰짐), pfmFitWidth(페이지 너비가 뷰포트 너비와 일치). 활성 fit 모드는 Resize 시점과 현재 페이지 변경 시 자동으로 재적용되므로 페이지 크기가 혼합된 긴 문서도 완벽하게 프레임이 잡힘
- Zoom을 직접 설정하면 활성 fit 모드가 자동으로 취소됨(FitMode가 pfmNone으로 되돌아감). 줌 값을 입력하면 Fit Page / Fit Width에서 벗어나는 표준 PDF 뷰어 관례에 일치
- 기본값은 pfmNone이므로 기존 애플리케이션은 명시적 줌 동작을 그대로 유지
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 124 케이스로, C++Builder 스위트를 106 케이스로 확장. 기본값, 모드 라운드 트립, 로드된 문서에서 fit-page가 실제 줌을 생성하는지, 수동 줌이 fit 모드를 취소하는지를 커버
Version 1.18.0
- TPdfView에 PageColor 속성을 추가하여 렌더링된 PDF 페이지 배경을 둘러싸는 컨트롤의 Color와 분리. 기본값은 clWhite이므로 이제 PDF 페이지는 호스트 애플리케이션의 테마와 무관하게 종이 흰색으로 렌더링됨. 다크 모드 뷰어는 스크롤 영역을 어둡게 유지하면서 실제 PDF 페이지는 흰색(또는 애플리케이션이 선택한 임의의 색)으로 둘 수 있음
- 동작 변경: PDF 페이지 색을 바꾸기 위해 TPdfView.Color를 설정하던 애플리케이션은 대신 PageColor를 설정해야 함. 일반적인 경우(테마 컨트롤 배경 위의 흰 페이지)는 코드 변경 없이 기본 경험이 개선됨
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 120 케이스로, C++Builder 스위트를 103 케이스로 확장. 기본값과 색 라운드 트립을 커버
Version 1.17.0
- TPdfView에 사용자 입력 잠금 토글을 추가하여 키오스크, 미리 보기 창, 읽기 전용 컨텍스트에 뷰어를 임베드하는 애플리케이션이 서브클래싱 없이도 내비게이션 제스처를 비활성화할 수 있게 함. AllowUserPageChange는 새 PgUp / PgDn / Ctrl+Home / Ctrl+End 키보드 단축키를 제어. ChangePageOnMouseScrolling은 새 휠 위/아래 페이지 점프를 제어. AllowUserTextSelection은 향후 마우스 드래그 텍스트 선택 경로용으로 예약. 세 가지 모두 기본값이 True이므로 기존 애플리케이션은 동작 변화 없이 업그레이드 가능
- 마우스 휠 페이지 내비게이션은 Ctrl+휠을 건너뛰므로 애플리케이션이 Ctrl+휠을 줌용으로 예약해 둘 수 있음
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 118 케이스로, C++Builder 스위트를 101 케이스로 확장. 기본값과 토글 라운드 트립을 커버
Version 1.16.2
- 뷰어 페이지가 연결된 TPdf 페이지와 다를 때의 주석 링크 클릭에 대한 TPdfView 회귀 커버리지를 Delphi, Lazarus, C++Builder 전반에 걸쳐 실제 headless 마우스 클릭 경로로 확장
- Delphi 및 Lazarus 스위트는 이제 각각 114 케이스, C++Builder는 이제 99 케이스를 실행
Version 1.16.1
- TPdfView 링크 클릭 처리 수정. 자동 주석 및 웹 링크 동작이 연결된 TPdf 컴포넌트가 다른 페이지에 머물러 있을 때에도 뷰어가 현재 표시 중인 페이지를 사용하도록 함
- 연결된 TPdf 컴포넌트가 소멸될 때 TPdfThumbnailView가 dangling Pdf 참조에 대비하도록 강화
- 썸네일 참조 수명 회귀 커버리지 추가. Delphi 및 Lazarus 스위트는 이제 각각 113 케이스, C++Builder는 이제 98 케이스를 실행
- v1.7.0부터 v1.16.0까지의 통합 업데이트에 맞춰 README, 테스트 문서, HTML Help 검색/인덱스 콘텐츠, 생성된 C++ 패키지 산출물을 동기화
Version 1.16.0
- 새로운 Delphi PrintDialog 데모(Demo/Delphi/PrintDialog) 추가. N-up 인쇄(시트당 1/2/4/9 페이지), 홀수/짝수 페이지 필터링, 그레이스케일 렌더링, 선택적 1픽셀 셀 테두리에 초점. 미리 보기, 최근 파일, 줌, 스케일링을 이미 다루는 기존 PrintPDF 데모의 의도적인 작은 동반자
Version 1.15.0
- 새 TPdfThumbnailView 컴포넌트(FPdfThumbnail 유닛) 추가. 스크롤 가능한 사이드 패널에 한 행에 한 페이지 썸네일을 렌더링하며 호버 및 선택 하이라이트, 클릭 이동 내비게이션을 지원. TPdfView 옆에 배치하여 최종 사용자가 긴 문서를 페이지별로 탐색할 수 있도록 설계
- 컴포넌트는 losLab 팔레트 탭에 TPdf, TPdfView와 함께 등록됨. 주요 속성: Pdf, CurrentPageIndex, ThumbnailWidth, ThumbnailHeight, TextColor, HoverColor, SelectionColor, BorderColor, 그리고 OnPageClick 이벤트
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 112 케이스로, C++Builder 스위트를 97 케이스로 확장. 기본값, 썸네일 크기 라운드 트립, 극단값 클램핑, 색 라운드 트립, 이벤트 핸들러 할당을 커버
Version 1.14.0
- 새 Delphi BatchExport 데모(Demo/Delphi/BatchExport) 추가. TPdf.LoadCustomDocument로 스트리밍 로드, IPdfCancellationToken으로 협력적 취소, 파일별 전체 + 페이지별 진행률 바를 사용하여 여러 PDF 파일을 한 번에 JPG로 변환하는 방법을 보여줌. 데모는 파일당 하나의 TPdf 인스턴스를 사용(PDFium 자체는 스레드 안전하지 않음)하며, 추출이 성공적으로 끝나면 출력 폴더를 탐색기에서 엶
Version 1.13.0
- TPdfView에 세 가지 새 속성을 통해 비동기 렌더링 UI 오버레이 추가: AsyncRendering, LoadingText, LoadingColor. AsyncRendering이 True일 때 단일 페이지 paint 경로가 렌더링된 페이지 위에 작은 “Loading...” 인디케이터를 그림. 자체 워커로 장시간 렌더링을 수행하는 애플리케이션이 일관된 시각적 어포던스를 공유할 수 있도록 함
- 기본값은 기존 동작을 유지: AsyncRendering이 False이므로 옵트인하지 않은 애플리케이션에는 시각적 변화가 없음
- 문서에 PDFium 자체는 스레드 안전하지 않음을 명시 — 실제로 렌더링을 워커로 오프로딩하려면 호출자가 워커당 하나의 TPdf를 유지해야 함. 곧 출시될 배치 내보내기 데모가 그 패턴을 보여줌
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 106 케이스로, C++Builder 스위트를 93 케이스로 확장. 기본값과 세 속성 라운드 트립을 커버
Version 1.12.0
- TPdfView에 클릭 기반 링크 처리 추가. 새 LinkOptions 속성은 네 가지 PDF 링크 액션 타입의 자동 동작을 제어: goto(페이지 점프), URI(ShellExecute), launch(ShellExecute), 임베디드 GotoR(예약됨). 기본값은 loAutoGoto와 loAutoOpenURI 활성화. loAutoLaunch와 loAutoEmbeddedGoto는 우발적인 클릭이 임의 프로그램을 실행하지 못하도록 비활성 상태로 유지
- OnAnnotationLinkClick과 OnWebLinkClick 이벤트 추가. 자동 동작 전에 발생하며 애플리케이션이 링크를 검사하거나 Handled로 표시하거나 (예: 보안 프롬프트로) 리다이렉트할 수 있게 함
- 링크 클릭 감지는 드래그가 아닌 클릭일 때만 새 MouseDown 앵커를 사용하여 실행되므로 panning 제스처는 기존 스크롤 경로를 변경 없이 그대로 통과
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 102 케이스로, C++Builder 스위트를 91 케이스로 확장. 기본 LinkOptions, set 라운드 트립, 이벤트 핸들러 할당을 커버
Version 1.11.0
- TPdfView에 시각적 마감 추가. PageShadowSize, PageShadowColor, PageBorderColor 속성이 페이지 사각형 아래에 선택적 드롭 섀도와 한 픽셀 테두리를 그림. 기본값은 기존의 평면 외관을 유지(PageShadowSize = 0; 테두리는 기본 clBlack으로 그려지지만 호출자가 색을 바꾸기 전까지 기본 흰색 배경에 묻힘)
- SmoothScroll 속성을 향후 점진적 스크롤 애니메이션을 위한 옵트인 플래그로 추가. 속성은 오늘 라운드 트립하며 애플리케이션이 선호도를 영속화할 수 있도록 연결되어 있지만 렌더링 측은 여전히 기존의 즉시 스크롤 동작을 사용
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 98 케이스로, C++Builder 스위트를 89 케이스로 확장. 기본값, 속성 라운드 트립, 음의 섀도 크기 클램프를 커버
Version 1.10.0
- 새 TPdf.AddImage와 TPdfView.AddImage 오버로드를 통한 직접 이미지 삽입 추가. 파일 경로 또는 TBitmap을 받으며 기존 TPicture 기반 AddPicture와 함께 사용 가능. AddImage(FileName)은 VCL 또는 LCL 그래픽 유닛에 등록된 임의의 포맷(BMP, PngImage 유닛을 통한 PNG, JPG 등)을 인식하며 AddPicture와 동일한 파이프라인을 통과하므로 동작이 일치
- AddImage(TBitmap)은 TPicture 중간자를 건너뜀. 렌더링이나 배치 생성 작업에서 이미 TBitmap을 보유한 호출자에게 단순화된 경로를 제공
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 92 케이스로, C++Builder 스위트를 84 케이스로 확장. 비트맵 삽입, 페이지 객체 경계, nil 비트맵 거부, BMP 파일 로딩을 커버
Version 1.9.0
- FPdfMatrix 유닛의 새 TPdfMatrix 클래스를 통한 고수준 변환 행렬 지원 추가. TPdfMatrix는 PDFium의 FS_MATRIX를 Translate, Scale, Rotate, HorizontalFlip, VerticalFlip, CentralFlip, Skew, Multiply에 대한 OO API로 래핑. FPDFPageObj_SetMatrix와 유사 PDFium API에 전달하기 전에 변환을 합성하는 데 적합
- TPdfMatrix.Multiply는 새로운 행 값을 계산하기 전에 여섯 개의 행렬 요소를 올바르게 스냅샷. 대체 Pascal 구현이 동일 호출 내에서 이전 요소를 덮어써 단순 translate 이상의 합성에서 부정확한 결과를 내는 잠재 이슈를 수정
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 88 케이스로, C++Builder 스위트를 81 케이스로 확장. identity, reset, translate/scale/flip, post-multiplicative 합성 순서, Multiply 회귀 케이스를 커버
Version 1.8.0
- 새 TPdf.LoadCustomDocument(AStream, AOwnsStream) 메서드와 TPdfStreamAdapter 헬퍼 클래스를 통한 온디맨드 스트림 로딩 추가. 기반은 PDFium의 FPDF_LoadCustomDocument. PDFium은 이제 공급된 TStream에서 필요할 때만 블록을 읽으므로 매우 큰 PDF나 원격 PDF는 사전 인메모리 복사를 더 이상 요구하지 않음
- 선택적 스트림 소유권 추가. AOwnsStream = True로 전달하면 TStream의 수명이 TPdf로 넘어가 UnloadDocument 실행 시 자동으로 해제됨
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 79 케이스로, C++Builder 스위트를 75 케이스로 확장. TFileStream을 통한 스트리밍 로드, 소유 스트림 정리, 외부 소유 스트림이 언로드 후에도 살아남는 계약을 커버
Version 1.7.0
- 새 FPdfAsync 유닛에서 협력적 비동기 취소 프리미티브 추가. IPdfCancellationToken / IPdfCancellationTokenSource와 재사용 가능한 PdfNoCancellationToken 싱글톤을 노출하여 장시간 실행되는 렌더링 및 내보내기 워크플로가 UI에서의 깔끔한 취소 시맨틱을 지원할 수 있음
- 경량 TPdfFuture<T> 헬퍼 추가. 백그라운드 스레드에서 워커를 실행하고 TPdfFutureResult<T> 봉투를 메인 스레드로 다시 게시하며 성공, 취소, 실패 케이스를 구분
- Delphi 및 Lazarus 회귀 테스트 스위트를 각각 76 케이스로, C++Builder 스위트를 73 케이스로 확장. 취소 상태, 멱등 cancel, 콜백 fan-out, 취소 후 등록을 공유 커버
Version 1.6.10
- PDF 뷰어 환경 설정의 인쇄 페이지 범위에 대한 고수준 TPdf.PrintPageRanges 접근 추가. 애플리케이션 코드를 위해 1 기반 페이지 범위를 반환
- TPdf.SetFormFieldFlags / SetFormFieldFlagsAt 및 대응되는 TPdfView 헬퍼 추가. 애플리케이션이 공개 API를 통해 AcroForm 필드 플래그를 업데이트할 수 있게 되었으며 password 및 multi-select 플래그 커버리지 포함
- Windows 크기의 FPDF_DWORD, FPDF_FILEACCESS 콜백, V8 embedder slot 필드에 대한 PDFium 바인딩 ABI 커버리지 강화
Version 1.6.9
- 번들 표준 및 V8 PDFium DLL에서 새로 내보낸 FPDF_RenderPageSkia 및 FPDF_FFLDrawSkia API용 저수준 Skia 렌더링 바인딩 추가
- 공개 바인딩 커버리지 검사를 확장하여 표준 및 V8 DLL 로딩이 이제 기존 V8/XFA 능력 프로브와 함께 Skia 렌더 진입점을 검증
Version 1.6.8
- 새로 내보낸 FPDFText_SetPositions API를 통해 기존 텍스트 객체의 문자별 위치를 설정하는 TPdf.SetTextPositions와 TPdfSingleArray 추가
- FPDFText_SetPositions를 현재 번들 PDFium DLL의 필수 바인딩으로 승격. 동시에 Skia 렌더 진입점은 DLL이 여전히 내보내지 않으므로 계속 사용 불가능함을 확인
- Delphi, C++Builder, Lazarus 회귀 테스트 스위트를 각각 65 케이스로 확장하여 텍스트 위치 커버리지 포함
Version 1.6.7
- JavaScriptAction과 JavaScriptActions를 통해 액션 이름과 스크립트를 반환하는 문서 JavaScript name-tree 액션에 대한 고수준 TPdf 접근 추가
- PDFium 종료 바이트 없이 영구 및 변경 가능한 트레일러 ID를 이진 TBytes로 읽는 TPdf.FileIdentifier 추가
- 현재 페이지의 MediaBox, CropBox, BleedBox, TrimBox, ArtBox에 대한 TPdf.PageBox, GetPageBox, SetPageBox 추가
- 해당 내보내기가 존재하지 않기 때문에 현재 번들 PDFium DLL이 Skia 렌더 진입점만 런타임에서 사용 불가능한 상태로 남겨두는 것을 재확인
- Delphi, C++Builder, Lazarus 회귀 테스트 스위트를 각각 64 케이스로 확장하여 문서 JavaScript, 트레일러 ID, 페이지 박스 커버리지 포함
Version 1.6.6
- 번들 V8 지원 PDFium DLL에 대한 런타임 지원 추가. 로딩 전에 EnableV8Engine을 설정하면 이제 DLLs\Win32 또는 DLLs\Win64 트리에서 pdfium.v8.dll을 선택하고, 로드된 DLL이 제공할 경우 V8/XFA 전용 바인딩을 노출
- V8FeaturesAvailable, XfaBStrHelpersAvailable, GetRecommendedV8Flags와 FPDF_BStr_*, FPDF_GetRecommendedV8Flags, FPDF_GetArrayBufferAllocatorSharedInstance에 대한 저수준 선택적 바인딩 추가
- FPDFText_SetPositions를 선택적으로 만들어 PDFiumPas이 해당 실험적 텍스트 위치 setter를 내보내지 않는 PDFium DLL에서도 계속 로드되도록 함
- Delphi, C++Builder, Lazarus 회귀 테스트 스위트를 각각 61 케이스로 확장하여 표준 DLL 및 V8 DLL 능력 커버리지 포함
Version 1.6.5
- TPdf.StructureElements와 TPdfView.StructureElements를 통한 태그된 PDF 구조 트리 검사 추가. 요소 타입, 제목, 대체 텍스트, 실제 텍스트, expansion 텍스트, 언어, marked-content ID, 자식 수, 속성 수를 포함
- TPdfPrintMode와 SetPdfPrintMode를 통한 Windows PDFium 인쇄 모드 선택 추가. EMF, 텍스트 전용, PostScript, pass-through, image-mask, Type 42 인쇄 모드를 커버
- JavaScript 액션, 주석 폼 플래그/폰트 색, 페이지 객체 활성 상태, 인덱스 삽입, content-mark float 값, 이미지 ICC 프로파일 데이터, 폼 객체 제거, 텍스트 위치를 커버하는 표준 DLL의 나머지 PDFium 공개 내보내기에 대한 저수준 바인딩 추가
- Delphi, C++Builder, Lazarus 회귀 테스트 스위트를 각각 59 케이스로 확장하여 태그된 PDF 구조 트리, 인쇄 모드, 공개 내보내기 바인딩 커버리지 포함
Version 1.6.4
- Delphi, C++Builder, Lazarus 데모를 업데이트하여 생성된 PDF, 내보낸 텍스트/이미지, 배치 출력 폴더가 성공적으로 생성된 후 자동으로 열리도록 함
Version 1.6.3
- 정렬된 Delphi, C++Builder, Lazarus 회귀 테스트 스위트를 각각 56 케이스로 확장. fit-zoom 헬퍼, 장치/페이지 좌표 라운드 트립, 문자 hit-testing, 숨겨진 창 뷰어 컨트롤을 통한 마우스 panning에 대한 TPdfView GUI 커버리지 추가
- TPdfView 픽스처는 이제 명시적인 뷰어 크기와 보호된 마우스 핸들러를 호출하는 테스트 전용 서브클래스를 사용하면서 스위트를 완전히 headless로 유지
Version 1.6.2
- TPdf.AddPage(0, ...) 수정. 삽입된 첫 페이지가 즉시 활성 페이지가 되도록 함. 기존 샘플 코드는 계속 동작하며, PageNumber는 이제 삽입 후 유효한 1 기반 페이지를 보고함
- Lazarus 패키지 버전을 동기화하고 정렬된 Delphi, C++Builder, Lazarus 회귀 테스트 스위트를 각각 52 케이스로 확장
Version 1.6.1
- v1.6.0 PDF 버전 준수 검증기의 잘못된 최소 버전 요구 사항 수정. SetState 액션이 PDF 1.5에서 PDF 1.2로 재분류되어 PDF 1.2 Reference 6.9.9에 일치. SetState 액션을 포함하는 PDF 1.3 / 1.4 SaveAs 타겟이 거부되는 대신 올바르게 저장됨
- 동일한 사양 섹션에 따라 일치하는 PDF 1.2 어휘 검사 추가. 선택된 타겟 버전이 PDF 1.2 이전일 때 Sound, Movie, NOP 액션과 Separation 색 공간이 차단됨
- Delphi, C++Builder, Lazarus 회귀 테스트 스위트를 각각 50 케이스로 확장. 수정된 경계를 고정하는 PDF 1.4 SetState 수락 양성 테스트 추가
Version 1.6.0
- 전체 PDF 1.1부터 ISO 32000-1 기능 타임라인을 커버하는 전체 버전-기능 검증기로 명시적 PDF 1.0부터 PDF 1.7 SaveAs 타겟을 강화. 검증기는 선택된 타겟 버전 이후 도입된 사전 항목, 필터 이름, 주석 서브타입, 액션 타입, 폰트, 색 공간, 암호화 매개 변수를 포함하는 저장을 차단. 예시: JBIG2Decode (1.4+), MarkInfo / Tagged PDF (1.4+), OutputIntents (1.4+), ICCBased / DeviceN / BleedBox / TrimBox / ArtBox / StructTreeRoot (1.3+), Polygon / PolyLine / Caret / Screen / Watermark / Redact 주석, AES 및 AES-256 암호화(CFM AESV2 / AESV3), Perms / Legal / Requirements / NeedsRendering 카탈로그 항목, JavaScript, Trans, SetState, Rendition, GoToE, GoTo3DView 같은 버전 게이트가 있는 액션이 타겟 PDF 버전에서 표현될 수 없을 때 모두 거부됨
Version 1.5.13
- Delphi, C++Builder, Lazarus 회귀 테스트 스위트를 각각 49 케이스로 확장. PDF 1.2 / 1.3 / 1.4 / 1.5 / 1.6 타겟에 대해 ICCBased 색 공간, Tagged PDF MarkInfo, Polygon 주석, AES (V2) 암호화, Redact 주석의 거부에 대한 직접 커버리지를 각각 추가
Version 1.5.12
- 증분 카탈로그 재작성을 위한 SaveAs 후처리 수정. PDFiumPas은 이제 최신 반복된 간접 객체를 검증하므로 명시적인 이전 PDF 타겟 버전으로 저장할 때 기존 카탈로그 /Version 오버라이드가 올바르게 교체됨
- Delphi, C++Builder, Lazarus 회귀 테스트 스위트를 각각 44 케이스로 확장. 오래된 카탈로그 /Version 교체, PDF 1.4 카탈로그 버전 정규화, 선택된 PDF 타겟 버전이 표현할 수 없는 투명도 및 portable-collection 기능 거부에 대한 직접 커버리지 추가
Version 1.5.11
- 명시적 PDF 1.3, 1.4, 1.5, 1.6, 1.7 타겟에 대한 버전 지정 SaveAs 출력 강화. PDFiumPas은 이제 카탈로그 버전 마커를 정규화하고, 기본 Fit Height OpenAction을 버전 안전하게 유지하며, 선택된 타겟 버전이 표현할 수 없는 새 PDF 기능을 거부
- 명시적 PDF 1.3부터 PDF 1.7까지의 파일을 저장하고 다시 로드하여 최종 헤더, 기본 Fit Height OpenAction, 보고된 PDF 버전을 검증하는 Delphi, C++Builder, Lazarus 회귀 커버리지 추가
Version 1.5.10
- 모든 세 IDE 스위트(Tests.PdfView)에 TPdfView 스모크 테스트를 추가하여 사양의 옵션 B에서 옵션 C로 진행. 각 스위트는 숨겨진 부모 TForm(Pascal 쪽에서는 TForm.CreateNew를 통해, C++Builder 쪽에서는
new TForm(NULL, 0)을 통해)을 만들고, TPdfView를 다시 부모로 지정한 다음 Active := True를 설정하고, PageCount, PageNumber 기본값, Zoom, Rotation, DisplayMode에 대한 라운드 트립 표면과 View.Text가 기반 TPdf.Text와 일치함을 검증. 각 IDE 스위트는 이제 39 케이스를 실행
Version 1.5.9
- 모든 세 IDE 스위트에 렌더 스모크 테스트를 추가하여 사양의 옵션 A에서 옵션 B로 진행. 각 Tests.Render 스위트는 sample.pdf에서 TPdf.RenderPage를 호출하고 바이트 대 바이트 체크섬 대신 세 가지 견고한 신호를 검증: 반환된 비트맵이 요청된 픽셀 크기와 정확히 일치, 다른 요청 크기(200x100, 64x256)가 일치하는 비트맵을 생성, 렌더링된 페이지가 안티앨리어싱된 텍스트를 표시하는 50개 이상(Lazarus의 경우 20개)의 비백색 픽셀과 함께 적어도 95% 흰색 배경. 각 IDE 스위트는 이제 33 케이스를 실행
Version 1.5.8
- IDE별 일곱 개의 회귀를 추가하여 원래 A(2) 테스트 계획 그룹을 마무리: TPdf.CreateAnnotation으로 anHighlight 주석을 구축하고 SaveAs/LoadDocument 라운드 트립, Demo/Delphi/FormFill/cmp_fill_out_and_merge_forms.pdf의 AcroForm 읽기 경로(FormType이 ftAcroForm, FormFieldCount > 0, FlattenAllPages가 필드를 0으로 떨어뜨림), Bookmarks, LinkAnnotationCount, WebLinkCount에 대한 정적 읽기 경로 커버리지(해당 기능이 전혀 없는 문서에서). 각 IDE 스위트는 이제 30 케이스를 실행
Version 1.5.7
- Delphi (DUnitX), Lazarus (FPCUnit), C++Builder (GoogleTest) 스위트를 IDE별 일곱 개의 새 회귀로 확장: PdfVersion, PageRotation, TPdf.FindFirst / FindNext 부분 문자열 조회, CharacterOrigin / CharacterRectangle와 AddText 원점의 일치, CreateAttachment 등록 + SaveAs/LoadDocument 라운드 트립, 그리고 v1.3.0 European TrueType 임베딩 경로가 Latin-1 supplemental 코드 포인트를 그대로 유지함을 검증하는 강세 텍스트 AddText 라운드 트립
Version 1.5.6
- 저장된 PDF는 이제 기존 OpenAction이 없을 때 기본 첫 페이지 Fit Height 열기 동작을 가져 PDF 리더가 생성된 문서를 처음 표시할 때 페이지 높이 줌으로 표시함
- 생성된 OpenAction 및 Fit Height 설정에 대한 Delphi, Lazarus, C++Builder 회귀 커버리지 추가
Version 1.5.5
- 인덱싱된 문자 및 폰트 검사 API 표면(TPdf.FontBaseName, FontFamilyName, FontWeight, FontItalicAngle, FontData, FontIsEmbedded, CharacterFontWeight, CharacterAngle)을 위한 Delphi (DUnitX), Lazarus (FPCUnit), C++Builder (GoogleTest) 스위트 전반에 걸친 회귀 테스트 추가. Lazarus 스위트는 현재 FPC에서 FPDFFont_GetFontData 내부에서 액세스 위반을 일으키는 FontData를 의도적으로 건너뜀
Version 1.5.4
- Delphi 샘플에서 포팅된 C++Builder Attachment 데모 추가. PDF 생성, 추가, 나열, 추출, 삭제 및 임베디드 파일 첨부 저장을 MIME 서브타입 표시와 함께 커버
Version 1.5.3
- TPdfView 2-페이지 모드를 뒷받침하는 spread-page 계산을 유닛 수준 헬퍼 ComputeSpreadPages(DisplayMode, PageNumber, PageCount, out LeftPageNo, out RightPageNo)로 노출. 동작은 변경되지 않음. 헬퍼는 뷰어를 인스턴스화하지 않고도 cover-aware 규칙을 독립적으로 테스트 가능하게 만듦
- 빈 문서, 표준 2페이지 페어링, dmTwoPageContinuousWithCover에서 단독으로 서 있는 표지, 표지 이후의 페어, 마지막 페이지 / 범위 밖 클램핑 동작을 커버하는 Delphi (DUnitX), Lazarus (FPCUnit), C++Builder (GoogleTest) 스위트 전반에 걸친 다섯 가지 회귀 테스트 추가
Version 1.5.2
- PDF 카탈로그 /Lang 항목에 매핑되는 TPdf.Language를 통한 문서 언어 지원 추가
- TPdf.AttachmentType으로 첨부 MIME 서브타입 접근 추가
- TPdfAnnotationSubtype에 anRedact를 추가하고 TPdf 및 TPdfView에 페이지 객체 제거 헬퍼 추가
- 새로운 언어 및 첨부 타입 정보를 가능한 경우 표시하도록 뷰어 및 첨부 데모 업데이트
Version 1.5.1
- TPdfView를 위한 dmTwoPageContinuousWithCover 추가. 뷰어 레이아웃이 첫 페이지를 단독으로 보여주고 그 다음에 2페이지 스프레드로 계속할 수 있도록 함
- Delphi, C++Builder, Lazarus MultiPageViewer 데모를 업데이트하여 cover-aware 2-페이지 표시 모드를 노출
Version 1.5.0
- Delphi (DUnitX), Lazarus (FPCUnit), C++Builder (GoogleTest)용 스모크 수준 자동화 테스트 스위트 추가. 세 스위트는 Tests\TestData에 단일 픽스처 PDF를 공유하고 동일한 일곱 케이스를 각각 실행하여 문서 로딩, 페이지 정보, 텍스트 추출, 메타데이터, 저장 라운드 트립, PDF 헤더 검증, Compressed 속성을 커버
Version 1.4.3
- 폰트 핸들, 폰트 데이터 크기, 문자 메트릭을 포함하여 TPdfView와 TPdf 폰트 메타데이터 API를 모두 보여주는 FontProperties 데모 개선
- 인덱싱된 TPdfView 문자 및 폰트 검사 속성 추가 및 텍스트 객체 폰트 메타데이터를 조회하도록 FontProperties 데모 업데이트
Version 1.4.2
- 뷰어 없이 텍스트 분석을 위한 TPdf의 인덱싱된 문자 및 폰트 검사 속성 추가. 문자 인덱스 속성(CharacterAngle, CharacterFontSize, CharacterFontWeight)은 현재 페이지의 텍스트 스트림에서 문자별 메트릭을 조회. 페이지 객체 인덱스 속성(FontAscent, FontBaseName, FontData, FontDescent, FontFamilyName, FontHandle, FontIsEmbedded, FontItalicAngle, FontWeight)은 현재 페이지의 임의 텍스트 객체에 대한 폰트 메타데이터를 조회
- 비텍스트 페이지 객체는 오류를 일으키지 않고 모든 Font* 속성에 대해 안전한 0 또는 빈 값을 반환하므로 모든 페이지 객체를 반복하면서 텍스트 객체만 검사하는 것이 간단해짐
- FontBaseName은 폰트 패밀리 이름으로 폴백하는 대신 PostScript 베이스 폰트 이름을 직접 읽어 임베디드 폰트에 대해 더 정확한 식별자를 제공
Version 1.4.1
- 지원되는 모든 IDE 패밀리가 시스템 TrueType 폰트로 강세 European 텍스트 생성을 검증할 수 있도록 EuropeanText 데모의 C++Builder 및 Lazarus 버전 추가
- 샘플 폼 PDF, 필드 편집, 외관 재생성, 채워진 저장, 평탄화 저장 워크플로를 포함하여 FormFill 데모의 C++Builder 및 Lazarus 버전 추가
Version 1.4.0
- Lazarus / Free Pascal 지원 추가. 새로운 PDFiumLaz 패키지가 LCL 위젯 셋 아래에서 동일한 TPdf, TPdfView 및 관련 컴포넌트를 제공. 기존 Delphi 및 C++Builder 패키지와 더불어 라이브러리를 Lazarus IDE 및 Free Pascal 컴파일러로 확장
- Lazarus 개발자가 실행 가능한 예제로 모든 기능을 탐색할 수 있도록 Lazarus 버전의 데모 추가
- Delphi 컴파일러 버전 검사와 함께 Free Pascal 조건부 정의가 평가되어 FPC 빌드가 Delphi 전용 유닛 이름을 해석하려 시도하다가 실패하던 Lazarus 컴파일 이슈 수정
Version 1.3.1
- 도움말 세트에서 폼 평탄화 워크플로 문서화. GenerateFormAppearances, FlattenPage, FlattenAllPages 및 관련 FLAT_* / FLATTEN_* 상수가 이제 TPdf, TPdfView, API 참조, 기능 매트릭스, 프로그래밍 예제에서 다뤄짐
- 개요 페이지의 아키텍처 표를 수정하여 Lib 폴더에 실제로 함께 제공되는 바인딩 유닛을 나열하도록 함
Version 1.3.0
- PDF 생성 시 European 문자 지원 개선. TPdf.AddText는 이제 텍스트 객체를 생성하기 전에 일치하는 시스템 TrueType 폰트를 로드하고 캐시하여 PDFium의 내장 표준 폰트가 표현할 수 없는 체코어, 프랑스어, 독일어, 스페인어, 포르투갈어, 폴란드어, 터키어의 강세 문자를 보존
- 이전에 비 ASCII 라틴 텍스트에 대해 물음표 또는 대체 글리프를 생성하던 애플리케이션이 이제 코드 변경 없이 올바르게 렌더링됨. 기능을 시연하는 EuropeanText 데모 추가
Version 1.2.0
- TPdf에 AcroForm 외관 새로 고침 추가. FormField[] 값을 수정한 후 GenerateFormAppearances를 호출하면 위젯 외관이 업데이트되므로 대화형 편집 세션 없이도 표준 PDF 리더에서 채워진 값이 보임
- TPdf(FlattenPage / FlattenAllPages)와 TPdfView(현재 뷰 페이지용 FlattenPage)에 폼 평탄화 헬퍼 추가. 평탄화는 채워진 필드 값을 일반 페이지 콘텐츠로 영구 임베드하고 대화형 폼 레이어를 제거하여 모든 뷰어에서 일관되게 렌더링되는 정적 문서를 생성
- 샘플 AcroForm PDF로 채우기-저장 및 채우기-평탄화 워크플로를 시연하는 Demo\Delphi\FormFill 추가
Version 1.1.2
- 저장 시점의 PDF 스트림 압축 추가. 새 TPdf.Compressed 속성(기본 활성화)이 저장 시 압축되지 않은 콘텐츠 스트림을 FlateDecode 압축 스트림으로 재작성하여 프로그램으로 생성된 PDF의 파일 크기를 상당히 줄임. 일반 압축되지 않은 출력이 필요한 애플리케이션은 SaveAs를 호출하기 전에 Compressed를 False로 설정 가능
Version 1.1.1
- Win64 패키지 빌드는 더 이상 디자인 타임 등록 유닛을 포함하지 않음. Win64 패키지가 런타임 전용 컨텍스트에 배포될 때 빌드 타임 실패를 방지
- PDFium DLL 로더는 이제 표준 pdfium.dll 및 pdfium.v8.dll 이름을 사용하여 먼저 Win32 또는 Win64 애플리케이션 하위 디렉터리를 검색하고, 그다음 애플리케이션의 flat 디렉터리와 Windows 시스템 디렉터리로 폴백. 이는 컴포넌트 패키지에 함께 제공되는 DLL 레이아웃과 일치하여 설치를 간단하게 만듦
Version 1.1.0
- TPdfView 2-페이지 모드의 시각적 클리핑 결함 수정. 좌우 페이지 타일이 단일 클리핑 사각형을 공유했기 때문에 페이지 콘텐츠가 거터를 넘어 새어 나가던 문제. 이제 각 타일이 독립적으로 클리핑되어 콘텐츠가 자신의 페이지 경계 안에 머무름
- Delphi 데모에서 PDFium DLL을 찾을 수 없을 때의 오류 메시지 개선. 예상되는 DLL 이름과 위치로 명확한 프롬프트를 제공