PDFium Delphi Component 릴리스 노트
PDFium Delphi Component의 사용자 표시 기능, 수정 사항, 뷰어 개선, 문서 생성, PDF/A 출력, 렌더링 및 문서 업데이트 버전 기록입니다
최신 릴리스
- 최신 버전: 3.137.1; 릴리스 날짜:
Version 3.137.1
수정 (Fixed)
- OpenSSL 온라인 폐기 검사에서 OCSP 증거나 responder를 사용할 수 없으면 앞선 CRL 상태, reason, 네이티브 오류, 해당 인증서를 유지하여 만료된 CRL의 진단을 정확하게 보존합니다
Version 3.137.0
추가 (Added)
- 네이티브 Free Pascal/LCL 빌드에서 Linux Qt6와 macOS Cocoa를 지원하며, 플랫폼 글꼴 확인, 전용 임시 저장소, 문서 로드, 편집, 폼, 저장, 렌더링을 제공합니다
- macOS Keychain 서명에서 쿼리별 Keychain 경로와 크기 제한이 적용된 오프라인 인증서 체인 내보내기를 지원하며, 네이티브 Free Pascal과 Delphi용 서명 및 타임스탬프 전송을 제공합니다
- 병렬 렌더링에서 각 워커의 실제 모듈 경로, 초기화 주소, 언로드 결과를 보고하고 기존 PDFium 이미지를 재사용하는 네이티브 로더를 거부합니다
수정 (Fixed)
- Unix PDFium 바인딩에서 LP64 unsigned-long 콜백 및 버퍼 너비를 보존하여 4 GiB를 넘는 사용자 지정 스트림 읽기도 처리합니다
- 네이티브 LCL 렌더링이 비트맵 바이트 순서와 채널 레이아웃을 따르도록 수정하여 Cocoa 출력과 디바이스 컨텍스트 렌더링의 색상을 보존합니다
- 비트맵, 타일, 점진적 렌더링에서 clNone 및 clDefault의 투명 배경 알파를 네이티브 페이지 투명도 조회 결과와 관계없이 보존합니다
- 서명에서 EC 키를 포함한 인증서 공개 키 알고리즘을 올바르게 식별합니다. macOS CMS 검증은 외부 서명과 타임스탬프 결과를 독립적으로 보존하고, 지원하지 않는 RSA-PSS 검증을 명시적으로 보고합니다
- PAdES 타임스탬프 검증에서 critical이며 id-kp-timeStamping만 포함하는 EKU를 요구합니다. OpenSSL의 기본 TSA 체인 평가에 S/MIME 인증서 용도를 잘못 적용하지 않도록 수정했습니다
- Unix 원자적 파일 커밋에서 교체 후 디렉터리 플러시가 실패해도 새 증분 기준선을 유지하고, 출력이 이미 커밋되었음을 나타내는 예외와 불완전한 내구성 결과를 제공합니다
변경 (Changed)
- Delphi POSIX future는 기본 스레드 우선순위를 허용하고, 지원하지 않는 우선순위 요청은 워커 시작 전에 거부합니다
Version 3.136.0
추가 (Added)
- 선택적 LittleCMS ICC 변환과 문서 색상 변환은 원래 텍스트, 벡터, 8비트/16비트 이미지 성분을 사용하고 선택한 별색을 유지하며 지원하지 않는 콘텐츠를 명시적으로 보고합니다
- 복잡한 영구 삭제는 중첩 Form XObject, 채워진 곡선 패스, 회전/반사/shear 이미지에서 지원하는 콘텐츠를 유지하며 유한한 지오메트리 상한과 상세 제거 보고를 제공합니다
- 활성 객체 읽기는 구체화 및 디코딩 전에 객체 본문과 압축 object stream에 독립적인 상한을 제공합니다
보안 (Security)
- 영구 삭제는 Tagged 대체 텍스트, XFA, optional-content layer, text clipping, 검증할 수 없는 그리기 상태를 거부합니다. 콘텐츠 스트림에 나뉜 연산자도 포함해 지원하지 않는 민감한 콘텐츠 의미가 내보내지는 것을 막습니다
Version 3.135.0
추가 (Added)
- 주석 및 AcroForm 위젯 비교는 안정적인 이름, 명시적 페이지 대응, 모호성 보고, 전후 overlay 경계로 페이지 픽셀과 독립적인 속성 변경을 보고합니다
- 표 셀은 혼합 텍스트 스타일, 대체 텍스트 이미지, 선택적인 페이지 간 span 셀 이어짐, 소계 행, 이어짐 라벨을 지원하며 Tagged PDF 관계를 유지합니다
수정 (Fixed)
- Tagged layout 생성은 기능 검사 전에 네이티브 라이브러리를 초기화해 새 문서 컴포넌트의 첫 작업으로 사용할 수 있습니다
- 한 텍스트 객체의 여러 교체는 원래 경계에서 한 번만 맞춤 처리하고 전체 최소 수평 비율을 적용해 불필요한 중간 편집을 피합니다
Version 3.134.0
추가 (Added)
- 탐색 병합은 선택, 재정렬, 반복 페이지에서 명명된 목적지와 내부 링크를 유지하며 명시적인 충돌 정책과 트랜잭션 검증을 제공합니다
- 스타일 텍스트 교체에 검증한 원본 계획, 독립 미리 보기, 네이티브 폰트 재사용, 명시적 fallback, 제한된 수평 맞춤, 실패/취소 후 rollback을 추가했습니다
- OpenSSL 서명은 명시 설정한 개인키와 인증서 체인으로 RSA-PSS, RSA PKCS#1 v1.5, ECDSA를 지원하며 Windows 이외의 기본 signer 해석도 포함합니다
- OpenSSL 검증에 인증된 오프라인 OCSP와 제한된 온라인 OCSP 증거, 실패 인증서 식별, 각 CMS 서명자의 선택적 진단을 추가했습니다
- FPC macOS Security.framework 검증기는 명시적 신뢰 앵커와 지정 OCSP 증거로 암호학적 결과, 체인 신뢰, 폐지를 독립적으로 보고합니다
수정 (Fixed)
- 링크 주석 URI 추출은 종료 문자를 포함한 완전한 네이티브 버퍼를 제공해 유효한 대상을 올바르게 반환합니다
Version 3.133.0
추가 (Added)
- 트랜잭션 AcroForm 병합은 선택 페이지, 필드 거부, 이름 변경, namespace, 호환되는 공유 텍스트/선택 필드를 지원하며 리소스, 외관, 계산 순서를 분리합니다
- 선택적 바코드 프로바이더는 Code128, QR, DataMatrix, PDF417을 생성하고 회색조 이미지를 인식하며 네이티브 의존성과 유한한 처리 상한을 명시합니다
수정 (Fixed)
- FormField는 상속한 부모 값을 읽고 공유 위젯 전반에 일관되게 텍스트 편집을 commit합니다. 저장/재열기 후 값 유지와 읽기 전용 검사도 제공합니다
- 상속한 텍스트 위젯의 외관 재생성은 부모 값을 복원해 shadow 위젯 값을 남기지 않으며 필드 대입 성공은 공유 페이지 캐시를 무효화합니다
Version 3.132.0
추가 (Added)
- 선택적 페이지 정렬은 삽입, 삭제, 이동 페이지를 식별하며 제한된 Unicode 텍스트 변경, 연결된 시각 영역, 내보낼 수 있는 비교 overlay를 제공합니다
- 트랜잭션 탐색 병합은 선택, 반복, 재정렬 페이지 가져오기에서도 outline 계층, 스타일, URI action, 다시 연결한 목적지를 유지합니다
- 선택적 Tesseract OCR 프로바이더는 명시적 의존성 진단, Unicode 단어 지오메트리, 취소, 인식 상한을 지원하며 검색 레이어 저장/재열기를 검증합니다
보안 (Security)
- RSA-PSS 정책은 서명과 제약된 공개키의 전체 매개변수를 평가해 잘못된 DER, 호환되지 않는 hash/mask/salt/trailer 제약을 거부합니다
수정 (Fixed)
- outline 저장 검증은 가지에만 해당하는 펼침 상태 차이로 leaf bookmark를 거부하지 않습니다
Version 3.131.0
추가 (Added)
- WatermarkStamp는 대상 및 stamp PDF, 대상 페이지 구간, 페이지 번호만 출력하는 모드를 받고 서로 다른 페이지 크기에도 비례해 배치합니다
- MergePDF는 병합 전 각 입력의 선택 페이지와 대상 구간을 미리 보고 단일 입력의 페이지 추출도 지원합니다
수정 (Fixed)
- MergePDF는 가져오기 전에 모든 소스를 검증하며 읽을 수 없는 입력, 잘못된 범위, 가져오기 실패, 취소 시 불완전한 병합을 저장하지 않고 중단합니다
- WatermarkStamp는 소스와 템플릿 파일을 유지하며 두 stamp overlay를 모두 꺼도 페이지 번호를 확실하게 저장합니다
변경 (Changed)
- 각 네이티브 데모 디렉터리를 22개의 완전한 워크플로에 집중시키고 SecurityAudit와 XfdfLab을 Miscellaneous로 옮겨 프로젝트 경로와 탐색을 바로잡았습니다
제거 (Removed)
- 고정 AnnotationsLab 안내를 제거했습니다. 주석 작성, 검사, 교환은 계속 XFDF와 콘텐츠 추출 예제, API 테스트에서 다룹니다
Version 3.130.0
변경 (Changed)
- 각 네이티브 데모 디렉토리를 완결된 워크플로 24개 중심으로 다시 구성하고, Miscellaneous 아래에 집중 API 주제 9개를 배치하며, 첫 데모를 고르기 위한 별도 안내를 제공합니다
- 주석, 접근성, 글꼴, 탐색, 텍스트 내보내기, 페이지 이미지 렌더링, 인쇄 환경설정, 상호작용, XFA 예제를 자체 소스와 번들 입력과 함께 계속 사용할 수 있습니다
제거됨 (Removed)
- 최소 구성의 CJKTextLab과 RTLTextLab 프로젝트를 제거했습니다. Unicode 작성은 CreatePDF에서 계속 가능하고, shaped-text API는 API 참조에 그대로 문서화되어 있습니다
수정됨 (Fixed)
- C++Builder 접근성 API 안내가 음성 스크립트를 내보낼 때 실패하던 문제를 수정했습니다
- C++Builder 주석 예제가 highlight 좌표에 잘못된 배열 오프셋을 사용하던 문제를 수정했습니다
Version 3.129.0
변경 (Changed)
- 모든 네이티브 데모를 자기완결형으로 만들었습니다. 샘플 로직을 사용하는 프로젝트 안으로 옮기고, 관련 보기·추출 프로젝트에는 쇼케이스 PDF를 번들하며, Demo/Shared 디렉토리는 제거했습니다
- 프로젝트를 독립적으로 복사해도 오프라인 기능 투어, 라이브 미리보기, 편집 가능한 폼, 데이터가 채워진 리포트, 첨부 파일, 탐색, 인쇄 환경설정, 정적 XFA 검사를 그대로 사용할 수 있습니다
- FontProperties는 이제 실제 글꼴과 문자 메트릭이 표시된 상태로 열리고, 다른 문서를 연 뒤에도 곧바로 첫 텍스트 객체를 분석합니다
수정됨 (Fixed)
- 네이티브 변형 전반에서 PDFViewer 체험 바의 위치와 배경을 일치시키고, FontProperties가 종료 전에 뷰어 연결을 해제하도록 했습니다
Version 3.128.0
추가 (Added)
- 라이브 텍스트, 벡터 차트, 임베디드 이미지, 표, AcroForm 필드, 북마크, 링크, 주석, 첨부 파일을 갖춘 오프라인 6페이지 데모 쇼케이스를 추가했습니다
- 모든 네이티브 PDFViewer 변형에서 텍스트 검색, 2페이지 레이아웃, 야간 독서, 문서 검사, 폼 탐색을 원클릭으로 체험할 수 있는 보기 경험을 추가했습니다
변경 (Changed)
- CreatePDF가 저장 전에 편집 가능한 메타데이터와 콘텐츠 옵션, 실제 이미지·주석 객체, 선택적 Unicode 페이지를 갖춘 2페이지 라이브 미리보기를 엽니다
- 집중 보기, 검색, 추출, 폼, 탐색 샘플이 이제 데이터가 채워진 워크플로를 열고, 첨부 파일, 인쇄 환경설정, 정적 XFA 샘플은 기능별 실제 데이터를 포함합니다
수정됨 (Fixed)
- 시작, 문서 교체, 미리보기 재생성, 종료 시점의 뷰어 라이프사이클과 포커스 처리를 수정했습니다
- 시작 시 첫 필드를 선택한 뒤에도 비활성 상태로 남던 Lazarus FormFill 값 편집기를 수정했습니다
- SearchAndSelect의 문서 바인딩과 추출 리포트를 수정했습니다. 이전에는 뒤쪽 페이지의 폼 필드가 리포트에서 빠지거나, 생성된 메모리 내 샘플에 대해 사용할 수 없는 파일 헤더를 조회했습니다
Version 3.127.0
변경 (Changed)
- MultiPageViewer 데모가 뷰어 내장 텍스트 선택 및 클립보드 API를 사용해 페이지 레이아웃 전반에서 선택 동작을 일관되게 유지하고, 별도의 더블 클릭 선택 모드를 제거합니다
- 예제 가이드가 35개 데모 주제 전체를 각자의 고유한 워크플로에 매핑하고, Delphi와 Lazarus의 접근성, intake, 프리플라이트 콘솔 예제는 같은 Pascal 구현을 공유합니다
추가 (Added)
- XfdfLab이 XFDF 가져오기 뒤 PDF를 저장할 수 있습니다. Delphi GUI는 Save PDF를 제공하고, 콘솔 변형은 명시적인 두 번째 출력 경로를 받습니다
수정됨 (Fixed)
- C++Builder와 Lazarus MultiPageViewer 데모가 지원되지 않는 폼 속성 없이 열리고, 모든 MultiPageViewer 데모는 닫기 전에 문서 연결을 해제합니다
- Lazarus 접근성 워크벤치가 HTML 검토 리포트용 JPEG 페이지 썸네일을 생성합니다
- ExtractImages 데모가 실제 임베디드 이미지 객체를 담은 2페이지 샘플을 생성해, 기본 추출 워크플로가 네 개의 이미지를 만들어 냅니다
- 콘솔 XFDF 왕복 샘플이 주석 내용과 작성자 데이터를 보존하고, 출력을 쓰기 전에 충돌하거나 이미 존재하는 PDF 출력 경로를 거부합니다
Version 3.126.2
수정됨 (Fixed)
- 전체 XFA 보기가 기본 텍스트 선택 설정으로 정상 동작하고, 키보드 입력 중 선택된 텍스트를 교체하며, 읽기 전용 필드와 꺼진 폼 이벤트를 존중하고, 동적 레이아웃 변경 뒤에는 표시 중인 페이지 핸들을 갱신합니다
- Windows V8 라이브러리가 저장된 XFA 스트림을 바꾸기 전에 잘못된 형식의 XDP 속성, 중복 속성, 부적절한 네임스페이스 사용, 일치하지 않는 XML 선언을 거부합니다
보안 (Security)
- 서명 리비전 분석이 위젯과 appearance 객체가 같은 객체 그래프를 가리킬 때 페이지 콘텐츠 소유권을 지켜, 이후 페이지 편집이 DocMDP상 허용된 폼·주석 변경으로 받아들여지지 않도록 합니다
- 잠긴 필드와 주석이 하나의 간접 값 객체를 공유해도 FieldMDP 잠금은 계속 유효합니다
Version 3.126.1
수정됨 (Fixed)
- 동적 XFA 리페이지네이션이 페이지 추가·제거 뒤 실제 총 페이지 수로
TPdf.PageCount와OnXfaPageCountChanged를 갱신해 호스트 탐색이 폼 레이아웃과 어긋나지 않게 합니다 - 갱신된 Windows V8 라이브러리가 동적 XFA 레이아웃 변경 뒤 입력 위젯 지오메트리를 새로 고쳐, 필드가 다른 페이지로 옮겨도 텍스트와 입력 히트 영역이 정렬 상태를 유지합니다
Version 3.126.0
추가 (Added)
- 갱신된 Win32/Win64 V8 라이브러리가 지원되는 single-stream XFA 문서를 저장할 때 live dataset과 폼 패킷 바깥의 XML 주석과 처리 명령(processing instruction)을 보존하며, UTF-8과 UTF-16 입력도 포함됩니다
수정됨 (Fixed)
- single-stream XFA 저장이 잘못된 UTF-8/UTF-16 인코딩, 미완성 태그, 부적절한 entity reference, 잘못된 처리 명령을 조용히 다시 쓰는 대신 거부합니다. live data 패킷의 지원되지 않는 구성, DTD 선언, XMLDSig는 여전히 명시적인 저장 실패로 남습니다
- 뷰어의 복사·잘라내기·폼 붙여넣기가 다른 스레드나 애플리케이션이 Windows 클립보드를 붙잡고 있을 때 잠시 재시도해 일시적 경합이 풀릴 기회를 줍니다. 실패한 잘라내기는 기존 필드 텍스트를 그대로 보존합니다
Version 3.125.3
수정됨 (Fixed)
- 갱신된 Win32/Win64 일반
pdfium.dll라이브러리가 마지막으로 버퍼링된 PDF 쓰기에 실패하면 이제 실패로 보고해, 앞서 V8 라이브러리에 반영된 수정과 같은 동작을 맞춥니다
Version 3.125.2
수정됨 (Fixed)
- 갱신된 Windows V8 라이브러리가 packet 배열과 지원되는 single-stream XDP 문서에서 편집한 XFA 텍스트를 저장 후 다시 열기까지 보존하며, 빈 값, 원본 공백, 줄바꿈, 확장 Unicode 문자도 포함됩니다
- 갱신된 V8 라이브러리에서 XFA 패킷 내보내기 오류와 마지막 버퍼링 writer 실패가 문서의 수정 상태를 지우지 않고 저장 실패로 보고됩니다. 지원되지 않는 XML 구성이나 XML 서명을 담은 single-stream 문서는 거부됩니다
- 갱신된 V8 라이브러리가 호스트 애플리케이션이 명시적으로 넘긴 V8 platform과 isolate를 PDFium 초기화부터 파괴까지 보존합니다
LibraryName의 명시적 경로가EnableV8Engine=True를 포함해 어느 엔진 모드에서든 해당 런타임을 정확히 가리킵니다. 명시적 경로의 파일이 없으면 다른 번들 라이브러리를 대신 로드하지 않고 실패합니다
Version 3.125.1
수정됨 (Fixed)
ValidatePdfFilesParallel이 더 이상 공유 PDFium 엔진을 망가뜨리지 않습니다. 이전에는 워커 스레드가 문서를 동시에 열고 검사해 일부 문서가 로드 오류나 access violation으로 실패했고, 프로세스가 죽거나 이후 PDF 작업이 깨질 수 있었습니다. 이제 각 문서의 PDFium 처리는 한 번에 하나씩, 규칙 평가는 여전히 병렬로 실행됩니다- 배치 검증에서 열지 못한 문서는 뒤따르는 "활성 PDF 문서 없음" 메시지 대신 실제 로드 오류를 보고합니다
Version 3.125.0
추가 (Added)
PdfLibraryConfigurationSupportError가 주어진 Skia와 Fontations 지원 여부를 가진 PDFium 빌드에서TPdfLibraryConfiguration을 쓸 수 있는지 알려 줍니다
수정됨 (Fixed)
- Skia 없는 PDFium 빌드에서
prpSkia를, Fontations 없는 빌드에서pfbpFontations를 요청하면 이제 라이브러리 로드가 프로세스를 멈추거나 PDFium을 반쯤 초기화한 채로 남기는 네이티브 검사에 걸리는 대신EPdfError를 발생시킵니다. 구성은 봉인되지 않은 상태로 남아 애플리케이션이 다른 설정을 골라 다시 로드할 수 있습니다
Version 3.124.0
변경 (Changed)
- PAdES 검증이 모든 RSA 알고리즘을 무조건 받아들이는 대신 RSA 서명에 ETSI TS 119 312 signature suite를 적용합니다.
AlgorithmPolicyStatus는 MD2, MD4, MD5 다이제스트에서pcsInvalid이고, SHA-1과 SHA-224 같은 112비트 다이제스트에서는 현재 합의에서 벗어나pcsIndeterminate입니다. SHA-1 서명은 전체 무결성 결과는 유지하고 거부 대신 검토 대상으로 표시됩니다 - 서명 알고리즘이 고정하는 다이제스트와
digestAlgorithm이 어긋나는 RSA 서명(예: SHA-1 다이제스트에 sha256WithRSAEncryption)은ppeiSignatureAlgorithmMismatch로 보고되어 무결성에 실패합니다. RSA가 아닌 서명자 키에 대한 RSA 서명 알고리즘도 마찬가지입니다 - 서명자 인증서를 찾을 수 없는 RSA 서명은 기존 ECDSA 동작과 맞추어
pcsIndeterminate를 보고합니다. 알 수 없는 다이제스트와 서명용이 아닌 RSA OID는pcsUnsupported입니다 - SHA3 다이제스트를 쓰는 RSA PKCS #1 v1.5 서명과 레거시 OIW sha1WithRSASignature 식별자도 이제 RSA로 인식됩니다
Version 3.123.0
추가 (Added)
PdfNativeRendererType이 주어진 PDFium 빌드에서TPdfRendererPreference가 어떤 렌더러를 고르는지 알려 주며,prpDefault는 Skia 지원 런타임에서는 Skia로, 그 외에는 AGG로 확정됩니다
수정됨 (Fixed)
- 렌더러 기본 설정이
prpDefault일 때ConfigurePdfLibrary에서BrotliEnabled나IsolatePerDocument를 켜도 렌더링이 Skia에서 AGG로 전환되지 않습니다. 번들된 Skia 지원 런타임이 기본 렌더러를 유지하므로 이제 이런 무관한 옵션 때문에 페이지 출력이 달라지지 않습니다
Version 3.122.2
수정됨 (Fixed)
- Free Pascal과 Lazarus 빌드가 모든 로드 경로(파일, 메모리, 커스텀 스트림, 점진적 로딩)에서 파일 이름과 암호를 UTF-8로 PDFium에 넘깁니다. 프로그램이 Lazarus UTF-8 문자열 모드를 쓰지 않아도 중국어·일본어 등 비 ASCII 이름 폴더의 문서와 비 ASCII 암호의 암호화 문서를 열 수 있습니다
Version 3.122.1
수정됨 (Fixed)
- 이제 모든 실패한 로드에서
LastLoadReport가 교체됩니다. 예외를 일으키지 않고 컴포넌트를 비활성으로 남겨 두는 실패한Active:= True와 실패한 일반LoadDocument·LoadCustomDocument호출이 오류 문구와 함께plsFailed를 보고해, 하나의TPdf를 재사용하는 배치 코드가 더 이상 이전 파일이 로드된 것으로 보지 않습니다 Active도움말 페이지가 실제 실패 동작(예외 없음, 컴포넌트는 비활성 유지, 상세 내용은LastLoadReport)과FileName은 컴포넌트가 비활성일 때만 바꿀 수 있다는 사실을 설명하도록 고쳤습니다
Version 3.122.0
추가 (Added)
FPdfAssocFiles의EPdfAssocFilesError가InjectAssociateFiles가 주입하지 못한 이유를 알려 줍니다. 소스에 읽을 수 있는 trailer나 catalog가 없거나,TargetPage가 음수이거나 존재하지 않는 페이지를 가리키는 경우입니다. 대상 스트림은 바뀌지 않은 채로 남습니다
변경 (Changed)
TAssocFilesOptions.TargetPage가0..PageCount범위를 벗어나면SaveAsWithAssociateFiles와SaveAsWithAssociateFilesToStream이 이제EPdfError를 발생시킵니다. 이전에는 문서화된 동작과 달리 이런 값이 문서 catalog에 대신 붙었습니다
수정됨 (Fixed)
- 저장된 문서를 주입용으로 파싱할 수 없을 때
SaveAsWithAssociateFiles와SaveAsWithAssociateFilesToStream은 요청한 파일 없이 문서를 그대로 쓰고True를 돌려주는 대신False를 반환합니다 SaveAsWithAssociateFiles가 출력이 만들어지기 전에 기존 대상 파일을 자르지 않습니다. 거부되거나 실패한 저장은 파일을 그대로 남깁니다
Version 3.121.4
수정됨 (Fixed)
- 페이지 수준 연관 파일(
TAssocFilesOptions.TargetPage)이 문서 페이지 순서에서 해당 위치의 페이지에 붙습니다. 이전에는 페이지 객체가 화면 표시 순서와 다른 순서로 파일에 저장된 경우(예: 페이지를 재정렬하거나 끼워 넣은 뒤) 파일이 다른 페이지에 붙을 수 있었습니다
Version 3.121.3
수정됨 (Fixed)
SaveAsWithAssociateFiles로 저장한 연관 파일이 중국어, 일본어 등 비 ASCII 파일 이름과 설명을 온전히 유지합니다./UF와/Desc가 시스템 ANSI 코드 페이지를 거치거나(Delphi) 날것의 UTF-8 바이트로 출력되는(Free Pascal) 대신 Unicode PDF 텍스트 문자열로 기록됩니다- 레거시
/F파일 이름은 항상 이식 가능한 인쇄용 ASCII이며 비 ASCII 문자는_로 대체되어, 자기 코드 페이지로/F를 디코딩하는 뷰어에서 더 이상 깨진 문자로 표시되지 않습니다
Version 3.121.2
수정됨 (Fixed)
- 연관 파일(associated files)이 MIME 타입을 유효한 PDF 이름으로 인코딩하므로,
text/plain같은 값이 더 이상 잘못된 형식의 embedded-file 딕셔너리를 만들거나 PDF/A-3 검증을 막지 않습니다
Version 3.121.1
수정됨 (Fixed)
- 주석을 읽고 변경 사항을 다시 기록할 때 해당 스트림이 없으면 빈 rollover·down appearance 스트림을 더 이상 만들지 않으므로, PDF/A 주석 appearance 요구 사항이 그대로 지켜집니다
Version 3.121.0
추가 (Added)
OnlineRetrieval이 켜져 있으면 OpenSSL CMS 검증이 HTTP(S) AIA 중간 인증서와 CRL을 가져옵니다. timeout·요청 수·응답 크기 한도를 함께 공유하며, 내려받은 인증서는 구성된 신뢰 체인이 검증하기 전까지 신뢰되지 않은 상태로 유지됩니다- 온라인 검색은 Windows에서는 WinHTTP를, FPC Unix에서는 사용 가능한 libcurl을 사용하며 HTTPS 인증서 검증을 그대로 유지하고, 지원되지 않는 전송 구성은 기존 capability 진단으로 알려줍니다
수정됨 (Fixed)
- 클래식 교차 참조 재구축은 출력 테이블을 한 번만 할당해 객체 슬롯에 곧장 기록하므로, 큰 sparse 객체 번호에서 작업량이 제곱으로 불어나는 문제를 피하면서 파서 자원 한도와 최신 객체 세대는 그대로 유지합니다
- PDF/X-1a 출력은 기본 RGB 프로파일을 조용히 임베드하는 대신 구조적으로 유효한 ICC v2 CMYK printer 프로파일을 요구하며, 잘못된 프로파일은 기존 대상 파일을 교체하려고 열기 전에 실패합니다
- PDF/X-1a 검증은 임베드된 프로파일과 그 4컴포넌트 선언을 검사하고 preflight 보고서는 잘못된 output 프로파일을 식별합니다. 기본 output-condition 레이블은 공급된 프로파일을 따르고, 호출자가 명시한 레이블은 보존됩니다
Version 3.120.4
수정됨 (Fixed)
- 테이블 추출 데모의 폴더 배치 모드가 폴더 안의 모든 PDF를 다시 처리합니다. 파일들 사이에서 공유 document 인스턴스가 활성 상태로 남아 두 번째 이후 파일에서 대입 오류가 나고 실패로 보고되었는데, 이제 Delphi, Lazarus, C++Builder 에디션 모두에서 문서마다 자체 인스턴스를 받습니다
- 워터마크 데모의 샘플 문서는 insert-at-index 호출로 첫 페이지를 맨 뒤로 돌리는 대신 페이지를 생성 순서(1, 2, 3, 4)대로 유지합니다
- XFA와 XFDF 데모는 document 열기 실패를 처리되지 않은 예외 대신 메시지로 알리고, attachments 데모는 이미 로드된 문서가 있어도 새 문서를 시작할 수 있으며, Lazarus viewer는 저장한 bitmap을 해제합니다
- Delphi 인쇄 데모는 이제 인쇄 작업에 방향, duplex, 그레이스케일, 품질, DPI 설정을 실제로 적용하고, 인쇄 대화상자에서 고른 매수를 따르며, 렌더링에 실패한 페이지는 건너뛰고, 인쇄 후 미리보기를 복원합니다
- 로더가 열기 실패를 삼키던 인터랙티브 데모가 더 이상 오해를 부르는 loaded 상태를 보여주지 않고, 추출 출력 파일에는 UTF-8 BOM이 붙으며, CJK와 RTL 콘솔 데모는 추출 텍스트를 출력하기 전에 콘솔을 UTF-8로 전환하고, confidence 입력은 시스템 locale과 무관하게 소수를 파싱합니다
- PAdES timestamp 테스트는 이제 스스로 일관된 ByteRange 테스트 문서로, 검증기가 signature timestamp 주입 후 B-T 레벨에 도달하는지 실제로 단언합니다
- pdfium.dll이 로드된 상태에서는 API 커버리지와 PDF/A 테스트가 어떤 로드 실패도 환경 skip으로 치지 않고, 서드파티 라이터가 string 값을 literal string으로 직렬화한 문서의 복호화를 다루는 새 회귀 테스트가 추가되었습니다
Version 3.120.3
수정됨 (Fixed)
- 증분 저장된 소스 PDF에 대해
EncryptDocumentBytes가 기준 리비전 객체를 몽땅 누락하던 문제를 고쳤습니다. 이제 클래식 교차 참조 체인을/Prev로 최신부터 훑으며 새 항목이 이기고, 이미 암호화된 소스는 거부하고,stream키워드는 사전을 닫아야 스트림 데이터로 취급되며, 마지막 객체의 범위는 바이트 안의 첫endobj가 아니라 소스 xref로 한정됩니다 - 서드파티 라이터가 string 값을 literal string으로 직렬화해 만든 암호화 문서가 인증 오류로 실패하지 않고 복호화됩니다
- 소스 trailer에
/Info가 없을 때 PDF/E 마커 주입이 합성한 Info 사전에 내장 ICC 프로파일 스트림과 같은 번호를 붙여, 증분 xref가/DestOutputProfile을 잘못된 객체로 가리키게 하던 문제를 고쳤습니다 - PDF/X 검증은 XMP
pdfxid:GTS_PDFXVersion값을 주변 공백을 잘라낸 채 비교하므로, 정상적으로 패딩된 element-form XMP가 Info 불일치를 잘못 보고하지 않습니다 - PDF/UA 검증은 attribute-form
pdfuaid:partXMP를 인식하고, 형제 표준 검증기들처럼 바이트 스캔 전에 object stream을 펼치며, 교차 참조 스트림 문서에도 암호화/P비트를 검사하고, 비어 있지 않은dc:title값을 요구합니다. 마커 주입도 더 이상 빈 title 항목을 내보내지 않습니다 - 페이지 목록이 이미 채워진 뒤 검증에 실패한 깨진 DPart 계층을 소스가 담고 있을 때, PDF/VT 마커 주입이 모든 페이지 객체를 두 번씩 수집·재작성하던 문제를 고쳤습니다
TsaUrl없이 PAdES B-T 이상 레벨로 서명하면 조용히 B-B 서명을 만드는 대신 예외를 발생시키고, B-LTA document time-stamp는 호출자의 nonce를 다시 보내는 대신 자체 nonce를 만듭니다- CMS signature-time-stamp 주입은 첫 SignerInfo 이후를 조용히 버리는 대신 multi-signer 입력을 거부하고, SignedData version은 subjectKeyIdentifier sid와 함께 3이 되며, DER 규정에 따라 timestamp 요청에서
certReq FALSE가 생략되고, 본문 중간의 WinHTTP 전송 실패는 잘린 DER 본문이 아니라 전송 오류로 보고됩니다 - 시스템 폰트 임베딩이 요청된 패밀리의 실제 TrueType Collection 페이스를 찾아 단독 폰트로 추출하므로,
.ttc의 첫 번째가 아닌 페이스(예: NSimSun)를 요청해도 더 이상 페이스 0이 임베드·렌더링되지 않습니다 BuildToUnicodeCMap이 글리프와 서러게이트 쌍 문자를 올바르게 짝지어 supplemental 매핑을 bfchar 항목으로 내보냅니다. 첫 astral 문자 이후 모든 항목이 밀리던 문제가 사라집니다- shaped 텍스트, CID 텍스트, OCR 삽입은 롤백용 객체를 기록하기 전에 페이지 삽입 결과를 확인하므로, 실패한 삽입이 두 번 파괴될 수 있는 dangling 핸들을 남기지 않습니다
- 컴프레서와 ToUnicode 복구의 stream 키워드 감지가 ISO 32000-1 7.3.8.1이 허용하는 CR 단독 줄바꿈도 받아들입니다
변경 (Changed)
- trial Win64x C++Builder 패키지 빌드는 이전 전체 빌드가 남긴 오래된 COFF
PDFiumPas.lib를 제거해 두 import library가 함께 묻어 나가지 않게 하고, FULL 설치 관리자의 catch-all 목록에서 로컬 전용 개발 파일(packagefiles.xml, 상태 문서)을 제외하며, 설치 후 데모 빌드는 빌드 스크립트가 실제로 읽는PDFiumPas_BDS_ROOT변수로 IDE 루트를 고정합니다
Version 3.120.2
수정됨 (Fixed)
AddText,SetText, 레이아웃 생성, OCR 검색 레이어로 넣은 텍스트가 저장 후뿐 아니라 열려 있는 document에서도 정확한 코드 포인트로 추출됩니다. 현재 PDFium 빌드에서 공백이 U+00A0로, 하이픈이 U+00AD로 돌아오던 문제가 사라집니다- 시스템 폰트는 코드 포인트를 키로 하는 CID 폰트로 임베드됩니다. Unicode 문자마다 CID 하나와 명시적인
CIDToGIDMap이 붙어, 여러 문자가 공유하는 글리프(공백과 non-break space, 하이픈과 soft hyphen, Omega와 옴 기호)도 어떤 뷰어에서든 각각 충실하게 왕복합니다. Unicode cmap 서브테이블이 없는 폰트는 기존 임베딩 경로를 유지합니다
Version 3.120.1
수정됨 (Fixed)
- subset 폰트로 저장한 문서를 다시 읽을 때 추출 텍스트가 깨지던 문제를 고쳤습니다. pdfium이 직렬화하는 ToUnicode CMap이 하나의 CID를 서로 다른 두 코드 포인트에 매핑할 수 있었고(공백이 U+00A0, 하이픈이 U+00AD), 이제 모든 전체 저장이 CMap 구조를 바이트 단위로 그대로 둔 채 그 모순되는 매핑을 제자리에서 복구하므로 PDFium reader, MuPDF, qpdf 모두 원래 문자를 추출합니다
- 증분 저장, sparse 업데이트, 교차 참조 스트림 문서는 복구가 재작성하지 않고 그대로 통과하며, 모순되는 매핑이 없는 파일은 바이트 단위로 복사됩니다
- 저장소에 올라간
sample.pdf테스트 픽스처는 복구된 저장 경로로 다시 만들었고, load-policy 테스트는 픽스처 오프셋을 하드코딩하는 대신 xref 항목을 동적으로 찾습니다
Version 3.120.0
추가 (Added)
- 북마크가 outline 텍스트 스타일을 보고합니다. 새
FPDFBookmark_GetStyle바인딩으로 읽은 이탤릭·볼드 플래그가TBookmark.Style에 담기고, 로드된 pdfium.dll이 이를 익스포트하는지는BookmarkStyleFeaturesAvailable로 알 수 있습니다 - 첨부 파일이 PDF 2.0 associated-file relationship을 노출합니다. 새
FPDFAttachment_GetAFRelationship바인딩으로AttachmentRelationship[],TPdfAttachmentMetadata와TPdfAnnotationAttachment의Relationship필드가/AFRelationship이름을 읽으며,AttachmentRelationshipFeaturesAvailable로 보호됩니다 - 새
FPDFPageObj_GetRenderedStrokePattern바인딩으로GetObjectRenderedStrokePattern이 path 객체가 stroke에 쓰는 tiling 패턴을 호출자 소유 비트맵으로 래스터라이즈합니다. 익스포트 여부는StrokePatternRenderingFeaturesAvailable이 보고합니다 TPdfLibraryConfiguration.IsolatePerDocument는FPDF_LIBRARY_CONFIGversion 7의m_IsolatePerDocument플래그에 대응해, V8 빌드가 문서마다 자체 isolate를 줄 수 있습니다.ConfigurePdfLibrary는 이 플래그를 명시적인V8Isolate와 함께 쓰면 거부합니다
변경 (Changed)
- 현재 PDFium 헤더의 public 익스포트 476개를 모두 바인딩했습니다. 새 엔트리 포인트 세 개는 관대하게 로드되므로 오래된 pdfium.dll 배포도 계속 동작하며 해당 기능은 빈 값이나
nil을 보고합니다
Version 3.119.1
수정됨 (Fixed)
- Windows 오프라인 신뢰 검증도 폐기 검색을 캐시된 데이터로 제한해, 온라인 검색이 꺼져 있을 때 암시적인 CRL·OCSP 네트워크 요청이 나가지 않게 합니다
- Windows 폐기 실패가 독립적인 체인 신뢰 오류를 보존하고, 폐기 reason과 네이티브 진단을 PAdES 결과와 evidence 리포트로 노출합니다
Version 3.119.0
추가 (Added)
- PAdES trust 검증과 evidence 리포트가 document 서명과 timestamp에 대해 폐기 reason과 네이티브 오류를 각각 노출합니다. JSON 필드와 뒤에 붙는 CSV 컬럼도 포함됩니다
Version 3.118.0
추가 (Added)
- CMS 검증 결과가
RevocationReason과RevocationError를 노출하고, 만료·사용 불가·무효인 로컬 CRL에 대한 OpenSSL 진단을 제공합니다
수정됨 (Fixed)
- 체인 신뢰가 성공하고 로컬 CRL 검증이 폐기를 확인하면 OpenSSL이 명시적으로 폐기된 인증서를 invalid로 보고하며, 서명 결과와 신뢰 결과는 별개로 유지됩니다
Version 3.117.1
수정됨 (Fixed)
- 명시적 버전 저장이 predictor로 압축된 교차 참조 스트림을 가진 정상적인 multipage 폼을 받아들이고, 교차 참조 섹션이 잘못되었다고 잘못 보고하지 않습니다
Version 3.117.0
추가 (Added)
- 테이블 감지가 채워진 사각형으로 그려진 테두리와 음영도 읽어들입니다: 새로 추가된
MaxRulingThickness보다 두꺼울 수 없는 채워진 박스는 룰링이 되고, 더 큰 채워진 박스는 그 가장자리를 표 구성에 기여합니다. 덕분에 Word, Google Docs, 브라우저에서 내보낸 테이블이 이제 공백 기반 파편이 아니라 캡션 행이 병합된 줄선 격자(ruled grid)로 발견됩니다.DetectFilledRulings로 이 동작을 끌 수 있습니다 - 격자를 조립하기 전에 룰링 좌표가
RulingSnapTolerance범위 안에서 스냅됩니다. 이를 통해 셀 단위 테두리 조각, 이중 테두리, 좁은 간격으로 나뉜 음영 셀들이 하나의 표로 합쳐집니다 - 폼 XObject 내부의 룰링도 개체 행렬을 합성해 감지에 참여하며,
IncludeFormXObjects로 이 동작을 제어합니다 ExtractDocumentTables는 페이지 가장자리에 닿은 조각뿐 아니라 페이지 콘텐츠가 끝나는 지점에서 끝나고 다음 페이지 콘텐츠가 시작하는 지점에서 이어지는 연속(continuation) 조각도 연결하고, 한 행이 다음 페이지로 넘어간 경우에도 체인의 일부로 유지합니다- TableExtractionLab은 Delphi, Lazarus, C++Builder 변형 모두에서 옵션 패널에
DetectFilledRulings를 노출합니다
변경 (Changed)
- Whitespace 감지는 이미 줄선 격자에 속한 단어는 무시하고, 모든 열 경계가 자신이 가르는 행들을 가로지르는 텍스트 없는 통로여야 합니다. 덕분에 양쪽 정렬 문단이나 글머리 기호 목록이 더 이상 표로 보고되지 않습니다
- 첫 행이 전체 폭을 차지하는 셀 하나뿐인 연속 후보는 이전 표의 나머지 부분이 아니라 캡션 있는 새 표로 취급합니다
- 줄선 격자에서는
MinRows가 1을 허용합니다. whitespace 감지는 여전히 최소 두 행을 요구하고, 셀 단위 테두리 박스가 선으로 그린 격자선보다 훨씬 많이 들어오기 때문에MaxRulingSegments기본 예산은 16384로 상향됩니다 - 셀 텍스트는 겹치는 단어 박스들로부터 한 줄씩 조립되므로, 글리프 박스 높이가 서로 다른 단어들도 왼쪽에서 오른쪽 순서를 유지합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 버전 메타데이터가 3.117.0을 보고합니다
Version 3.116.4
추가 (Added)
- TableExtractionLab에 폴더 배치 처리가 추가되었습니다:
Batch folder를 실행하면 선택한 폴더의 모든 PDF에ExtractDocumentTables를 돌리고, 문서별 표 개수를 나열하고, 텍스트 레이어가 없는 문서에 OCR 대상 표시를 하며, 손상되었거나 잠긴 파일이 실행 전체를 중단시키지 못하게 막습니다 Export all CSV는 배치 실행 시 감지된 모든 표를<document>-<n>-page<p>-t<i>.csv형식으로tables하위 폴더 아래 기록하고, 단일 파일일 때는 불러온 문서 옆에 저장합니다- 감지 프리셋 선택기가 튜닝된
TPdfTableExtractionOptions를 노출합니다: Default, Compact columns(촘촘한 워드프로세서 내보내기용MinColumnGap4 +AlignmentTolerance5), Compact + wide rows(1.5-2배 줄 간격용MaxRowGapFactor6) - Default 프리셋에서 표가 하나도 나오지 않는 문서는 단일 문서 추출과 배치 추출 모두에서 Compact columns로 한 번 재시도하고, 배치 행에는 어떤 프리셋이 결과를 냈는지 보고합니다
수정됨 (Fixed)
- 배치 추출은 공유 컴포넌트 하나를 계속 다시 로드하는 대신 각 문서를 자체
TPdf인스턴스로 엽니다. 이로써 폴더 실행 도중 비활성 컴포넌트 오류로 드러나던 조용한 로드 실패가 사라집니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 버전 메타데이터가 3.116.4를 보고합니다
Version 3.116.3
변경 (Changed)
- 세 툴체인 모두의 TableExtractionLab 예제가 이제 생성한 샘플 문서를 메모리에만 두지 않고 데모 실행 파일 옆에
TableExtractionSample.pdf로 기록합니다. 폴더가 쓰기 불가능하면 이전처럼 메모리 내 동작으로 폴백하고 상태 줄에 그 사실을 알립니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 3.116.3을 보고합니다
Version 3.116.2
수정됨 (Fixed)
- 오래된 Delphi 릴리스에서 라이브러리가 컴파일되지 않는 문제였습니다. 64비트 틱 헬퍼와 신뢰 목록·프로덕션 XML 코덱이 최신 컴파일러의 RTL 유닛에만 들어 있는
GetTickCount64와CP_UTF8을 참조했고, reflow HTML 라이터가 이 컴파일러들이 단일 리터럴에 걸는 255개 요소 상한을 넘는 CSS 문자열 리터럴을 박아 넣었으며, XFA 데이터셋 병합은 pre-XE7 컴파일러가 거부하는TBytes와 일반 동적 배열 필드 사이의 대입을 했습니다. 이제 오래된 컴파일러에서는 RTL에 없을 때GetTickCount64를 kernel32에서 바인딩하고CP_UTF8을 로컬로 선언하며, 스타일시트는 짧은 리터럴을 이어 붙인 형태로 들어가고, 패킷 페이로드는 요소 단위로 복사됩니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 3.116.2를 보고합니다
Version 3.116.1
추가 (Added)
Demo\Delphi\TableExtractionLab,Demo\CBuilder\TableExtractionLab,Demo\Lazarus\TableExtractionLab이 테이블 감지를 하나의 워크플로로 만듭니다. 이 랩은 병합된 헤더 셀을 가진 줄선 표, 룰링 없는 whitespace 정렬 표, 페이지 경계를 가로지르는 긴 표를 담은 샘플 문서를 만든 뒤ExtractTables또는ExtractDocumentTables를 실행하고 행, 열, 스팬, 헤더 플래그, 감지 모드, 신뢰도, 연속 그룹을 나열합니다- 랩은 선택한 표를
TPdfTable.ToCsv와TPdfTable.ToJson으로 내보내고, 옵션 패널에서DetectRuledTables,DetectWhitespaceTables,DetectContinuations,MinConfidence를 조정하며, 전체 리포트를 클립보드에 복사합니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 버전 메타데이터가 3.116.1을 보고합니다
Version 3.114.21
수정됨 (Fixed)
- PDF/A 검증이 어노테이션을 담은 모든 문서에서 외부 파일 참조를 보고했습니다. ISO 19005-1 §6.1.7은 스트림 객체 딕셔너리에서
/F,/FFilter,/FDecodeParms를 금지하는데, 이 검사가 파일 전체에서 해당 이름들을 찾았고/F는 §6.5.3이 모든 어노테이션이 가져야 한다고 요구하는 어노테이션 플래그 키이기도 합니다. 이제 이 검사는 스트림 객체 딕셔너리 내부만 봅니다
Version 3.114.20
수정됨 (Fixed)
- 세 가지 서명 백엔드 모두에서 RSASSA-PSS 서명이 잘못된 형태의 알고리즘 파라미터를 실고 있었습니다. RFC 4055는 RSASSA-PSS-params의 네 필드 전부에 태그를 붙이라고 규정하는데, 솔트 길이가 맨 정수로 기록되어 파서가 다른 필드의 시작으로 읽어버리고, 트레일러 필드는 DER이 생략하라고 요구하는 기본값과 같은 값임에도 기록되고 있었습니다. 검증기는 파라미터 파싱에 실패하거나, 서명이 32를 쓰는 동안 기본 20바이트 솔트로 폴백했고, 그 결과 PSS 서명이 거부되었습니다. PKCS#1 v1.5와 ECDSA 서명은 영향받지 않았습니다
Version 3.114.19
수정됨 (Fixed)
- SHA-256이 아닌 다이제스트로 타임스탬프를 요청하면 해당 알고리즘을 선언하면서 실제로는 SHA-256 다이제스트를 실은 요청이 만들어졌고, 타임스탬프 기관은 이를 거부하거나 더 나쁘게는 그대로 타임스탬프를 찍었습니다. 계산되는 다이제스트는 SHA-256뿐이므로 이제 다른 식별자는 즉시 거부하고, 빈 식별자는 여전히 SHA-256 기본값을 선택합니다. Lazarus와 C++Builder용 PDF Viewer 예제도 폼 파일은 이름을 부르는데 코드가 정의하지 않은 북마크 확장 핸들러를 바인딩하고 있어서 폼을 로드하는 순간 실패했는데, 이 핸들러는 Delphi 예제에서 포팅했습니다
Version 3.114.18
수정됨 (Fixed)
- Delphi용 XFA Lab과 XFDF Lab 예제, 그리고 Lazarus용 XFA Lab 예제가 시작 시 실패했습니다. 각 예제는 폼의 create 핸들러에서 컨트롤을 만드는데, 폼 리소스가 없고 링크되어 있지도 않아서 메인 폼 생성 시 resource-not-found 오류가 나고 핸들러는 끝내 실행되지 않았습니다. 세 예제 모두 이제 폼 파일과 이를 임베드하는 지시자를 갖추고 있습니다
Version 3.114.17
수정됨 (Fixed)
- 작업이 도중에 실패할 때 네이티브 리소스 두 개가 잘못 처리되었습니다. 썸네일 렌더가 실패하면 네이티브 렌더를 닫기 전에 대상 비트맵을 해제했고, 렌더가 그 비트맵의 픽셀에 곧장 그리는 중이었다면 해제 루틴이 이미 반납된 메모리를 읽었습니다. 또
AddBitmap에서 비트맵 할당이 실패하면 방금 만든 이미지 객체가 소유자도, 다시 접근할 길도 없는 채로 남았습니다
Version 3.114.16
수정됨 (Fixed)
- FDF 텍스트를 읽으면
0x7E를 넘는 문자가 틀리게 나왔습니다. ISO 32000-1 부록 D.2의 PDFDocEncoding 테이블은0x80부터 불릿으로 시작하는데, 매핑이0x7F부터 시작했기 때문에0x9F까지의 블록 전체가 한 자리씩 밀렸습니다: 대거(dagger)가 불릿으로, em 대시가 줄임표로 읽히는 식으로, 끝의 zcaron은 아예 범위를 벗어났습니다.0xA0의 유로 기호도 빠져 있어서 non-break space로 돌아왔습니다. 이제 가져온 FDF의 필드 이름과 값이 올바르게 디코딩됩니다
Version 3.114.15
수정됨 (Fixed)
- 트레일러나 카탈로그를 읽을 수 없는 문서에 대해 신뢰를 검증하면 배열 끝을 넘어 기록했습니다. 이 경우 컴플라이언스 패스는 서명을 하나도 기록하지 않은 채 포기하지만, 그다음에 돌아가는 컬렉터는 바이트 스트림을 곧장 읽기 때문에 서명 딕셔너리를 여전히 찾을 수 있고, 그래서 비어 있는 배열에 딕셔너리 하나당 엔트리 하나씩 기록되었습니다. 이제 개수는 컴플라이언스 패스가 만든 결과로 제한됩니다
Version 3.114.14
수정됨 (Fixed)
- PDF/A 복구 플랜을 실행하면 플래너가 막아둔 단계가 적용되었습니다. 단계는 문서에 서명이 있고, 그 단계가 서명을 무효화하며, 호출자가 이를 허용하지 않을 때 막히는데, 실행기는 이 조건을 표현하지 못하는 단계의 안전 수준만 검사했기 때문에, 플랜이 이미 거부한 자동 복구가 서명된 문서의 서명을 무효화할 수 있었습니다. 이제 막힌 단계는 건너뛰며 건너뛴 횟수로 집계됩니다
Version 3.114.13
수정됨 (Fixed)
- 인증서 집합이 127바이트를 넘는 CMS 값 — 사실상 모든 실제 인증서가 그렇습니다 — 에 서명 타임스탬프를 추가하면 결과가 깨졌습니다. 중첩 구조의 시작점을 찾는 헬퍼가 length 옥텟을 거꾸로 훑다가 마지막 옥텟을 첫 번째로 착각해서, 잘라낸 슬라이스가 요청된 구조보다 한참 앞에서 시작했습니다. 이제 헤더 길이는 DER이 명확히 규정하듯 콘텐츠 길이에서 유도합니다. 자체 검증은 픽스처 인증서가 짧은 형식으로 충분할 만큼 작아서 이 문제를 놓쳤습니다
Version 3.114.12
수정됨 (Fixed)
- 서명된 속성들이 X.690 §11.6이 DER SET OF에 요구하는 인코딩 정렬이 아니라 만들어진 순서대로 출력되었습니다. 그래서 OpenSSL과 BouncyCastle처럼 다이제스트를 계산하기 전에 속성 집합을 다시 인코딩하는 검증기는 다른 다이제스트를 계산해서 멀쩡한 PAdES 서명을 무효로 판정했습니다. 이 라이브러리가 만든 서명은 이제 해당 스택에서도 검증에 통과합니다. Windows 계층을 통한 검증은 받은 바이트를 그대로 다이제스트하기 때문에 영향받지 않았습니다
Version 3.114.11
수정됨 (Fixed)
- 콘텐츠 바이트가 두 개를 넘는 음수 DER INTEGER가 잘못된 값으로 인코딩되었습니다. 라이터는 논리 시프트 후 부호를 다시 주입하는 방식으로 산술 시프트를 흉내 내는데, 쓴 마스크가 시프트로 비워진 바이트만이 아니라 하위 바이트 위의 모든 비트를 설정해 버려서, 나머지 바이트에 여전히 담겨 있던 크기 값이 덮여 씌워졌습니다. 예컨대 -100000이 -34464로 인코딩되었습니다. 이제 타임스탬프 요청 nonce를 비롯해 이 크기의 부호 있는 정수는 올바르게 인코딩됩니다
Version 3.114.10
수정됨 (Fixed)
- PDF/A 검증이 ISO 19005-1 §6.4 투명성 규칙의 constant alpha 부분을 끝내 보고하지 못했습니다. 헬퍼가 검색 키를 솔리더스(solidus)를 접두로 붙여 만드는데 호출자도 이미 붙인 키를 넘겨서
//CA를 찾고 아무것도 맞지 않았습니다. 두 alpha 검사 모두1과1.0이라는 정확한 텍스트만 받았기 때문에 완전히 불투명한/CA 1.00이 위반으로 표시되었습니다. 이제 값이 1이면 어떤 표기든 인식합니다
Version 3.114.9
수정됨 (Fixed)
- 페이지 수준 URI 액션이 깨진 텍스트를 돌려주었습니다. 경로는 네이티브 계층에서 UTF-8 바이트로 돌아오는데 와이드 문자열에 곧장 기록되면서 바이트들이 16비트 코드 유닛으로 짝지어지고, 버퍼의 나머지에는 그 자리에 있던 메모리 내용이 그대로 남았습니다. 이제
GetPageActionURI는 문서 수준 액션 경로가 이미 그러하듯 바이트를 제대로 디코딩합니다
Version 3.114.8
보안 (Security)
- Windows가 아닌 대상에서는 모든 암호화 키, 솔트, 초기화 벡터의 난수 바이트가 런타임 PRNG에서 나왔는데, 프로그램이
Randomize를 호출하지 않으면 이 PRNG의 시드는 상수입니다. 그래서 모든 프로세스가 같은 파일 암호화 키, 같은/UE와/OE솔트, 같은/Perms바이트, 같은 AES-GCM nonce를 만들어냈고, Linux나 macOS의 Free Pascal 빌드가 내놓는 암호화 출력은 쉽게 복원될 수 있으며 고정 키에서 GCM nonce가 반복되었습니다. 이제 바이트는/dev/urandom에서 가져오고, 커널 풀을 쓸 수 없으면 이미 Windows에서CryptGenRandom을 쓸 수 없을 때 그러하듯 폴백하지 않고 예외를 일으킵니다
Version 3.114.7
수정됨 (Fixed)
- 잘못된 형태의 오브젝트 스트림이 압축과 복구 진입점으로 하여금 디코딩된 버퍼 끝을 넘어 읽게 만들 수 있었습니다. 이제 헤더를 파싱하는 즉시 스트림이 선언한 멤버 오프셋의 범위와 오름차순 순서를 검사하고, 헤더가 담을 수 있는 것보다 큰 멤버 개수는 메모리를 확보하기 전에 거부하며, 각 멤버의 바이트 범위는 뒤따르는 공백을 자르기 전이 아니라 그 전에 검증합니다
Version 3.114.6
수정됨 (Fixed)
- 인라인 이미지를 외부화하면 쓸 수 없는 이미지 XObject가 만들어졌습니다. 딕셔너리가 첫 키 앞에 어긋난 솔리더스 하나를 실고 기록되어 빈 이름이 열리고 모든 키가 이전 키의 값 자리로 밀렸고, 인라인 약어 테이블은 Decode를
G로 매핑했고D가 아니었기 때문에/D배열이 버려지고 DeviceGray 값 약어가 키로 오인되었습니다. 이제 콘텐츠 스트림에서 꺼낸 이미지는 형태가 온전한 딕셔너리를 갖고 Decode 배열을 유지합니다
Version 3.114.5
수정됨 (Fixed)
- HarfBuzz 셰이퍼가 오른쪽에서 왼쪽(RTL) 런에서 클러스터 길이를 잘못된 글리프에 배당했고, 마크나 리가처 구성 요소처럼 하나의 클러스터를 공유하는 글리프들에 길이 1을 부여했습니다. 이제 각 글리프의
ClusterLength는 어느 방향이든 논리 순서로 자기 클러스터 시작점부터 다음 클러스터까지를 포괄하므로, 아랍어와 히브리어 텍스트의 문자-글리프 매핑이 Uniscribe 백엔드가 보고하는 것과 일치합니다
Version 3.114.4
수정됨 (Fixed)
- libcurl 타임스탬프 전송 계층이 숫자 옵션을 넘기고 HTTP 상태 코드를 32비트 값으로 읽었는데, libcurl은 C
long을 주고받고 Linux와 macOS에서 이는 64비트입니다. 상태 조회가 스택에서 대상 옆의 네 바이트를 덮어쓸 수 있었고 옵션 값은 레지스터 상위 절반에 무엇이 들어 있느냐에 좌우되었습니다. 이제 둘 다 플랫폼long폭을 쓰므로FPdfTsaFpc가 LP64 대상에서 안전합니다
Version 3.114.3
수정됨 (Fixed)
- PKCS#11 백엔드가 토큰 객체 레이블의 날바이트를 문자열에 곧장 복사했고, Delphi에서 이는 UTF-8 바이트를 UTF-16 코드 유닛 자리에 떨어뜨립니다. 그래서
TPdfPkcs11Options.CertificateLabel로 선택한 인증서는 끝내 매치되지 않고,EnumerateCertificates는 깨진LabelText를 보고했습니다. 이제 레이블은 표준이 정의한 UTF-8로 디코딩되고,C_Login에 넘기는 PIN은 호스트 코드페이지로 좁혀지는 대신 UTF-8로 인코딩되어 비 ASCII PIN도 토큰에 온전히 전달됩니다
Version 3.114.2
수정됨 (Fixed)
- macOS Keychain 서명기는 키가 RSASSA-PSS를 받아들이는지 판단할 때
SecKeyIsAlgorithmSupported에 엉뚱한 연산을 물었습니다: 질의가 sign 대신 decrypt 연산을 지목했기 때문에 답은 늘 no였고 모든 RSA 서명이 조용히 PKCS#1 v1.5로 폴백했습니다. 이제 PSS를 지원하는 키는TPadesSignerOptions.PaddingScheme이 요청한 대로 PSS로 서명하고, 연산 인자는 프레임워크가 선언한 폭으로 전달됩니다
Version 3.114.1
수정됨 (Fixed)
- 오른쪽에서 왼쪽(RTL) 텍스트에서 중첩된 괄호 쌍이 잘못된 방향으로 결정되었습니다. UAX #9 규칙 BD16은 여는 괄호가 나타난 순서대로 쌍을 처리하고, N0으로 결정된 쌍은 그 뒤에 열리는 쌍의 선행 강한 문맥이 됩니다. 그런데 쌍들이 닫는 괄호가 완성되는 순서로 처리되고 있었기 때문에 안쪽 쌍이 바깥쪽 쌍이 세운 문맥 대신 자기가 감싼 글자를 따라갈 수 있었습니다. 이제 중첩 괄호를 담은 괄호 문이 포함된 아랍어나 히브리어 문장 같은 텍스트도 읽는 사람이 기대하는 대로 배치됩니다
Version 3.114.0
추가 (Added)
FPdfCryptoSsl는 OpenSSL을 통해 PDF 서명과 타임스탬프 토큰을 검증하는데, 이로써 서명 검증의 마지막 플랫폼 공백이 메워집니다. 지금까지 Linux에는 CMS 검증 백엔드가 아예 없었습니다.ConfigureSslCmsVerifier가 이를 설치하고, libcrypto는 실행 시점에 이름으로 찾으므로 아무것도 링크할 필요가 없으며, 1.1 계열과 3.x 계열 모두 바인딩됩니다- 서명과 인증서 체인은 별도 패스로 평가되므로, 신뢰 앵커에 닿지 않는 체인 아래의 정상 서명은 깨진 서명이 아니라 서명은 유효하지만 신뢰가 무효라는 결과로 보고됩니다
ConfigureSslTrustAnchors는 DER 신뢰 앵커를 시스템 스토어에 추가하고,ConfigureSslCrls는 해지 확인이 참조할 CRL을 공급합니다. OpenSSL은 스스로 아무 CRL도 가져오지 않으므로 해지는 실제로 CRL이 있을 때만 확인된 것으로 간주되며, 아무것도 공급하지 않으면 확인되지 않은 체인을 통과시키는 대신 결과에 unsupported가 표시됩니다SslAvailable,SslMissingSymbols,SslLibraryPath,SslLibraryVersion,SslAbiLayout은 무엇이 바인딩되고 무엇이 그렇지 못했는지 보고하고,ConfigureSslLibraryPath는 플랫폼 기본 검색으로 라이브러리를 찾지 못할 때 백엔드가 특정 라이브러리를 가리키게 합니다
Version 3.113.0
추가 (Added)
TPdfKeychainCmsVerifier는 macOS에서CMSDecoder와 SecTrust를 통해 PDF 서명과 타임스탬프 토큰을 검증하므로, 서명 검증이 더 이상 Windows 전용이 아닙니다.ConfigureKeychainCmsVerifier로 설치하며, 같은 유닛이FPdfCryptoWin이 Windows를 맡는 방식 그대로 macOS 지원의 양쪽 절반을 모두 커버합니다- 해지 확인도 반영됩니다. 요청하면 기본 X.509 정책에 해지 정책이 추가되고, 온라인 조회를 끄면 평가가 캐시된 응답으로 제한됩니다. 진행 체크포인트는 서명, 체인, 온라인 조회, 해지 단계에서 Windows 백엔드가 보고하는 것과 정확히 같게 발생합니다
KeychainVerificationAvailable은 서명과 별도로 검증 지원 여부를 보고합니다. 둘은 서로 다른 프레임워크 심볼을 필요로 하며 한쪽만 있는 경우도 있기 때문입니다
Version 3.112.0
추가 (Added)
FPdfCryptoMac은 macOS Keychain 아이덴티티로 PAdES에 서명하는, Windows 인증서 저장소의 대응물입니다. 인증서와 개인 키는 Keychain에서 가져오고 서명은SecKeyCreateSignature로 만들어지므로 키가 시스템 키스토어를 벗어나지 않습니다.ConfigureKeychainSignerProvider로 설치하며, PKCS#11 토큰 백엔드라면 필요했을 애플리케이션 곁의 모듈 배포가 없습니다- 서명자는 인증서를 따릅니다. EC 키는 ECDSA로, RSA 키는 RSASSA-PSS로 서명하고, PSS를 쓸 수 없는 환경(오래된 macOS 또는 PSS를 받아들이지 않는 키)에서는 패딩이 PKCS#1 v1.5로 폴백하며, 출력되는 AlgorithmIdentifier는 PSS라고 주장하는 대신 실제 값을 알려줍니다
KeychainMissingSymbols는 해결에 실패한 프레임워크 심볼을 나열하므로, 백엔드를 사용할 수 없다고 보고하는 배포 환경에서 프레임워크 부재와 이 바인딩이 잘못 기억한 이름을 구분할 수 있습니다
Version 3.111.0
추가 (Added)
ConfigurePadesCmsVerifier는 PAdES 검증기가 사용하는 CMS 검증 백엔드를 설치하므로, 서명과 타임스탬프 검증이 더 이상 Windows에 묶이지 않습니다.IPdfCmsVerifier는 백엔드가 답하는 두 가지 연산(PDF 서명의 분리 검증, 타임스탬프 토큰의 첨부 검증)을 선언하고,PadesCmsVerificationAvailable은 백엔드가 하나라도 있는지 보고합니다
변경 (Changed)
- 검증 결과와 옵션 레코드가
TPdfCmsVerify*라는 이름으로FPdfCrypto로 옮겨갔습니다.TWinCmsVerify*이름은 별칭으로 남아 있어 기존 코드는 그대로 동작하고, 플러그인 방식의 백엔드도 Windows 것과 같은 타입을 사용해 대화합니다 - Windows 동작은 그대로입니다. 검증기를 설치하지 않으면 여전히 CryptoAPI를 사용하며 진행 체크포인트, 해지 옵션, 네이티브 오류 코드도 같습니다. 백엔드가 응답하지 않는 환경에서는 확인되지 않은 채 두지 않고 모든 판정이 unsupported를 보고합니다
Version 3.110.0
추가 (Added)
FPdfPkcs11은 PKCS#11 토큰 안에 머무는 키로 PAdES에 서명합니다.ConfigurePkcs11SignerProvider가 서명 백엔드로 설치하고, 모듈은 실행 시점에 경로로 로드되므로 링크되는 것은 없으며, 같은 코드가 Windows, Linux, macOS를 모두 처리합니다.IPdfPkcs11SignerProvider인터페이스가 선언하는 토큰 열거도 함께 구현되어 있습니다. 슬롯, 토큰, 각각이 담고 있는 인증서입니다- Windows가 아닌 환경의 서명도 일반적인 경우에는 호스트가 공급자를 제공할 필요가 없습니다. 토큰 모듈과
TPdfPkcs11Options면 충분합니다. RSA PKCS#1 v1.5, RSASSA-PSS, ECDSA가 모두 토큰을 통해 만들어집니다 FPdfSha1은 한 가지 목적, 즉TPadesSignerOptions가 담고 있는 지문(thumbprint)으로 인증서를 맞추기 위해서만 SHA-1을 추가합니다. Windows에서는 인증서 저장소 안에서 이 일이 해결됐지만, 토큰은 인증서 바이트를 돌려줄 뿐 매칭은 호출자에게 맡깁니다. 서명 다이제스트가 아니며 PAdES 스택은 여전히 전 과정을 SHA-256으로 서명합니다
변경 (Changed)
- 공개 키 알고리즘 OID를 읽고, 발급자와 일련번호를 추출하고, 원시 ECDSA 서명을 재포장하는 인증서 DER 헬퍼가 Windows 백엔드에서 모든 서명 백엔드가 접근할 수 있는
FPdfCms로 옮겨갔습니다
Version 3.109.0
변경 (Changed)
- 네이티브 라이브러리 로더가 더 이상 Windows 전용이 아닙니다.
LibraryName은 대상에 따라pdfium.dll,libpdfium.so,libpdfium.dylib를 기본값으로 갖고, V8 빌드도 대응하는 이름으로 찾으며, Free Pascal에서는 로드와 심볼 바인딩이 이식 가능한 로더를 거칩니다. Win32와 Win64 배포 레이아웃, 아키텍처 불일치 진단을 포함해 Windows 동작은 그대로입니다 - 다른 대상의 배포 디렉터리는 컴파일된 유닛이 이미 쓰는
<cpu>-<os>표기를 따르므로DLLs/x86_64-linux/libpdfium.so가Lib/FPC/x86_64-linux옆에 놓입니다. 시스템 디렉터리 폴백은 Windows 전용으로 남고, 다른 플랫폼에서는 로더 검색 경로가 이를 대신합니다
Version 3.108.0
추가 (Added)
TPdfHarfBuzzTextShaper는 Uniscribe가 없는 Free Pascal 대상에서 쌍방향 및 복잡 스크립트 텍스트를 셰이핑합니다.FPdfBidi로 임베딩 레벨을 구하고, 스크립트별로 런을 나누고, 각 런을 libharfbuzz로 셰이핑한 뒤 시각 순서로 배치합니다.ConfigureTextShaper로 설치하며, libharfbuzz는 실행 시점에 찾고 없으면HarfBuzzAvailable이 솔직하게 보고합니다- 이 셰이퍼는 폰트를 열거하지 않습니다. Uniscribe는 디바이스 컨텍스트에서 폰트 바이너리를 읽는데 이식 가능한 등가물이 없으므로, 호스트가 폰트 이름을 폰트 파일 바이트로 대응시키는
TPdfFontDataResolver를 넘기고 그 정책은 원래 있어야 할 곳에 남습니다
Version 3.107.0
추가 (Added)
FPdfBidi는 Unicode 쌍방향 알고리즘(UAX #9)을 순수 Pascal로 구현합니다.PdfResolveBidiLevels는 UTF-16 코드 유닛별 임베딩 레벨 하나를 돌려주고,PdfBidiVisualOrder는 L2 재정렬을 적용하며,PdfBidiClassOf는 코드 포인트의 Bidi_Class를 노출합니다. isolate 개시자와 BD16 괄호 쌍을 포함해 P2-P3, X1-X10, W1-W7, N0-N2, I1-I2, L1-L2 규칙을 커버합니다- 이 유닛은 컴파일러와 플랫폼에 중립적이어서 Uniscribe를 쓸 수 없는 환경에서도 쌍방향 텍스트를 배치할 수 있습니다. 셰이핑 엔진은 방향이 이미 알려진 런의 글리프를 구하는 역할이므로, 방향을 먼저 결정해야 하는 조각이 바로 이것입니다
Version 3.106.0
추가 (Added)
ConfigureTextShaper는 라이브러리 전체가 거치는 텍스트 셰이핑 백엔드를 설치하며ActiveTextShaper,ActiveTextShaperName,ClearTextShaper가 함께 제공됩니다.ShapePdfText와TPdf.AddShapedText모두 이제 Uniscribe 것을 직접 만드는 대신 설치된 셰이퍼를 사용하므로, 호스트는 자체 엔진을, 테스트는 결정적(deterministic) 엔진을 공급할 수 있습니다
변경 (Changed)
FPdfTextShaping이 Windows 이외 대상에서 컴파일됩니다. Uniscribe 백엔드는 이제 유일한 구현이 아니라 플랫폼 기본값이며 Windows 빌드에 한정됩니다. 사용 가능한 백엔드가 없는 환경에서는 셰이핑 진입점이 컴파일 실패 대신 그 사실을 보고합니다
Version 3.105.1
보안 (Security)
- 타임스탬프 응답이 이제 두 전송 계층 모두에서 4 MB로 한도가 정해집니다. 계속 전송하는 TSA가 수신 버퍼를 무한히 키워 서명 호출을 무한한 메모리 증가로 만들 수 있었습니다
Version 3.105.0
추가 (Added)
- RFC 3161 타임스탬핑이 Windows 이외의 Free Pascal 대상에서 동작합니다. 새 libcurl 백엔드가 TimeStampReq를 보내고 TimeStampResp를 읽으므로
PadesTsaAvailable이 True를 보고하고 PAdES B-T, B-LT, B-LTA도 그 환경에서 토큰을 받을 수 있습니다. libcurl은 실행 시점에 찾으며 빌드 시점 의존성이 아니고, 없으면 WinHttp 백엔드와 똑같이 unavailable을 보고합니다. Windows는 계속 WinHttp를 쓰며 영향을 받지 않습니다 - 그런 대상에서의 서명은 여전히 라이브러리가 소유하지 않은 키 재료를 필요로 합니다.
FPdfCryptoWin은 Windows 전용이므로IPadesSignerProvider(토큰 기반 키라면IPdfPkcs11SignerProvider)를ConfigurePadesSignerProvider로 공급하세요
Version 3.104.1
추가 (Added)
- XFA 검사 랩 샘플이 이제 Lazarus에서도 제공되므로, XFA 기능 프로브, 패킷 목록, 패킷 내보내기,
OnXfaRuntimeMissing폴백을 LCL 빌드에서 실행해 볼 수 있습니다
Version 3.104.0
변경 (Changed)
- 라이브러리가 Free Pascal 3.2에서 피할 수 있는 진단 메시지 없이 깨끗하게 컴파일됩니다. 내부 시간 측정은 폐기된 32비트 호출 대신
GetTickCount64에서 밀리초 틱을 읽고, 폐기된 SSE 컨트롤 워드 접근자는GetMXCSR과SetMXCSR로 교체되었으며, 콘텐츠 지문 오프셋 기준은 명시적으로 타입이 지정되어 컴파일 시점 범위 검사를 더 이상 건드리지 않고, 비트맵의 top-down 레이아웃 검사 시 스캔라인 주소는 부호 없는 포인터로 비교합니다
Version 3.103.1
수정됨 (Fixed)
- XMP로 옮겨지는 문서 메타데이터가 Free Pascal에서도 비 ASCII 문자를 유지합니다.
SaveAsPdfA,SaveAsPdfUa,SaveAsPdfE,SaveAsPdfX,SaveAsPdfR,SaveAsPdfVT에 전달되는 제목, 저자, 주제, 키워드, 작성자 이름이 바이트 단위 복사 대신 문자열 코드페이지를 거쳐 변환되므로, 호스트 프로그램이 UTF-8 코드페이지로 실행되지 않아도 메타데이터 패킷이 ISO 19005-1 6.7.2가 요구하는 유효한 UTF-8로 유지됩니다 - XFDF 내보내기, production 메타데이터 왕복, 신뢰 목록 XML 파싱도 같은 코드페이지 올바른 변환을 사용하므로,
TBytes와string사이를 오가는 텍스트가 더 이상 호스트 코드페이지에 좌우되지 않습니다
Version 3.103.0
추가 (Added)
TPdfEuropeanTrustedList는 인증된 유럽 신뢰 목록을 파싱하고, 체크섬이 검증된 캐시를 같은 인증자로 다시 불러오고, 호출자가 지정한 업데이트 소스를 받아들이고, 현재 신뢰 앵커를 노출하며, 요청한 검증 시점에 적격 서명 서비스를 평가합니다TPadesTrustValidationOptions.QualifiedTrustEvaluator는 검증된 각 서명자에게 오프라인 적격 신뢰 정책을 적용하며, PAdES 검증기에 네트워크 접근을 추가하지 않습니다
Version 3.102.0
추가 (Added)
BeginIncrementalSave와CommitIncrementalSave가 이제 AES-256으로 암호화된 문서에 인증된 리비전을 덧붙이면서 원본/Encrypt참조, 보안 파라미터, 정확한 객체 세대(generation), 기존 바이트를 보존합니다
변경 (Changed)
- 파일 커밋 오버로드는 이제 같은 디렉터리의 보조 파일을 내구적으로 플러시하고 엄격하게 다시 연 뒤 리비전 경계를 검증하고, 실패 시 세션을 롤백하면서 대상을 원자적으로 교체합니다
Version 3.101.0
변경 (Changed)
SaveAsRedacted는 이제 부분적으로 걸치는 텍스트, 사각형 경로, 축에 정렬된 이미지의 안전한 부분을 보존한 다음, 페이지, Form XObject, 패턴, 모양, 중첩 리소스 범위에서 더 이상 참조되지 않는 리소스 이름을 제거합니다
Version 3.100.0
변경 (Changed)
OptimizeImages는 이제 배율, 콘텐츠 클래스, 측정된 디테일, 호출자가 지정한 품질에 따라 box, bilinear, bicubic, Lanczos, bilevel 리샘플링 중 하나를 고르며, 알파를 고려한 필터링과 엄격한 작업 메모리 예산을 적용합니다
Version 3.99.0
추가 (Added)
GraftPdfAcroForm은 명시적인 페이지 매핑과 충돌 정책을 통해 계층적인 AcroForm 필드, 위젯, 모양, 계산 순서, 기본 리소스, 액션, 값을 가져옵니다TPdfCrossDocumentGraftMap은 소스 식별자 기준으로 가져온 간접 객체를 재사용하면서 순환 참조, 공유 참조, 정확한 소스 세대(generation), 트랜잭션 실패 의미론을 보존합니다
Version 3.98.0
추가 (Added)
TPdfOutlineEditor는 아웃라인 항목을 만들고, 이동하고, 삭제하고, 스타일을 입히고, 펼치고, 대상을 바꾸며, 페이지 계획 결과를 통해 명시적 대상을 재매핑하고, 독립적으로 검증된 증분 리비전을 덧붙입니다
Version 3.97.0
추가 (Added)
TPdfTreeEditor는 임의의 PDF NameTree와 NumberTree 구조를 읽고, 검증하고, 갱신하고, 균형을 잡고, 나누고, 병합하고, 직렬화하고, 증분 저장하면서 재사용 가능한 간접 참조와 원시 엔트리 값을 보존합니다
Version 3.96.0
추가 (Added)
TPdfParserResourceBudget는 사용자 지정 PDF 파서 전반에서 재귀, 토큰, 객체, 디코딩된 바이트, 확장 비율, 할당, 데드라인을 하나의 스레드 안전한 프로세스 정책으로 다루며, 불변의 연산별 스냅샷과 설정 가능한 기본값을 제공합니다
Version 3.95.0
변경 (Changed)
ValidatePdfX는 이제 유효한 xref를 가진 암호화되지 않은 문서에서 한도 있는 sparse 읽기로 활성 PDF/X 사전, 메타데이터, OutputIntent, 폰트, 금지 기능, 투명도, 색상 공간, 페이지 박스를 검증합니다
Version 3.94.0
변경 (Changed)
ValidatePdfR는 이제 유효한 xref를 가진 암호화되지 않은 문서에서 한도 있는 sparse 및 윈도우 읽기로 활성 PDF/R 사전, 페이지, 이미지 필터, 메타데이터, 푸터 마커를 검증합니다
Version 3.93.0
변경 (Changed)
ValidatePdfE는 이제 유효한 xref를 가진 문서에서 한도 있는 sparse 읽기로 활성 PDF/E 사전, 메타데이터, OutputIntent, 폼, 금지 기능을 검증합니다
Version 3.92.0
변경 (Changed)
ValidatePdfVT는 이제 유효한 xref를 가진 문서에서 한도 있는 sparse 읽기로 고급 recurring-XObject 범위, 가시성, 캡슐화, 중첩 Form 사용 분석을 수행합니다
Version 3.91.0
추가 (Added)
TPdfSparseDictionaryReader는 객체의 활성 세대(generation)를 찾아내고 호출자가 지정한 바이트 한도 안에서 직접 스트림을 디코딩할 수 있습니다
변경 (Changed)
ValidatePdfVT는 이제 정상 valid-xref 경로에서 PDF/VT 메타데이터, DPart, OutputIntent, Info, 페이지, 일반 사전 검사에 한도 있는 sparse 읽기를 사용합니다
Version 3.90.0
추가 (Added)
TPdfSparseDictionaryReader는 sparse xref와 객체 스트림 인덱스를 하나 열어 둔 채 반복되는 한도 있는 간접 객체 사전 읽기를 처리합니다
변경 (Changed)
InjectPdfVTMarkers는 이제 한도 있는 소스 읽기로 기존 PDF/VT DPart 계층을 검증하고 보존하며, 잘못된 형태의 계층은 계속 재구성 폴백을 거칩니다
Version 3.89.0
추가 (Added)
ReadPdfSparsePageDictionaries는 sparse 객체 인덱스를 통해 페이지 트리 순서대로 페이지 객체 식별자와 한도 있는 사전 바이트를 돌려줍니다
변경 (Changed)
InjectPdfVTMarkers는 저장된 PDF에 DPart 계층이 아직 없을 때 한도 있는 소스 읽기로 PDF/VT DPart 계층을 합성하고 마커 객체를 덧붙입니다
Version 3.88.0
추가 (Added)
ReadPdfSparseCatalogSubDict는 sparse 객체 인덱스를 통해 직접 또는 간접 카탈로그 하위 사전을 읽으며, PDF/UA 마커 주입이MarkInfo와ViewerPreferences에 사용합니다
변경 (Changed)
InjectPdfUaMarkers는 이제 sparse 조회로 카탈로그의MarkInfo와ViewerPreferences를 찾고, 정상 xref 경로에서 한도 있는 소스 읽기로 PDF/UA 리비전을 덧붙입니다
Version 3.87.0
추가 (Added)
AppendPdfSparseUpdate는 저장된 PDF 위에 sparse 리비전 하나를 스트리밍합니다. 소스 바이트는 그대로 두고, 호출자가 공급한 객체 본문은 기록된 오프셋에 배치하며,/Prev로 연결된 단일 증분 xref/trailer 블록을 덧붙입니다NormalizePageViewRect는 매핑된 페이지 공간의 두 모서리를 페이지로 잘라낸 가시 사각형으로 정규화하거나, 페이지의 어느 부분도 보이지 않는다고 보고합니다- PDF/E 마커 주입은 소스 문서에 Info 사전이 없을 때
/ISO_PDFEVersion을 담은 새 Info 객체를 합성합니다
변경 (Changed)
- PDF/E, PDF/X, PDF/R 마커 주입은 이제 sparse 조회로 카탈로그, Info, trailer를 찾고, 정상 xref 경로에서 한도 있는 소스 읽기로
AppendPdfSparseUpdate를 통해 리비전을 덧붙입니다 - 폼 채움
FFI_GetPageViewRect콜백은 이제 항상 페이지 박스 전체를 알려주는 대신 연결된TPdfView에서 실제로 보이는 페이지 부분을 보고하며, 헤드리스 문서에는 페이지 크기로 폴백합니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치기 메타데이터가 이제 Version 3.87.0을 일관되게 보고합니다
수정됨 (Fixed)
FPDFPath_GetBezierControlPoints바인딩이 노출한 이후 한 번도 채워지지 않았던 경로 세그먼트 제어점 문제를 고쳤습니다. 네이티브 익스포트는 세 엔트리짜리 각 베지어 곡선의 끝점 인덱스에만 답하므로, 이제 곡선당 한 번 조회가 일어나고 세 엔트리 모두 그 곡선의 제어점을 담습니다
Version 3.86.0
추가 (Added)
ReadPdfSparseRevisionInfo는 스트림 후처리기를 위해 한도 있는 최신 리비전, 카탈로그, 암호화, 문서 ID, 태그 구조 정보를 노출합니다ComposePdfSparseUpdateId는 전체 소스 PDF를 메모리에 올리지 않고 증분 업데이트의 문서 식별자를 보존하거나 도출합니다
변경 (Changed)
InjectPdfAMarkers는 이제 sparse 조회로 카탈로그와 trailer를 찾고, 큰 입력을 한도 있는 청크로 복사하며, 정상 xref 경로에서는 소스 크기의 바이트 배열을 할당하지 않고 PDF/A 리비전을 덧붙입니다- PDF/A 마커 주입은 classic 또는 xref-stream 출력 스타일, 카탈로그와 Info 세대(generation), trailer 식별자, 암호화 거부 동작, Level A 다운그레이드 규칙을 보존합니다
Version 3.85.0
추가 (Added)
SanitiseActiveContentPdfStream은 사용자 지정 한도 저장소나 디스크 기반 저장소를 위해 호출자가 소유한 정리(prune) 워크스페이스를 받아들입니다
변경 (Changed)
- 능동 콘텐츠 정제(sanitisation)는 이제 정상 xref 경로에서 PDF 전체를 하나의 바이트 배열로 읽어 들이는 대신 sparse 조회, 한도 있는 파서 윈도우, 고정 크기 범위 복사로 카탈로그와 trailer를 갱신합니다
TPdf.SaveAsSanitised는 자신의 정리 워크스페이스에SaveMemoryLimit과SaveTemporaryDirectory를 적용하고 spill 진단을 보고합니다
수정됨 (Fixed)
StripMetadata=True가 이제 카탈로그에/Metadata엔트리가 없어도 trailer의/Info참조를 제거합니다
Version 3.84.0
변경 (Changed)
TPdf.PdfVersion은 이제 전체 소스 PDF를 다시 파싱하는 대신FPDF_GetFileVersion으로 PDFium 파서 상태를 재사용합니다- 버전 조회는 최대 8바이트 PDF 헤더만 읽어, 잘못된 형태의 카탈로그 선언이 실효 버전을 낮추는 일을 막습니다
Version 3.83.0
변경 (Changed)
PageLabelledPdfStream은 이제 한도 있는 스트림 윈도우와 sparse 지연 객체 인덱스로 카탈로그를 찾고 갱신합니다- 페이지 레이블 출력은 정상 xref 경로에서 문서 전체 바이트 배열을 할당하는 대신 큰 소스 PDF를 고정 크기 범위로 복사합니다
Version 3.82.0
변경 (Changed)
ApplyDefaultOpenAction은 이제 sparse 지연 객체 인덱스로 classic, xref-stream, 하이브리드, 객체 스트림 리비전을 읽으며, 객체 번호가 매우 큰 문서도 처리합니다- 기본 open-action 처리는 PDF 전체를 하나의 바이트 배열로 로드하는 대신 고정 크기 윈도우와 한도 있는 범위 복사를 사용합니다
Version 3.81.0
추가 (Added)
PostProcessSavedPdf는 사용자 지정 메모리 상한과 디스크 기반 처리를 위해 호출자가 소유한 seekable 워크스페이스 세 개를 받아들입니다
변경 (Changed)
TPdf.SaveAs는 저장된 PDF 후처리 워크스페이스마다SaveMemoryLimit과SaveTemporaryDirectory를 적용하고, 임시 저장소로 넘긴(spill) 내용도 진단에 포함합니다- 네이티브 증분 xref-stream 복구는 파일 전체 바이트 배열과 반복되는 전체 파일 재할당 대신 고정 크기 꼬리 및 사전 윈도우와 한도 있는 범위 복사를 사용합니다
Version 3.80.0
추가 (Added)
ReadAttachmentMetadata는 첨부 파일 이름, 설명, MIME 서브타입, 디코딩된 크기, 읽기 가능 여부를 한도 있는 네이티브 열거 한 번으로 수집합니다ExtractAttachmentsToStreams는 파일별 및 전체 바이트 한도, 설정 가능한 쓰기 청크, 취소, 항목별 결과와 함께 배치를 호출자가 소유한 스트림에 기록합니다
변경 (Changed)
- 배치 추출은 배치 안의 모든 페이로드를 메모리에 올리는 대신 디코딩된 첨부 파일을 PDFium Delphi Component 메모리에 최대 하나만 유지합니다
Version 3.79.0
추가 (Added)
TPdfCacheGovernor,TPdf.CacheBudgetBytes, 유형별 사용량 조회, 텔레메트리가 하나의 스레드 안전한 전역 LRU 바이트 예산으로 유지되는 캐시 메모리를 조율합니다TPdfTileCache와 프로세스 전역 시스템 폰트 캐시도 호출자가 고른 조율자(governor)에 합류할 수 있으며, 비트맵과 폰트 바이트를 정확히 산정합니다
변경 (Changed)
- 파싱된 페이지 씬, 썸네일, 구조 데이터, 텍스트 스냅샷, 페이지 객체 스냅샷은 이제 기본 256 MiB
TPdf예산 안에서 경쟁하며, 기존 엔트리 수 한도는 그대로 유지됩니다 - 활성 페이지 씬은 렌더링이 끝날 때까지 고정(pinned)되며, 내부를 들여다볼 수 없는 네이티브 페이지 씬은 PDFium에 설정 가능한 전체 캐시 바이트 API가 없기 때문에 명시적인 추정 과금치를 사용합니다
Version 3.78.0
추가 (Added)
TPdfLayoutPagedPlan,TPdfLayoutDocument.BuildPagedPlan,TPdf.GeneratePagedLayout은 레이아웃 명령을 호출자가 고른 seekable 저장소로 스트리밍하고 한 번에 한 페이지씩 실체화합니다
변경 (Changed)
- 큰 규모의 생성 레이아웃은 명령을 임시 저장소로 넘길(spill) 수 있고, 설정 가능한 LRU 페이지 캐시를 유지하며, 연속적이지 않은 헤더와 푸터 세그먼트를 복원하고, 각 흐름 항목이 끝나면 감싼 텍스트를 해제합니다
Version 3.77.0
추가 (Added)
TPdfLayoutTable과 행, 셀, 표 옵션이 확정된 그리드 트랙, 캡션, 반복되는 헤더 행, 분할 가능한 본문 행, 링크, 설정 가능한 테두리를 갖춘 페이지 경계를 넘는 표를 추가합니다
변경 (Changed)
- 생성된 태그 표는 페이지를 넘어도 하나의 연속적인 Table / TR / TH / TD 구조를 유지하고, 행 병합(row-span) 그룹을 원자적으로 다루며, 데이터 셀을 헤더 ID에 자동으로 연결합니다
Version 3.76.0
추가 (Added)
TPdfLayoutConstraints와SetLastItemConstraints가 생성된 레이아웃에 keep-together, keep-with-next, 물리적 page-break-before / after, 설정 가능한 widow / orphan 줄 제어를 추가합니다
변경 (Changed)
BuildPlan은 감싼 텍스트 결과 하나를 페이지 나눔 예측과 명령 생성에 모두 재사용해, keep-with-next가 텍스트 측정을 반복하지 않도록 합니다
Version 3.75.0
추가 (Added)
TPdf.InspectPdfUaUnicodeCoverage는 직접 Unicode 매핑,ActualText치환, 매핑 오류, 빠진 Unicode 값, 미해결 소스 객체에 대해 한도 있는 객체 수준 증거를 보고합니다
변경 (Changed)
TPdf.ValidatePdfUa는 이제 Artifact와 생성된 문자를 제외하고 한 텍스트 객체의ActualText가 인접 콘텐츠를 가려버리지 않게 하는 단일 객체 범위 문자 검사를 재사용합니다
Version 3.74.0
변경 (Changed)
ValidatePdfUaPageContentTagging과TPdf.ValidatePdfUa는 이제 구조 트리 MCID가 Artifact 페이지 객체를 차지하고 있을 때pvuaiArtifactInStructureTree를 보고하며, 경로 기반 페이지 나눔 아티팩트도 포함됩니다- PDF/UA 페이지 콘텐츠 검사는 이제 태그 없는 실제 콘텐츠와 잘못된 Artifact 포함 관계를 모두 감지한 후에만 단락 평가(short-circuit)하므로, 완료한 검사를 반복하지 않으면서 페이지 경계를 넘는 커버리지를 유지합니다
Version 3.73.0
추가 (Added)
TPdf.InspectPdfUaLanguageCoverage는 자연 언어 구간에 대해 유효 언어, 선언 출처, MCID, 구조 인덱스, 텍스트 발췌를 포함한 한도 있는 페이지 객체 및 구조 문자열 증거를 보고합니다ResolvePdfUaEffectiveLanguage는 marked-content, 가장 가까운 구조 조상, 카탈로그 언어 선언을 명시적인 유효성 증거와 함께 판정합니다
변경 (Changed)
TPdf.ValidatePdfUa는 이제 아티팩트가 아닌 텍스트나 접근성 문자열에 유효한 실효/Lang선언이 없을 때pvuaiNaturalLanguageUncovered를 보고합니다
Version 3.72.0
추가 (Added)
TPdf.InspectPdfAMetadata는 명시적인 빈 값과 날짜 파싱 실패를 포함해, ISO 19005-1의 여덟 가지 Info-XMP 매핑 모두에 대해 타입이 있는 필드별 동등성 증거를 보고합니다TPdf.NormalizePdfAMetadata는 매핑된 XMP 속성 중 맞지 않는 것만 고치며, 관련 없는 네임스페이스와 기본이 아닌 언어 대안은 그대로 둡니다
변경 (Changed)
TPdf.ValidatePdfA는 이제 Unicode 비교나 시간대를 고려한 날짜 비교 후 PDFium이 디코딩한 Info 값이 올바른 타입의 XMP 값과 다를 때pvaiInfoXmpValueMismatch를 보고합니다
Version 3.71.0
추가 (Added)
InspectPdfVT2sStream은 모든 PDF/VT MIME 파트에 대해 OutputIntent 식별 정보, 임베디드 또는 MIME 프로파일 출처, ICC 해시와 헤더 정보, DPart 페이지 및 레코드 수를 포함한 인쇄 조건 증거를 돌려줍니다FPdfIccProfile은 MD5, SHA-256, 색상 공간, 버전, 디바이스 클래스, 프로파일 ID, 다국어 프로파일 설명 지원과 함께 한도 있는 ICC 헤더 및 태그 테이블 검사를 제공합니다
변경 (Changed)
- PDF/VT-2s 검증은 이제
DestOutputProfileRefURL 파일 스펙을 통해 앞선 ICC MIME 첨부를 찾아내고CheckSum,ICCVersion,ProfileCS,ProfileName, 디바이스 클래스, 허용되는 프로세스 색상 공간을 검증합니다 - 모든 PDF/VT 파트는 이제 하나의 권위 있는
GTS_PDFXOutputIntent, PDF/X 베이스에 맞는 임베디드 또는 외부 프로파일 패키징, 동일한 특성화된 인쇄 조건을 요구하며, PDF/X 전용 첨부는 계속 PDF/VT 비교 대상 밖에 둡니다 - 단일 파일 PDF/VT-2 검증은 이제
DestOutputProfileRef를 없는 것으로 보고하는 대신 외부 목적지 프로파일로 인식합니다
Version 3.70.0
변경 (Changed)
- PDF/VT 검증은 이제 근처나 중첩된 사전으로 힌트 요건을 충족시키는 대신 각 XObject에서
GTS_Scope,GTS_XID,GTS_Env,GTS_Encapsulated를 직접 검사합니다 Record범위는 이제 간접DPartRoot사전에서RecordLevel을 찾고,Stream범위는 PDF/VT-1 파일에서 거부됩니다- 디코딩된 페이지 및 Form XObject 콘텐츠 스트림은 이제 실효 상속 리소스와 DPart 계층을 통해
Do리소스 가시성,SingleUse발생 횟수, 수신자 레코드 소유 관계를 검증합니다 - 캡슐화된 XObject는 이제 불리언 shape, 권장 범위, Image
Intent, 고립된 투명도 그룹, 블렌딩 색상 공간, 직접 또는 중첩된 optional-content 의존 관계를 검증합니다
Version 3.69.0
변경 (Changed)
- PAdES 검증은 이제 파서가 고른 값은 받아들이는 대신 중복된
Contents,ByteRange,SubFilter,Filter,Type엔트리를 거부합니다 - 서명 탐색은 이제 스트림을 인식하는 선형 사전 검사를 사용하고, 이스케이프된 PDF 이름 토큰을 인식하며, 실제
ByteRange앞에 닫힌 중첩 사전이 놓여 있어도 방향이 틀어지지 않습니다 - 서명
ByteRange검증은 이제 제외된 구간이 직접 16진수Contents토큰과 정확히 일치할 것을 요구하면서도, 이후의 증분 리비전은 계속 허용합니다 - 서명 사전은 이제 이름 값을 갖는
Filter하나를 요구하고, 일관된Sig또는DocTimeStamp타입과 서브필터 조합을 강제합니다
Version 3.68.0
추가 (Added)
TPdf.BuildPadesEvidenceReport는 모든 서명에 대해 PDFium 서명 팩트, CMS 정책, 신뢰 및 타임스탬프 상태, 인증서 경로 해시, DSS/VRI 커버리지, 이후 리비전 판정을 서로 연관 지어 정리합니다TPadesEvidenceReport는 한도 있는 다중 서명 증거를 JSON이나 CSV로 내보내고, 소스, 서명, DSS, 리비전, 잘림(truncation) 텔레메트리를 보고합니다
변경 (Changed)
- PAdES 신뢰 검증은 이제 기본값으로 유지되는 오프라인 검증을 지키면서 서명자 인증서와 순서가 있는 Windows 인증서 경로의 SHA-256 식별 정보를 기록합니다
- 증거 생성은 단계마다 원본 PDF를 새 스트림으로 복사하는 대신, 확보해 둔 소스 바이트 캡처 하나를 준수성, 신뢰, DSS, 리비전 분석 전반에서 재사용합니다
Version 3.67.0
추가 (Added)
TPadesSignatureFieldOptions는 설정 가능한 서명 필드 이름, 필수 시드 값, 사유 및 법적 증명 목록, 허용할 서명자 인증서, 필드 잠금을 만듭니다- 로컬 및 원격 서명이 ISO 32000-1
FieldMDP와DocMDP변환을 갖춘 승인 서명이나 인증 서명을 만들 수 있습니다
변경 (Changed)
- 인증 서명은
/Perms /DocMDP로 새 서명을 등록하면서 기존 카탈로그 권한을 보존합니다
Version 3.66.0
추가 (Added)
RenderPageBandedToStream은 설정 가능한 밴드 높이, PNG 압축, 출력 바이트 한도로 PNG 또는 TIFF 출력을 호출자 스트림에 직접 기록합니다RenderPageBandedToEncoder는 순차적인 페이지 밴드를 호출자가 정의한 코덱에 넘기고, 밴드, 행, 메모리, 완료, 출력 텔레메트리를 돌려줍니다
수정됨 (Fixed)
RenderPageBanded는 이제 페이지 전체 렌더 기하를 유지하고 요청된 각 밴드를 잘라내며, 페이지 전체를 매 밴드에 맞춰 다시 축소하지 않습니다
Version 3.65.0
추가 (Added)
TPdfParallelRenderReport는 이제 소스 크기, 확보한 메모리의 피크, 저장소 백엔드, 공유 백킹 유형을 보고합니다
변경 (Changed)
RenderPagesParallel은 불변 메모리, 읽기 전용 파일 매핑,FPDF_LoadCustomDocument임의 접근으로 확보한 소스를 공유하며, 문서 전체 바이트 배열을 두 번째로 할당하지 않습니다- 임시 저장소로 넘긴(spill) 병렬 렌더 소스도
SaveMemoryLimit아래에 머물고, 프로세스가 직접 접근하는 메모리에 PDF 전체를 다시 로드할 필요가 없어졌습니다
Version 3.64.0
추가 (Added)
ImportImposed에 네이티브 가져오기, 고유 소스, 빈 슬롯, XObject 템플릿, 폼 객체, 콘텐츠 생성, 출력 페이지 수를 담은TPdfImpositionExecutionReport를 돌려주는 오버로드가 생겼습니다
변경 (Changed)
- 지오메트리를 지정하지 않는 조판(zero-geometry imposition)은 빈 페이지 삽입과 네이티브 N-up 합성에 앞서 순서가 정해진 모든 소스 페이지를
FPDF_ImportPagesByIndex호출 한 번으로 처리합니다 - 사용자 지정 지오메트리 조판은 고유한 소스 페이지마다 네이티브 XObject 템플릿 하나를 재사용하고, 소스 페이지를 바꾸지 않고 캐시된 페이지 메트릭을 읽으며, 정확한 크기의 계획 저장소를 미리 할당합니다
Version 3.63.0
추가 (Added)
BeginPageObjectEditTransaction,CommitPageObjectEditTransaction,RollbackPageObjectEditTransaction은 네이티브 페이지 객체 변경을 검증된 스냅샷 롤백이 있는 원자적 페이지 범위 배치로 묶습니다PageObjectEditTransactionStatus는 묶인 페이지, 변경(dirty) 상태, 성공한 변경 횟수, 콘텐츠 생성 횟수를 보고합니다
변경 (Changed)
- 커밋된 객체 배치는 이제 삽입, 제거, 변환, 속성, 마크, 주석 객체, 모양 변경 하나하나마다 호출하던 방식 대신
FPDFPage_GenerateContent를 한 번만 호출합니다 - 저장, 페이지 전환, 페이지 삭제, 중첩 편집 트랜잭션, 네이티브 삽입이나 주석 갱신 실패는 미룬 콘텐츠가 사라질 수 있기 전에 거부됩니다
Version 3.62.0
추가 (Added)
ReadPageObjectsSnapshot는 객체, 경로, 클립, 마크, 텍스트, 문자열, 데드라인 예산으로 호출자가 소유한 페이지 객체 팩트를 수집합니다PageObjectsSnapshot은 설정 가능한 용량과 점유, 히트, 미스 텔레메트리를 갖춘 리비전 인식 LRU 재사용을 제공합니다
변경 (Changed)
PageComplexity는 이제 네이티브 객체 열거, 투명도, 경로, 이미지 조회를 반복하는 대신 불변 페이지 객체 스냅샷을 재사용합니다
Version 3.61.0
추가 (Added)
TPdf는 이제 임베디드 및 렌더링된 미리보기를 위한 통합 썸네일 LRU를 노출하며, 설정 가능한 엔트리 및 바이트 상한과 히트, 미스, 축출, 점유, 리비전 텔레메트리를 함께 제공합니다RenderPageThumbnail은 회전, 렌더 옵션, 배경색,TPdfColorScheme을 받아들이면서 호출자 소유 비트맵 계약을 유지합니다
변경 (Changed)
- 반복되는 썸네일 추출과 렌더링은 리비전, 페이지, 소스, 크기, 회전, 플래그, 배경, 색 구성표 키로 네이티브 PDFium 결과를 재사용하며, 선택적인 임베디드 썸네일이 없다는 사실도 캐시합니다
TPdfThumbnailView는 표시 페이지 비트맵 캐시를 문서 썸네일 리비전과 동기화해, 편집 후에도 오래된 미리보기가 남지 않게 합니다
Version 3.60.0
추가 (Added)
ReadTextPageSnapshot은 명시적인 문자, 객체, 폰트 이름, 데드라인 예산으로 Unicode, UTF-16 매핑, 문자 기하와 스타일, 정규화된 텍스트 객체 메타데이터를 한 번에 수집합니다TextPageSnapshot은 용량, 개수, 히트, 미스 텔레메트리가 있는 설정 가능한 리비전 인식 LRU로 깊은 복사본을 호출자 소유로 제공합니다
변경 (Changed)
GetStructuredText와 물리 레이아웃GetTextInReadingOrder는 이제 같은 텍스트 스냅샷을 재사용하고 O(n log n) 기하 정렬을 적용합니다
수정됨 (Fixed)
- 작은 텍스트 및 구조 스냅샷 캐시는 이제 요청된 페이지 인덱스 아래에 새 데이터를 저장하면서 가장 오래된 페이지를 축출해, 페이지를 넘나드는 캐시 별칭(aliasing) 문제를 막습니다
Version 3.59.0
추가 (Added)
LifecycleActionPolicy는 PDF 문서 및 페이지 라이프사이클 액션의 자동 실행을 비활성, 명시적 호출 전용, 호환 모드 중에서 고릅니다ExecuteDocumentLifecycleAction은 문서 JavaScript, open, close, save, print 액션을 노출하고,ExecutePageLifecycleAction은PageNumber를 바꾸지 않고 페이지 open 및 close 액션을 실행합니다
변경 (Changed)
- 헤드리스 페이지 로드도 이제 뷰어가 주도하는 로드와 마찬가지로 자동 페이지 open 및 close 액션을 받으며, 임시 페이지는 렌더 잠금 아래에서 재사용되거나 해제됩니다
Version 3.58.0
추가 (Added)
ReadStructureElements와VisitStructureElements는 명시적인 깊이, 요소, 속성, 시간 예산과 상세한 완료 상태로 반복 방식의 태그 구조 순회를 제공합니다StructureElementsForPage는PageNumber를 바꾸지 않고 1 기반 페이지 스냅샷을 노출하며, 히트, 미스, 개수 텔레메트리가 있는 설정 가능한 리비전 인식 LRU 캐시가 뒤에서 받칩니다
변경 (Changed)
- 접근성, 리플로우, 검증, 뷰어 소비자는 이제 관련 문서나 페이지 편집이 무효화할 때까지 호출자가 소유한 구조 스냅샷을 재사용합니다
Version 3.57.0
추가 (Added)
- 완전한 네이티브 폼 호스트 콜백이 수명이 안전한 지연 페이지 핸들, 인터랙션 뷰 커서 라우팅, 값 변경 알림, 선택 텍스트 사각형, URI 이벤트, GoTo 대상 이벤트를 제공합니다
FormHostCallbacksComplete는 콜백 준비 상태를 보고하고,FormSelectionRects와ClearFormSelectionRects는 한도 있는 페이지 공간 선택 기하를 노출합니다
수정됨 (Fixed)
- XFA 현재 페이지 콜백이 이제 PDFium의 0 기반 페이지 인덱스와 컴포넌트의 1 기반
PageNumber사이를 올바르게 변환합니다 - AcroForm과 XFA URI 콜백은 이제 원시 URI 바이트를 보존하고, 외부 실행 전에 호스트의 명시적 승인을 요구합니다
Version 3.56.0
추가 (Added)
- 인덱스로 접근하는
PageMetrics스냅샷은 활성 페이지를 바꾸지 않고 페이지 크기, 회전, 레이블, 투명도, 다섯 가지 표준 페이지 박스를 노출합니다
변경 (Changed)
- 반복되는 페이지 메타데이터 읽기는 자동으로 무효화되는 네이티브 스냅샷 캐시를 재사용해, 썸네일, 프리플라이트, 문서 분석 워크로드에서 페이지 열기를 줄입니다
Version 3.55.0
추가 (Added)
- 경로 검사는 로드된 PDFium 빌드가
FPDFPath_GetBezierControlPoints를 제공할 때 정확한 3차 베지어 제어점을 노출하며, 오래된 DLL을 위한 선택적 기능 프로브도 함께 제공됩니다 FormFieldTypeAtPoint,TPdfView.FormFieldTypeAt, 인덱스로 접근하는FontFlags속성은 원시 핸들 없이 네이티브 폼과 폰트 팩트를 노출합니다TPdf.Signatures는 모든 네이티브 서명 콘텐츠, ByteRange, 서브필터, 사유, 시각, 권한을 호출자 소유 스냅샷 하나로 돌려줍니다
변경 (Changed)
- 폼 필드 존재 검사는 이제 주석 핸들을 열고 닫는 대신 네이티브 포인트 히트 테스트를 직접 사용합니다
수정됨 (Fixed)
- PDF/E-1 검증은 이제 일반 AcroForm 필드, 임베디드 파일, FileAttachment 주석을 허용하면서도, 간접 객체와 객체 스트림 값을 포함해 최상위 AcroForm의
/XFA와/NeedAppearances true를 정확하게 보고합니다
Version 3.54.0
추가 (Added)
FPdfProduction이 측정 기반 다중 코덱 이미지 선택, 색상 및 폰트 처리 백엔드, SVG 경로, 스타일 지정 대체 계획, 트랜잭션 XFA 패킷 업데이트, 바코드 벡터, Portfolio 모델, 안전한 RichMedia 추출을 추가합니다FPdfStandardsExecution이 측정 및 GeoPDF 변환, 트랜잭션 PDF/A 복구, PDF/UA-2 계획, 외부 multicolour 프로파일, 과거 DSS 및 VRI 증거, DPart 쿼리, 심층 PDF/E 팩트, 고정 메모리 PDF/R 스트립을 추가합니다TPdf.ImportImposed는 정확한 gutter, bleed, creep 지오메트리와 함께 네이티브 N-up 또는 페이지 XObject 경로를 통해 한도 있는 N-up 및 소책자 계획을 구성하고,TPdf.CompareWith는 의미, 지오메트리, 허용 오차 픽셀 차이를 보고합니다- PAdES 서명이 이제 플러그형 경로 검증기와 HSM 공급자, 서명 결합형 PDF MAC,
cms-algorithm-protection, 오프라인 서명 정책 문서를 지원합니다
변경 (Changed)
- 레이아웃 엔진이 한도 있는 HTML과 Markdown을 받아들이고 여러 단에 걸쳐 흐르며 고정, 자동, 비율 그리드 트랙을 해석합니다
- XFDF 왕복이 이제 다중 값 및 리치 텍스트 필드, 팝업, 동작, 대상, 모양 오버레이, 사용자 지정 네임스페이스, 명시적 존재 상태를 유지합니다
Version 3.53.0
추가 (Added)
ConfigurePdfLibrary가 첫 PDFium 로드 전에 변경 불가능한 네이티브 렌더러, 폰트, V8, Brotli, 사용자 폰트 경로, 샌드박스 구성을 제공합니다- 네이티브 구조 속성, 주석 관계, 주석 파일 첨부, 형식화된 사전 값, 포커스 정책, 링크 및 양식 z-order 쿼리, 기본 TTF 매핑 진단이 한도 있는 고수준 API를 통해 제공됩니다
TPdfView.ReplaceFormTextAndKeepSelection은 반복 편집에서 활성 선택을 유지하며 오른쪽 버튼 해제 이벤트가 이제 네이티브 양식 엔진에 전달됩니다
변경 (Changed)
- 결정론적 문서 시간이 고정 에포크와 함께 안정적인 UTC 달력 변환을 사용하므로 모든 호스트 시간대에서 같은 메타데이터가 생성됩니다
- 첨부 문자열 쓰기가 네이티브 결과를 검증하고 사전 키를 UTF-8로 인코딩합니다
Version 3.52.0
추가 (Added)
TPdf.GetImageObjectRenderedBitmap은 현재 행렬, 색상 공간, 마스크, 렌더링 상태가 적용된 이미지 객체의 렌더링 결과를 반환합니다TPdf.TextObjectGlyphWidth,TPdf.TextObjectFontSize,TPdf.SetTextObjectFontSize가 네이티브 글리프 측정과 정확한 텍스트 객체 폰트 크기 편집을 노출합니다TPdf.TransformPageObjectClipPath,TPdf.DetachFormObjectChild,TPdf.SharePageObjectMark,TPdf.IsAnnotationObjectSubtypeSupported가 정밀한 콘텐츠 객체 편집과 기능 점검을 추가합니다
Version 3.51.0
수정 (Fixed)
- 이전 릴리스 노트에서 소개되었지만 private 섹션에 선언되어
PDFium유닛 외부에서 호출할 수 없었던 여덟 개의TPdf멤버가 문서대로 이제 public입니다:LinkAtPoint,GetTextRenderMode,GetTextObjectRenderedBitmap,IsAnnotationSubtypeSupported,ChooseRenderFlags,AttachmentHasKey,GetAttachmentStringValue,SetAttachmentStringValue
변경 (Changed)
- 영어 참조 문서가 이제
TPdf와TPdfView의 모든 public 멤버를 다룹니다. 참조 페이지가 없던 88개 멤버에 페이지가 추가되었으며, 클래스 페이지, 탐색 인덱스, API 참조가 모두 나열합니다 - 이전에 공유 페이지를 가리키던 참조 페이지가 이제 해당 멤버 자체의 페이지로 연결되므로, 검색 결과가 검색한 API의 설명을 바로 엽니다
- API 참조가 public 시그니처에서 도달할 수 있는 열거형과 레코드를 문서화합니다. 로드 및 스트림 보고, 텍스트, 폰트, OCR 형식, 레이아웃 빌더 형식, PAdES 검증 형식, 배치 및 검증 형식, 병렬 렌더링 형식을 포함합니다
Version 3.50.0
추가 (Added)
- 이제 모든 GUI 데모가 빈 양식 대신 바로 사용할 수 있는 콘텐츠로 열립니다. 뷰어 및 랩 데모는 생성된 샘플 문서를 로드하고, 보고서 데모는 시작 시 완성된 보고서를 만들며, 프로세서 데모는 샘플 입력을 미리 생성하므로 핵심 동작을 한 번의 클릭으로 실행할 수 있습니다
MultiPageViewer,SplitView,FontProperties는 시작 시 메모리 내 샘플 문서를 생성합니다(6페이지 쇼케이스, 나란히 놓인 비교 문서 2개, 클릭하여 검사할 다중 글꼴 페이지)MergePDF,BatchExport,SplitPDF,ExtractText,PDFtoJpg,PrintPDF,PrintPreferences같은 프로세서 데모는 실행 파일 옆에 샘플 PDF를 미리 생성하고 입력 컨트롤을 미리 채우며, 기존 파일을 절대 덮어쓰지 않는 멱등 재생성을 제공합니다FormFill과ExtractImages는 데모 폴더에 포함된 샘플 파일을 자동으로 로드하고,ImageToPDF는 샘플 비트맵 2개를 생성하며,WatermarkStamp는 스탬프 샘플을 미리 만들고,XfdfLab은 텍스트 및 하이라이트 주석이 포함된 생성 문서로 열립니다
변경 (Changed)
CreatePDF는 이제 시작 시 대화 상자를 표시하지 않고 실행 파일 옆에Sample.pdf를 생성하므로, 데모가 열리는 즉시 문서가 존재합니다TPdf.AboutInfo와 설치 관리자 메타데이터가 이제 Version 3.50.0을 일관되게 보고합니다
Version 3.49.0
추가 (Added)
- 업데이트된 PDFium 바이너리의
FORM_GetTextDirection과FORM_SetTextDirection이 이제 바인딩되어, 동적 바인딩 계층이 PDFium 내보내기 전체 472개를 계속 완전히 포함합니다 TPdf.FocusedFormFieldTextDirection과TPdf.SetFocusedFormFieldTextDirection은 새TPdfFormTextDirection열거형(ftdUnknown,ftdAuto,ftdLTR,ftdRTL)을 통해 포커스된 위젯의 메모리 내 텍스트 방향을 노출하며, 방향 변경 후 페이지 장면을 다시 그리는TPdfView대응 항목도 제공합니다
변경 (Changed)
FPDF_LIBRARY_CONFIG는 이제PDF_ENABLE_BROTLI로 빌드된 바이너리를 위한 실험적m_BrotliEnabled필드와 함께 PDFium 버전 6 레이아웃을 반영합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 Version 3.49.0을 일관되게 보고합니다
Version 3.48.0
추가 (Added)
PDFViewer데모가 이제 시작 시 생성 API를 사용해 메모리에 6페이지 쇼케이스 문서를 만들므로, 뷰어가 렌더링된 콘텐츠와 함께 열리고 디스크에 샘플 파일이 필요 없습니다TPdfThumbnailView기반의 섬네일 패널이 추가되어 세 데모 포트 모두에서 북마크 트리 옆에 클릭 탐색 페이지 미리보기를 제공합니다- 뷰어 검색이 단일 결과 사각형 대신
HighlightSearchText를 통해 현재 페이지의 모든 일치 항목을 강조 표시하고, 상태 표시줄에 일치 개수를 보고합니다 - 원클릭
Night및2-Up도구 모음 버튼으로 야간 듀오톤 렌더링 모드와 두 페이지 펼침 보기 모드를 전환합니다
변경 (Changed)
- 뷰어의 텍스트 선택이 직접 작성한 선택 코드를 대신해 더블클릭 단어 선택, 드래그 선택, 클립보드 바로 가기를 갖춘 내장
TPdfView선택 엔진을 사용합니다 - 페이지 렌더링에 그림자와 부드러운 스크롤이 추가되어 현대적인 읽기 경험을 제공합니다
TPdf.AboutInfo와 설치 관리자 메타데이터가 이제 Version 3.48.0을 일관되게 보고합니다
Version 3.47.0
추가 (Added)
FPdfBenchmark이 구성 가능한 워밍업과 측정 패스, 페이지 및 픽셀 제한, 협조적 취소, 사례별 통과, 실패, 건너뜀 상태를 갖춘 크기가 제한된 PDF 코퍼스를 실행합니다TPdfBenchmarkReport는 입력 및 저장 바이트 크기, 로드 및 첫 페이지 지연 시간, 렌더링 처리량, 저장 및 다시 열기 시간, 샘플링된 최대 작업 집합, 의미론 및 픽셀 SHA-256 해시, 반복 실행 안정성, 예상 해시 게이트, 독립 재열기 동등성을 기록합니다- 벤치마크 보고서는 CI, 릴리스 검증, 장기 성능 추적을 위해 수식 주입에 안전한 CSV와 구조화된 JSON으로 내보냅니다
GetSkiaRenderCapabilities,RenderPageSkia,RenderPageSkiaByIndex는 파싱된 페이지 캐시 재사용과 하드 DLL 내보내기 요구 없이 선택적인 네이티브 Skia 페이지 및 폼 렌더링을 노출합니다- 버전 관리되고 기능 게이트된 인쇄 출력 ABI는 로드된 PDFium 모듈이 제공할 때 정확한 스팟 판 열거, 판 렌더링, 오버프린트 감지, 오버프린트 미리보기를 노출합니다
수정 (Fixed)
PDF_USE_SKIA없이 빌드된 PDFium이 실험적 Skia 내보내기가 없어 실패하는 대신 이제 정상적으로 로드됩니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.47.0을 보고합니다
Version 3.46.0
추가 (Added)
ValidatePdfR이 구성 가능한 검증 옵션을 통해 래스터 전용 페이지 콘텐츠, 스트립 지오메트리, 색상 모델, 실효 해상도, 압축 매개변수, 필수 메타데이터, 암호화된 PDF 2.0 프로파일을 검사합니다BuildPdfARepairPlan은 검증 증거를 안전 등급, 서명 영향 가드, JSON 출력을 갖춘 의존성 순서 복구 단계로 변환합니다BuildPdfXProductionPreflight는 이미지 페이로드를 디코딩하지 않고 페이지 상자, 내장 폰트, OutputIntent, 컬러런트, 투명도, 오버프린트, 분판, 이미지 해상도, 생산 준비 상태를 보고합니다- PDF/UA-2 구조 검증이 이제 연관 파일 소유권, 읽기 순서, 설명, 관계, 발견 가능성을 검사합니다
변경 (Changed)
TAssociateFile.Description,TPdf.ImageInfo,TPdf.PageComplexity가 연관 파일 및 생산 프리플라이트 워크플로에 필요한 메타데이터를 노출합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.46.0을 보고합니다
Version 3.45.0
추가 (Added)
TPdfXmpPacket은 알 수 없는 네임스페이스, 형식화된 RDF 컨테이너, URI 및 리소스 값, 한정자, 언어 대안, 패킷 래퍼, 보존된 패딩을 지원하는 네임스페이스 인식 XMP를 파싱, 편집, 복제, 직렬화합니다TPdf.ReadXmpPacket과SaveAsWithXmpPacket은 상위 수준 메타데이터 읽기와 원자적 출력을 노출하며, 서명된 문서 변경은 명시적 승인이 필요합니다
보안 (Security)
- 제한된 XML 리더는 DTD와 외부 엔티티를 거부하고 패킷 바이트, 중첩, 노드, 속성, 숫자 문자 참조에 상한을 둡니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.45.0을 보고합니다
Version 3.44.0
추가 (Added)
TPdfValidationRuleRegistry는 심각도, 의존성, 복구 안내, 증거, 기본 제공 또는 사용자 지정 서술어를 갖춘 프로파일 조항을 등록합니다TPdfValidationBudget과TPdfValidationExecutionContext는 규칙, 실패, 객체, 재귀, UTF-8 증거, 예약 메모리, 경과 시간, 빠른 실패, 협조적 취소에 상한을 둡니다ValidatePdfFilesParallel은 격리된 작업자 문서를 통해 파일을 검증하면서 입력 순서를 보존하고 문제 분포, 시간, 실패, 취소, 로드 오류를 집계합니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.44.0을 보고합니다
Version 3.43.0
추가 (Added)
TPdfStructureElement가 PDF/UA-2 의미론 검증에 필요한 네임스페이스, 네임스페이스 역할 매핑, 참조, 연관 파일, 주석, 위젯, 레이블, 모양 정보를 이제 전달합니다ValidatePdfUa2StructureElements와 전용 검증기들은pdfium.dll을 로드하지 않고 ISO/TS 32005 네임스페이스와 포함 관계, 제한된 표 그리드, 주석, 폼, Formula/MathML 연관, 연관 파일, 문서 루트, FENote, 목록, TOC 참조, 제목, 캡션을 검사합니다ClassifyPdfUaNamespace는 PDF 1.7, PDF 2.0, MathML, ARIA, DPUB, 사용자 지정, 누락 구조 네임스페이스를 식별합니다PdfUa2StructureHasIssue는 값으로 Pascal 집합을 반환하지 않고 C++Builder에서 안전한 단일 문제 질의를 제공합니다
변경 (Changed)
ValidatePdfUaStructureElements는 PDF/UA-1 규칙 경로를 보존하면서puc2에 대해 새 의미론 규칙 집합을 자동으로 적용합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.43.0을 보고합니다
Version 3.42.0
추가 (Added)
TPdfUaSaveOptions.PdfUa2는pdfuaid:part2,pdfuaid:rev2024, 실효 PDF 2.0 카탈로그 버전으로 PDF/UA-2 출력을 생성합니다ValidatePdfUa는puc2를 감지하고 누락된 개정 메타데이터, PDF 2.0이 아닌 파일, 이름 없는 선택적 콘텐츠 구성, 지원 중단 주석, 일반 H 제목을 보고합니다
변경 (Changed)
- PDF/UA 검증이 이제 PDF/UA-1과 PDF/UA-2 각각에 대해 프로파일별 탭 순서, XFA, 제목 규칙을 선택합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.42.0을 보고합니다
Version 3.41.0
추가 (Added)
SetPageObjectMarkParam은 기존 마크를 대체하지 않고 기존 마크된 콘텐츠 항목에 정수, 실수, 문자열 또는 blob 매개변수 하나를 추가하거나 교체합니다RemovePageObjectMarkParam은 마크 이름과 무관한 모든 속성을 보존하면서 선택한 속성 하나만 제거합니다
변경 (Changed)
- 정수가 아닌 마크된 콘텐츠 숫자가 이제 정수 스냅샷으로 잘리는 대신
pmpFloat로 왕복합니다 AddPageObjectMark중 매개변수 검증이 실패하면 부분적으로 생성된 네이티브 마크가 제거됩니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.41.0을 보고합니다
Version 3.40.0
추가 (Added)
ConfigureSystemFontProvider는 PDFium 시작 전에 애플리케이션 폰트 매퍼를 설치하고 누락되거나 대체된 문서 폰트에 대해 검증된 TrueType 또는 OpenType 바이트를 공급합니다TPdfSystemFontPolicy는 글꼴 대체, 네이티브 폴백, 폰트별 바이트 제한, 제한된 요청 캐싱을 제어합니다GetSystemFontProviderStatistics는 매핑, 캐시, 폴백, 거부, 데이터 테이블, 활성 핸들 활동을 보고합니다
변경 (Changed)
- 공급자 콜백은 콜백 실패를 네이티브 경계 안에 유지하면서 PDFium이 요청한 글꼴, 굵기, 스타일, 문자 집합, 피치를 노출합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.40.0을 보고합니다
Version 3.39.0
추가 (Added)
AddCidType2Text는 명시적인 글리프별 CID-to-GID 지오메트리와 CID-to-Unicode 매핑을 갖춘 호출자 제공 TrueType 데이터를 내장합니다TPdfCidFontOptions는 전체 내장, 폴백이 있는 선호 서브셋팅 또는 필수 서브셋팅을 선택하고 제한된 폰트, 글리프, Unicode 예산을 구성합니다TPdfCidFontReport는 서브셋 결정, 바이트 크기, 고유 글리프, 내장 상태, 예상 텍스트, 추출된 텍스트, 추출 무결성을 보고합니다
변경 (Changed)
- TrueType 서브셋팅은 요청된 글리프 식별자를 보존하고 안전하지 않은 출력을 거부하며, 매핑 또는 추출 검증이 실패하면 삽입된 모든 페이지 객체를 롤백합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.39.0을 보고합니다
Version 3.38.0
추가 (Added)
BuildReflowDocument는 선택한 페이지 범위에서 Tagged PDF 구조 또는 물리 레이아웃 추론으로부터 제한된 재사용 가능한 의미론 노드 트리를 만듭니다TPdfReflowDocument.ToHtml은 이스케이프된 반응형 제목, 단락, 목록, 그림, 캡션, 페이지 섹션, 헤더 및 span 의미론이 있는 표를 내보냅니다TPdfReflowOptions는 표 감지, 페이지 섹션, 지오메트리, CSS, 줄 바꿈, 페이지 범위, 취소, 리소스 예산을 제어합니다
변경 (Changed)
- 리플로우 중 표 콘텐츠는 겹치는 단락 블록을 대체하며, 성공, 실패, 취소 후에 활성 페이지 상태가 복원됩니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.38.0을 보고합니다
Version 3.37.0
추가 (Added)
ApplyOcrSearchLayer는 PDFium을 통해 선택한 페이지를 렌더링하고 제한된 하향식 BGRA 픽셀을 호출자 제공IPdfOcrProvider로 보냅니다TPdfOcrWord는 Unicode 텍스트, 신뢰도, 픽셀 공간 사변형을 전달하며, 이는 네이티브 페이지 지오메트리를 통해 보이지 않는 검색 가능 텍스트로 매핑됩니다TPdfOcrReport는 페이지별 완료, 기존 텍스트 건너뜀, 실패, 취소, 렌더링된 픽셀, 수락 또는 거부된 단어를 기록합니다
변경 (Changed)
- OCR 삽입은 원본 스캔 이미지 스트림을 보존하고 잘못되었거나 신뢰도가 낮은 결과를 걸러내며 페이지당 한 번 커밋하고 활성 페이지를 복원합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.37.0을 보고합니다
Version 3.36.0
추가 (Added)
ExtractTables는 네이티브 단어 지오메트리와 변환된 경로 괘선에서 괘선 기반 및 공백 정렬 표를 감지합니다TPdfTable은 행, 열, 병합 범위, 페이지 경계, 헤더 셀, 감지 모드, 신뢰도, 직접 CSV 또는 JSON 출력을 보고합니다ExtractDocumentTables는 공유 예산 아래에서 모든 페이지를 스캔하고 페이지 경계를 넘어 이어지는 일치하는 표를 표시합니다
변경 (Changed)
- 표 추출은 구성 가능한 단어, 괘선, 셀, 표 제한을 강제 적용하고 문서 수준 스캔 후 활성 페이지를 복원합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.36.0을 보고합니다
Version 3.35.0
추가 (Added)
GenerateTaggedLayout은 네이티브 마크된 콘텐츠, Document 구조 트리, ParentTree 및 IDTree 매핑, 문서 언어 메타데이터를 갖춘 새 의미론 레이아웃 문서를 생성합니다TPdfLayoutSemantics는 제목, 섹션, 목록, 그림, 캡션, 표, 헤더 연관, span, 대체 텍스트, 실제 텍스트, 언어, 요소 ID를 모델링합니다TPdfLayoutDocument.AddLink는 URI Link 주석을 내보내고 OBJR 및 StructParent 매핑을 통해 각 주석을 해당 Link 구조 요소와 연결합니다
변경 (Changed)
- 레이아웃 텍스트는 기본적으로 단락 의미론을 따르고, 헤더, 푸터, 괘선, 이미지, 재사용 가능 폼은 명시적으로 태그하지 않는 한 기본적으로 아티팩트가 됩니다
- 의미론 계획 검증은 문서 내보내기 전에 중복 ID, 누락된 부모, 순환, 잘못된 목록 또는 표 포함 관계, 대체 텍스트 없는 그림, 확인되지 않은 표 헤더 ID를 거부합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.35.0을 보고합니다
Version 3.34.0
추가 (Added)
TPdf.AddShapedText는 네이티브 시스템 셰이핑과 PDFium CID Type 2 폰트 API를 통해 RTL, bidi, 문맥형, 합자 글리프 런을 씁니다ShapePdfText와TPdfUniscribeTextShaper는 문서를 수정하지 않고 배치된 글리프 ID, 진행 폭, 오프셋, 소스 클러스터, 시각적 런 위치, bidi 수준을 노출합니다
변경 (Changed)
- 생성된 ToUnicode 맵은 셰이핑된 모든 글리프를 다루고,
ActualText는 규격을 준수하는 추출 및 접근성 소비자를 위해 원본 논리 Unicode 문자열을 저장합니다 - UTF-16 바이트 순서 표시가 있는 마크된 콘텐츠 문자열이 이제
PageObjectMarks를 통해 올바르게 디코딩됩니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.34.0을 보고합니다
Version 3.33.0
추가 (Added)
TPdfLayoutCachedNode는 서브클래스화된 레이아웃 콘텐츠를 처음 사용할 때 빌드하고AddCachedNode를 통해 반복되는 배율 조정 배치를 지원합니다TPdfLayoutPlan은 측정 캐시 적중, 미스, 캐시된 노드 배치, 재사용된 네이티브 XObject를 보고합니다
변경 (Changed)
BuildPlan은 전체 페이지 제약, 콘텐츠, 폰트, 스타일, 소스, 측정기 정체성이 일치하는 계획을 텍스트 측정을 반복하지 않고 재사용합니다GenerateLayout은 고유한 캐시된 노드마다 하나의 대상 바인딩 XObject로 변환하고 모든 배치에 대해 가벼운 Form 객체를 생성합니다TPdf.AboutInfo, 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.33.0을 보고합니다
Version 3.32.0
추가 (Added)
TPdfLayoutDocument는 줄 바꿈된 텍스트, 스페이서, 괘선, 이미지, 재사용 가능한 페이지 XObject, 명시적 페이지 나누기, 헤더, 푸터를 측정된 페이지 계획으로 빌드합니다GenerateLayout은 안정적인{page}및{pages}참조와 함께 네이티브 페이지 및 페이지 객체를 원자적으로 추가하기 전에 전체 레이아웃의 페이지 매김을 완료합니다
변경 (Changed)
TPdf.AboutInfo, 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.32.0을 보고합니다
Version 3.31.0
추가 (Added)
TPdfPagePlan빌더는 페이지 삭제, 이동, 삽입, 분할, 병합 연산을 적용하지 않고 기술합니다ValidatePagePlan은 정확한 이전-새 페이지 매핑을 반환하고 영향을 받는 북마크, 이름 있는 대상, 페이지 레이블, 폼 필드, 태그된 페이지, 가져온 기능, 서명을 조사합니다
보안 (Security)
- 연결이 끊긴 탐색 대상을 남기거나 명시적 승인 없이 서명된 콘텐츠를 변경하는 계획은 네이티브 페이지 연산이 실행되기 전에 거부됩니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.31.0을 보고합니다
Version 3.30.0
추가 (Added)
SaveRecoverySnapshot은 소스 핑거프린트와 검증된 문서 편집 저널을 포함하고 체크섬과 크기 상한이 적용된 복구 패키지를 씁니다RestoreRecoverySnapshot은 체크섬, 저널 체인, 소스 핑거프린트, 복구된 핑거프린트가 모두 일치할 때만 복구 패키지를 재생합니다EnableRecoveryAutosave는 변경된 커밋, 실행 취소, 다시 실행이 있을 때마다 소스 PDF를 다시 쓰지 않고 명시적 복구 파일을 원자적으로 새로 고칩니다
변경 (Changed)
InspectRecoverySnapshot은 패키지를 적용하지 않고 복구 소스, 핑거프린트, 항목 수, 위치, 제한된 저장소를 보고합니다ImportEditJournal과 복구 복원은 이제 서명된 PDF에 편집을 적용하기 전에 명시적인AllowSignedDocument승인이 필요합니다- 복구 패키지 저장소는 구성된 제한된 임의 접근 저장소와 큰 저널 및 크래시 안전 자동 저장 업데이트를 위한 동일 디렉터리 쓰기 통과 교체를 사용합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.30.0을 보고합니다
Version 3.29.0
추가 (Added)
BeginEditTransaction,CommitEditTransaction,RollbackEditTransaction은 임의의 네이티브 문서 편집을 원자적 트랜잭션으로 묶습니다UndoEdit과RedoEdit은 페이지, 객체, 주석, 첨부 파일, 메타데이터 변경 전반에 SHA-256 검증된 역방향 및 순방향 델타를 적용합니다ExportEditJournal과ImportEditJournal은 나중에 재생할 수 있도록 소스 핑거프린트와 다이제스트 체인 검증을 갖춘 제한된 휴대용 델타를 유지합니다
변경 (Changed)
- 트랜잭션 스냅샷은 재현 가능한 네이티브 출력을 사용하므로 일반적인 PDFium 저장에 비결정적 식별자나 타임스탬프가 있어도 변경되지 않은 커밋은 비어 있습니다
- 실패한 커밋과 잘못된 저널 재생은 이전에 로드 가능한 문서를 원자적으로 복원하고, 항목 수, 저장된 바이트, 스냅샷 크기는 호출자 구성 제한 아래에 머뭅니다
- 서명된 PDF는 문서 편집 트랜잭션이 시작되기 전에 명시적인
AllowSignedDocument승인이 필요합니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.29.0을 보고합니다
Version 3.28.0
추가 (Added)
TPdf.InspectOptionalContent은 OCG 레이어, 기본 및 대체 구성, View/Print/Export 사용 상태, 확대/축소 및 언어 메타데이터, 잠긴 레이어, 순서 배열, 라디오 그룹, OCMD 정책, 가시성 표현식, 실효 렌더링 상태를 열거합니다TPdf.SaveAsOptionalContentConfigured는 선택한 사용 및 구성에 대해 호출자가 선택한 레이어 상태로 엄격하게 검증된 사본을 씁니다
변경 (Changed)
- 레이어 상태 출력은 이제 구성
/ON및/OFF배열과 OCG Usage 상태 사전을 모두 갱신하므로 PDFium이 네이티브 렌더링 컨텍스트를 통해 요청된 가시성을 적용합니다 - 구성 쓰기는 알 수 없는 그룹, 잠긴 레이어 변경, 라디오 그룹 충돌, 암호화된 스테이징 파일, 명시적 승인 없는 서명된 파일을 거부하고, 선택한 결과를 결정적으로 유지하기 위해 기본적으로 자동 상태 규칙을 제거합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.28.0을 보고합니다
Version 3.27.0
추가 (Added)
TPdf.RenderPageByIndex는 활성 편집 페이지를 변경하거나 페이지 변경 이벤트를 발생시키지 않고 임의의 1 기반 페이지를 정확한 픽셀 크기로 렌더링합니다PageSceneCacheCapacity,PageSceneCacheCount,ClearPageSceneCache는 제한된 장면 캐시 제어와 진단을 노출합니다
변경 (Changed)
- 인덱스 기반 페이지 렌더링, 렌더링된 섬네일, 내장 섬네일 추출은 이제 기본적으로 8항목 LRU 캐시를 통해 파싱된 PDFium 페이지 상태를 재사용합니다
- 장면 항목은 페이지 활성화, 편집, 페이지 트리 변경, 폼 상태 콜백, 명시적 지우기, 문서 해체 시 무효화되며, 진행 중인 렌더링은 해제될 때까지 안전하게 유지됩니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.27.0을 보고합니다
Version 3.26.0
추가 (Added)
TPadesSignatureAlgorithmInfo은 각 CMS 서명자 다이제스트, 서명, 공개 키, 명명된 곡선 OID를 독립적으로 평가된 알고리즘 정책 상태와 함께 보고합니다InspectPadesSignatureAlgorithm과EvaluatePadesSignatureAlgorithm은 P-256, P-384, P-521, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1, Ed25519, Ed448 프로파일을 인식합니다
보안 (Security)
- PAdES 검증은 이제 타원 곡선 및 다이제스트 불일치, CMS 다이제스트와 어긋나는 ECDSA 서명 OID, 이름 없는 EC 매개변수, Ed25519 매개변수, 512비트가 아닌 Ed448 SHAKE256 출력 길이를 거부합니다
- 네이티브 CMS 검증이 암호학적 유효성의 원천으로 남고, 사용할 수 없는 알고리즘과 인식되지 않는 곡선은 잘못된 서명으로 취급되는 대신
pcsUnsupported로 보고됩니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.26.0을 보고합니다
Version 3.25.0
추가 (Added)
TPdf.ExportObjectGraph는 활성 클래식, xref-stream, object-stream 객체를 명시적 사전, 배열, 문자열, 이름, 스칼라 값, 간접 참조, 스트림 바이트 수, 선택적 SHA-256 스트림 다이제스트가 있는 형식화된 제한된 JSON으로 내보냅니다TPdf.SaveAsObjectGraphPatched는 형식화된 null, Boolean, 정수, 실수, 이름, 텍스트 문자열, 간접 참조 패치 값을 통해 스키마 검증된 최상위 사전 값을 설정하거나 제거합니다
보안 (Security)
- 객체 그래프 내보내기는 객체, 재귀, 문자열, 출력 바이트 예산을 강제하고, 패치는 전달 전에 모든 연산을 검증하며 연결이 끊긴 참조, 중복 연산, 암호화된 입력, 보호된 스트림 필터 또는 길이 변경, 명시적으로 승인되지 않은 서명된 문서를 거부합니다
- 객체 그래프 패치는 증분 리비전으로 스테이징되고, xref 검증을 위해 다시 구체화되며, PDFium을 통해 엄격하게 로드되고, 모든 검사가 성공한 후에만 복사되거나 원자적으로 이름이 변경됩니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.25.0을 보고합니다
Version 3.24.0
추가 (Added)
TPdf.ValidatePadesTrust는 발견 가능한 모든 분리 서명을 정확한 원본ByteRange에 대해 검증하고, signing-certificate-v2 바인딩과 현재 Windows 시스템 신뢰를 평가하며, 독립적인 서명, 체인, 폐기, 타임스탬프 상태를 보고합니다TPdf.ValidatePadesTrustAsync는 디스패치 전에 원본 로드된 소스를 스냅샷하고, 파싱, 암호화, 체인 빌드, AIA, OCSP, CRL, RFC 3161 타임스탬프 작업에 대해 단계적 진행률을 보고하며, 협조적 취소를 지원합니다TPadesTrustValidationOptions는 오프라인 또는 온라인 신뢰, 선택적 폐기 및 타임스탬프 검증, 제한된 URL 검색 시간 제한, 취소 토큰, 진행률 콜백을 선택합니다
보안 (Security)
- 서명 타임스탬프와 Document Time-stamp 토큰은 이제 일반 문서 서명과 별개로 SHA-256 메시지 임프린트, 첨부된 CMS 서명, TSA 체인, 선택적 폐기 상태를 검증합니다
- 신뢰 검증은 PDFium이 다시 저장한 사본을 절대 해시하지 않고, 기본적으로 오프라인 캐시 전용 인증서 검색을 사용하며, 사용할 수 없는 네이티브 신뢰나 폐기 증거를 유효한 것으로 취급하는 대신 지원되지 않음 또는 미확정 상태를 보고합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.24.0을 보고합니다
Version 3.23.0
추가 (Added)
TPdf.RenewPadesArchiveTimestamp과RenewPadesArchiveTimestampToStream은 기존 PAdES 서명 체인에 어떤 과거 바이트도 변경하지 않고 새 RFC 3161 Document Time-stamp를 추가합니다TPadesArchiveTimestampOptions는 TSA 접근, 논스, 예약된 토큰 용량, 선택적 전체 DSS 새로 고침을 제어하고,TPadesArchiveTimestampReport는 소스 및 결과 수준, 체인 길이, 바이트 길이, 반환된 타임스탬프 정체성을 기록합니다
수정 (Fixed)
- 새로 갱신된 PAdES B-LTA 출력은 ESIC ExtensionLevel 2를 선언하고, B-LT 검증은 Document Time-stamp가 있을 때만 Level 2를 요구합니다
보안 (Security)
- 갱신은 정확한 원본 로드 바이트와 요청된 DSS 업데이트를 해시하고, 암호화되었거나 불완전한 소스를 거부하며, 출력을 쓰기 전에 발견 가능한 B-LTA 결과를 검증하고, 교체 전에 파일 출력을 스테이징합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.23.0을 보고합니다
Version 3.22.0
추가 (Added)
TPdf.AnalyzeSignatureRevisions는 원본 증분 리비전 체인을 재구성하고 DocMDP 및 FieldMDP 권한과 대비해 분류된 서명별 객체 변경을 반환합니다TPadesRevisionAnalysisReport는 허용된 폼, 주석, 서명, 검증 자료 업데이트를 허용되지 않는 페이지 또는 문서 변경, 미해결 사례, 의심스러운 섀도 정의와 구분합니다
보안 (Security)
- 리비전 분석은 참조되지 않은 객체 정의, 서명 객체 재정의, 활성 콘텐츠, 잘못된 리비전 체인, 미해결 압축 객체를 감지하는 동시에 제한된 리비전, 객체, 변경 예산을 강제합니다
- 분석은 항상 PDFium이 다시 쓴 바이트가 아니라 원본 로드 파일, 메모리 버퍼, 사용자 지정 스트림 또는 완료된 점진적 소스를 사용합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.22.0을 보고합니다
Version 3.21.0
추가 (Added)
TPdf.PreparePadesRemoteSignature는 고정 폭 분리 서명 자리표시자를 만들고 SHA-256 문서 다이제스트, 정확한ByteRange, 예약 좌표, 준비된 PDF 핑거프린트를 포함하는 지속적 요청을 반환합니다TPdf.CompletePadesRemoteSignature는 지속된 요청과 반환된 CMS를 검증한 후 HSM, 클라우드 또는 중단된 서명 세션을 완료합니다TPdf.SavePadesRemoteSigningRequest과TPdf.LoadPadesRemoteSigningRequest는 프로세스와 머신 경계를 위한 안정적인 버전 관리 이진 세션 형식을 제공합니다
보안 (Security)
- 완료는 수정된 준비 PDF, 변경된
ByteRange좌표, 재사용된 비어 있지 않은 자리표시자, 과대한 CMS 값, 지원되지 않는 SignedData 형태, 누락된 signing-certificate-v2 속성, 준비된 문서와 일치하지 않는 CMS 메시지 다이제스트를 거부합니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.21.0을 보고합니다
Version 3.20.0
추가 (Added)
TPadesDssOptions.Vris는 서명마다 하나의 간접/Type /VRI사전을 쓰며, 패딩을 포함한 전체 디코딩된/Contents값의 대문자 SHA-1로 키가 지정됩니다TPadesDssVri는 검증된 인덱스를 통해 인증서, OCSP, CRL 자료를 선택하고, PAdES B-LT 및 B-LTA 서명은 이제 새 서명의 VRI를 자동으로 생성합니다
변경 (Changed)
- DSS 인증서, OCSP 응답, CRL은 콘텐츠 해시로 중복 제거되고 안정적인 첫 등장 순서, 정확한 바이트 충돌 검사, 대상 바이트가 쓰이기 전 VRI 참조 재매핑이 적용됩니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.20.0을 보고합니다
Version 3.19.0
추가 (Added)
TPdf.GetStructuredText는 현재 페이지를 재사용 가능한 블록, 줄, 스타일 지정된 span 레코드로 변환하면서 소스 문자 인덱스, Unicode 스칼라, 지오메트리, 폰트 이름, 크기, 굵기, 텍스트 각도를 보존합니다TPdfStructuredTextOptions는 콘텐츠 스트림 또는 물리 레이아웃 순서, 선택적 폰트 및 의미론 보강, 실패 폐쇄 최대 문자 예산을 선택합니다- Tagged PDF와 휴리스틱 읽기 가능 콘텐츠 조각은 블록을 구조 종류, 제목 수준, 언어, 소스, 구조 요소 정체성으로 보강하고, 일치하지 않는 Figure 대체 텍스트도 표현됩니다
변경 (Changed)
- 물리 레이아웃 추출은 이제 O(n log n) 문자 정렬, 기하급수적으로 늘어나는 줄 및 span 버퍼, 줄과 열 클러스터링, 버퍼링된 Unicode 생성, 인접한 널이 아닌 텍스트 객체 폰트 캐싱을 사용해 예측 가능한 큰 페이지 성능을 제공합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.19.0을 보고합니다
Version 3.18.0
보안 (Security)
TPdf.SaveAsRedacted는 격리된 문서 스냅샷에 모든/Redact사각형을 적용하고, 교차하는 각 최상위 페이지 객체를 제거하며, 불투명 대체 사각형을 칠하고, 로드된 문서는 변경하지 않습니다- 교정 출력은 교정 주석을 제거하고, 선택적으로 다른 교차 주석을 제거하며, 네이티브 내장 첨부 파일을 삭제하고, 카탈로그
/AF, 활성 콘텐츠, 폼, 메타데이터, 도달할 수 없는 이전 리비전 객체를 제거합니다 TPdfRedactionOptions는 대체 색상, 겹치는 주석 제거, 실패 폐쇄 페이지 객체 스캔 예산을 제어하고,TPdfRedactionReport는 모든 제거와 출력 지표를 기록합니다TPdfSanitiseOptions.StripAssociatedFiles는 이제 기본적으로 카탈로그 수준 연관 파일 참조를 제거합니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.18.0을 보고합니다
Version 3.17.0
추가 (Added)
TPdf.RenderPagesParallel은 1 기반 페이지 요청을 동시에 렌더링하며, 모든 작업자는 하나의 캡처된 문서 스냅샷에서 가져온 독립적으로 로드된 PDFium 모듈, 문서, 페이지 상태를 소유합니다TPdfParallelRenderOptions는 DPI, 작업자 수, 회전, 네이티브 렌더 플래그, 배경색, 페이지별 픽셀 제한, 집계 유지 출력 제한을 제어합니다TPdfParallelRenderReport는 요청 순서를 보존하고 페이지별 성공, 취소, 실패, 치수, 시간, 진단 세부 정보와 함께 호출자 소유의 하향식 BGRA 또는 RGBA 버퍼를 반환합니다- 점진적 작업자 렌더링은 네이티브 청크 사이에
IPdfCancellationToken을 폴링하고, 잘못된 요청과 예산 실패는 해당 결과에 격리됩니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.17.0을 보고합니다
Version 3.16.0
추가 (Added)
TPdfEncryptionRevision.erR7은/V 6,/R 7,/CFM /AESV4및 필수 PDF 2.0 개발자 확장으로 ISO/TS 32003 AES-256-GCM 출력을 추가합니다- 암호화되는 모든 문자열과 스트림은 고유한 96비트 IV, 길이가 변하지 않는 암호문, 128비트 인증 태그를 받으며,
EncryptMetadata = False는 메타데이터 스트림 바이트를 보존합니다 DecryptAesGcmDocumentBytes는 사용자 또는 소유자 비밀번호, 암호화된 권한, 선택적 독립형 PDF MAC 데이터, 모든 GCM 태그를 검증한 후 PDFium 호환 평문 바이트를 반환합니다- AESV4 출력은
TPdfEncryptOptions.EnableIntegrityProtection과 결합될 수 있어 객체별 GCM 인증과 전체 문서 ISO/TS 32004 PDF MAC 보호가 공존합니다 - 암호화는 이제 스트림 데이터 내부의 객체 모양 텍스트를 간접 객체로 해석하는 대신 유효한 클래식 크로스 레퍼런스 항목을 사용합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.16.0을 보고합니다
Version 3.15.0
추가 (Added)
TPdfEncryptOptions.EnableIntegrityProtection은 AES-256 Standard Security Handler 리비전 5 및 6 문서에 대해 ISO/TS 32004 독립형 PDF MAC 인증 코드를 씁니다TPdf.ValidatePdfMac은 정확한 원본 소스 바이트, 엄격한 EOF 커버링/ByteRange, CMSAuthenticatedData, 비밀번호 유도 파일 키, 인증된 속성, 래핑된 MAC 키, HMAC 값을 검증합니다FPdfHmac은 HMAC-SHA256과 HKDF-SHA256을 추가하고,FPdfAes는 RFC 3394 AES-256 Key Wrap과 인증된 래핑 해제 프리미티브를 추가합니다TPdfMacValidationResult는 진단 텍스트와 함께 유효함, 부재, 유효하지 않음, 지원되지 않음 인증 코드를 구분합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.15.0을 보고합니다
Version 3.14.0
추가 (Added)
TPdf.ValidatePades는 이제 Windows에서 서명된 속성과 서명 값을 포함하여 정확한 원본/ByteRange세그먼트에 대해 분리 CMS 서명을 검증합니다TPadesValidationResult는 집계 무결성 상태와 서명별 ByteRange, CMS,signing-certificate-v2, 시스템 신뢰, 폐기, 타임스탬프 상태를 노출하고, 지원되지 않거나 확인되지 않은 증거를 잘못된 서명과 혼동하지 않습니다- 서명자 인증서 바인딩은 SHA-256으로 검사되고, 인증서 체인은 캐시 전용 Windows 시스템 신뢰 평가를 사용하며, 네이티브 오류 코드는 진단을 위해 계속 사용할 수 있습니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.14.0을 보고합니다
Version 3.13.1
수정 (Fixed)
TPdf.ValidatePades는 이제 오프셋을 무효화하거나 서명 사전을 버릴 수 있는 PDFium 재저장 사본 대신 원본 파일, 버퍼링된 메모리 또는 사용자 지정 스트림 바이트를 검사합니다- PAdES
/ByteRange검사는 이제 유효한 증분 업데이트가 뒤따르는 이전 완전한 PDF 리비전을 포괄하는 서명을 수용하고, Document Time-stamp 범위도 검증합니다 TPadesValidationResult.SourceStatus는 원본 소스 검증을 사용할 수 없거나 불완전한 점진적 입력과 구분하고, 준수 서술어는 원본 바이트가 없는 결과를 거부합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.13.1을 보고합니다
Version 3.13.0
추가 (Added)
FPdfSha3은 ISO/TS 32001 및 관련 PDF 2.x 암호화 작업을 위해 의존성 없는 SHA3-256, SHA3-384, SHA3-512, SHAKE256 프리미티브를 제공합니다- 증분 컨텍스트는 임의로 분할된 입력을 흡수하고, SHAKE256은 반복된 squeeze 호출과 스펀지 레이트 경계를 넘는 출력을 지원합니다
- 원샷 바이트 배열과 소문자 16진수 도우미가 스트리밍 API를 보완하며, Delphi, C++Builder, Lazarus 전반에 명시적인 수명 주기와 크기 검증이 적용됩니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.13.0을 보고합니다
Version 3.12.0
추가 (Added)
TPdf.ImportFDF는 파일 또는 스트림에서 FDF 폼 데이터를 가져와 기존 위젯 필드 경로를 통해 파싱된 값을 적용합니다FdfImportFromStream과FdfImportFromFile은 직접 또는 간접 계층 필드, PDF 리터럴 및 16진수 문자열, PDFDocEncoding, Unicode 텍스트, 이름 값, 명시적 빈 값을 제한된 리소스 예산 아래에서 파싱합니다- FDF 내보내기는 이제 ASCII가 아닌 필드 이름과 값을 표준 준수 UTF-16BE 텍스트 문자열로 쓰고 소스 파일 이름을 안전하게 이스케이프합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.12.0을 보고합니다
Version 3.11.0
추가 (Added)
TPdf.DetectPageSkew는 현재 페이지를 낮은 DPI로 렌더링하고 어두운 픽셀을 후보 회전 각도에 투영해 기울기 각도를 감지하며, 행 합 분산(텍스트 줄 정렬)을 최대화하는 각도를 약 0.1도 정확도로 반환합니다TPdfSkewReport는 감지된 각도, 신뢰도, 샘플 치수를 노출합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.11.0을 보고합니다
Version 3.10.0
추가 (Added)
TPdf.GetTextInReadingOrder는FPDFText_GetCharBox와 위치 정렬 문자 추출을 통해 현재 페이지 텍스트를 원시 콘텐츠 스트림 순서 또는 물리 레이아웃 순서(위에서 아래, 왼쪽에서 오른쪽)로 추출하므로 다단 및 시각적으로 재배열된 텍스트가 자연스럽게 읽힙니다TPdfReadingOrder열거형은roContentOrder와roPhysicalLayout중에서 선택합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.10.0을 보고합니다
Version 3.09.0
추가 (Added)
TPdfImageOptimizeOptions.PreserveBilevel은OptimizeImages중 1비트 2값 이미지(ImageMask / 선화 스캔)를 건너뛰어 최근접 이웃 다운샘플링이 날카로운 가장자리를 훼손하지 않도록 합니다TPdfImageOptimizeOptions.MinDimension은 임계값보다 작은 이미지(주로 더 축소해도 이득이 없는 아이콘이나 장식 요소)를 건너뜁니다TPdfImageOptimizeOptions.Default는 권장 시작점(150 DPI 대상, 1.5 비율, 2값 보존, 최소 치수 8)을 제공합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.09.0을 보고합니다
Version 3.08.0
추가 (Added)
TPdfTileCache는 문서 리비전, 페이지, 확대/축소, 회전, 렌더 플래그, 장치 사각형으로 키가 지정된 렌더링된 페이지 타일의 제한된 LRU 캐시를 제공하므로 변경되지 않은 타일이 다시 그리기 때 다시 렌더링되지 않고 이전 저장의 오래된 타일이 자동으로 제거됩니다TTileKey는 정적Create팩토리와Equals비교자를 갖춘 복합 캐시 키를 노출합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.08.0을 보고합니다
Version 3.07.0
추가 (Added)
TPdf.GetAnnotationFontColor과TPdf.SetAnnotationFontColor는 이전에 바인딩만 되고 사용되지 않던FPDFAnnot_GetFontColor와FPDFAnnot_SetFontColor를 감싸, 주석 사전을 직접 만지지 않고 폼 필드 편집을 위한 위젯 텍스트 색상 읽기와 쓰기를 노출합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.07.0을 보고합니다
Version 3.06.0
추가 (Added)
TPdf.RenderPageBanded는 현재 페이지를 콜백을 통해 수평 밴드로 렌더링하므로 포스터와 엔지니어링 페이지를 전체 대상 비트맵을 한 번도 할당하지 않고 내보낼 수 있습니다 — 각 밴드는 요청된 밴드 높이의 새로 생성된TBitmap으로 렌더링되고 콜백이 반환된 후 해제됩니다TPdfBandCallback은 호출자가 밴드 렌더링을 조기에 취소할 수 있게 하는 Boolean 반환 값과 함께 밴드별 계약(밴드 인덱스, 상단 y 오프셋, 비트맵)을 노출합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.06.0을 보고합니다
Version 3.05.0
추가 (Added)
TPdf.RenderPageProgressiveWithColorScheme은FPDF_RenderPageBitmapWithColorScheme_Start을 통해 저시력 색 구성표로 네이티브 점진적 렌더 루프를 구동하며, 호출자가 접근성을 위해 경로 채우기/선과 텍스트 채우기/선 색상을 재정의하면서 취소 인식 Continue 루프를 유지할 수 있게 합니다TPdfColorScheme은 네 개의TColor재정의 필드를 노출하며, 모든 필드가clDefault일 때 PDFium 내장 색상에 위임하는Default를 제공합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.05.0을 보고합니다
Version 3.04.0
추가 (Added)
TPdf.ExportFDF는 폼 필드 값을 기존 XFDF 경로 옆에 FDF(ISO 32000-1 §12.7.11) 문서로 직렬화하며, 동일한TXfdfField데이터 모델을 재사용해 호출자가 필드를 한 번 수집하고 두 형식 중 하나로 내보낼 수 있습니다FPdfXfdf의FdfExportToStream과FdfExportToFile은 로드된TPdf와 별개로 필드 컬렉션을 구축하는 호출자를 위해 저수준 FDF 직렬 변환기를 노출합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.04.0을 보고합니다
Version 3.03.0
추가 (Added)
TPdf.SaveAsSanitised는 카탈로그에서 활성 콘텐츠(/OpenAction, 카탈로그/AA,/Names,/AcroForm,/Metadata)를 제거한 뒤 도달할 수 없는 객체를 정리해 고아가 된 JavaScript, 액션, 첨부 파일 본문이 파일 본문에서 사라지는 깨끗한 단일 리비전 사본을 씁니다TPdfSanitiseOptions는 벡터별 독립적인 제거 제어와 선택적 도달 가능성 정리 단계를 노출하고,TPdfSanitiseReport는 제거된 항목 수, 정리된 객체 수, 바이트 수, 오류를 기록합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.03.0을 보고합니다
Version 3.02.0
추가 (Added)
TPdf.SaveAsPageLabelled은 카탈로그/PageLabels번호 트리가 제공된 범위로 교체된 전체 PDF 사본을 쓰고, ISO 32000-1 §12.4.2에 따라 선택적 접두사 텍스트 문자열과 시작 번호를 갖춘 십진수, 대/소문자 로마 숫자, 대/소문자 문자 번호 매기기 스타일을 적용합니다TPdfPageLabelRange,TPdfPageLabelRanges,TPdfPageLabelStyle,TPdfPageLabelReport는 범위 모델, 스타일 열거형, 저장별 바이트/범위 수를 노출합니다- 기존 카탈로그
/PageLabels항목은 감지되어ReplaceExisting=True가 전달되지 않는 한 거부되며, 전달되면 새 범위 주입 전에 이전 항목이 제거됩니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.02.0을 보고합니다
Version 3.01.0
추가 (Added)
TPdf.FlattenPageRotation은 모든 페이지의 현재/Rotate를 콘텐츠 스트림, 페이지 상자, 주석 사각형에 구운 뒤/Rotate를 0으로 재설정합니다 —FPDFPageObj_TransformF+FPDFAnnot_GetRect/SetRect+FPDFPage_SetMediaBox/SetCropBox+FPDFPage_SetRotation을 감싸 회전 표시 힌트에 의존하지 않고 시각적 레이아웃을 보존합니다TPdfFlattenRotationOptions는 페이지별 주석 변환, 페이지 상자 교체, 자동 업데이트 제어를 노출하고,TPdfFlattenRotationReport는 처리, 건너뜀, 실패한 페이지 수와 변환된 총 객체 및 주석 수를 기록합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.01.0을 보고합니다
Version 3.00.0
추가 (Added)
TPdf.StampPagesFromPdf는 소스 페이지를 위치, 배율, 선택적 회전이 지정된 Form XObject 오버레이 또는 언더레이로 하나 이상의 대상 페이지에 스탬프하며, 명시적인 페이지 상자, 앵커, 여백, 배율, 회전, 혼합, z-order 정책과 함께CreateXObjectFromPage+FPDFPageObj_SetMatrix+FPDFPageObj_SetBlendMode+FPDFPage_InsertObjectAtIndex를 감쌉니다TPdfOverlayOptions과TPdfOverlayReport는 배치, 변환, 혼합, z-order 제어와 페이지별 스탬프, 실패, 건너뜀 수를 노출합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 3.00.0을 보고합니다
Version 2.99.0
추가 (Added)
TPdf.RefreshAppearance은 전체 페이지NeedAppearances재구성을 피하고FPDFAnnot_SetAP을 통해 단일 위젯의 모양 스트림을 선택적으로 재생성합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.99.0을 보고합니다
Version 2.98.0
추가 (Added)
TPdfView.MouseDown은 이제 오른쪽 버튼 이벤트를FORM_OnRButtonDown을 통해 네이티브 폼 채우기 엔진으로 라우팅해 오른쪽 클릭 시 컨텍스트 메뉴와 위젯 상호 작용을 가능하게 합니다- 경로 맵 항목 78(링크 주석 매핑), 82(위젯 표시), 83(구조 속성 모델)은 기존 인프라를 통해 이미 완료된 것으로 확인되었습니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.98.0을 보고합니다
Version 2.97.0
추가 (Added)
TPdf.SetDeterministicTime과TPdf.RestoreActualTime은 테스트와 재현 가능한 빌드가 지원되는 네이티브 콜백을 통해 고정된 생성, 수정, 현재 시간을 주입할 수 있게 합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.97.0을 보고합니다
Version 2.96.0
추가 (Added)
TPdf.GetWidgetAdditionalActionJavaScript는 어떤 스크립트도 실행하지 않고FPDFAnnot_GetFormAdditionalActionJavaScript를 통해 주어진 이벤트 트리거에 대한 위젯 추가 동작 JavaScript를 읽습니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.96.0을 보고합니다
Version 2.95.0
추가 (Added)
TPdf.GetObjectText는 정확한 콘텐츠 편집과 인코딩 진단을 위해FPDFTextObj_GetText를 통해 텍스트 페이지 객체의 Unicode 텍스트를 추출합니다TPdf.GetObjectsByType은 선택적 범주 출력을 위해 범주(텍스트, 경로, 이미지, 폼, 셰이딩)와 일치하는 모든 페이지 객체의 인덱스를 반환합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.95.0을 보고합니다
Version 2.94.0
추가 (Added)
TPdf.AttachmentHasKey,GetAttachmentStringValue,SetAttachmentStringValue는 내장 첨부 파일에서 사용자 지정 파일 사양 확장 값을 읽고, 쓰고, 탐색합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.94.0을 보고합니다
Version 2.93.0
추가 (Added)
TPdf.InsertObjectAtIndex는 항상 추가하는 대신FPDFPage_InsertObjectAtIndex를 통해 요청된 스택 위치에 페이지 객체를 삽입합니다TPdf.UpdateAnnotationObject는FPDFAnnot_UpdateObject를 통해 편집된 주석 모양 객체를 커밋해 주석 소유 페이지 객체의 변경 사항이 안정적으로 유지되게 합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.93.0을 보고합니다
Version 2.92.0
추가 (Added)
TPdf.InsertClipPath은 사각형 클립 경로를 만들어 네이티브FPDF_CreateClipPath와FPDFPage_InsertClipPath경로를 통해 현재 페이지에 삽입하며, 기존PageObjectClipPath검사기를 보완합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.92.0을 보고합니다
Version 2.91.0
추가 (Added)
TPdf.GetPageComplexity는 현재 페이지를 스캔하여 렌더링 계획을 위해 이미지, 경로, 텍스트 객체 수와 총 경로 세그먼트, 총 이미지 픽셀, 투명도 존재 여부를 보고합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.91.0을 보고합니다
Version 2.90.0
추가 (Added)
TPdf.IsAnnotationSubtypeSupported은 편집 전에 로드된 PDFium DLL이 지원하는 주석 하위 유형을 물어봅니다TPdf.ChooseRenderFlags는 적응형 이미지 서브샘플링을 위해 최종 배율과 대상 크기에서 네이티브 렌더 플래그(하프톤, 제한된 이미지 캐시)를 선택합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.90.0을 보고합니다
Version 2.89.0
추가 (Added)
TPdf.GetTextRenderMode는 작성 진단을 위해 텍스트 페이지 객체의 네이티브 텍스트 렌더링 모드(채우기, 선, 클립)를 노출합니다TPdf.GetTextObjectRenderedBitmap은 네이티브FPDFTextObj_GetRenderedBitmap경로를 통해 단일 텍스트 객체를 격리된 비트맵으로 렌더링합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.89.0을 보고합니다
Version 2.88.0
추가 (Added)
TPdf.GetThumbnail은 이제 페이지에 내장 섬네일이 없을 때 대체 렌더링으로 폴백하여 내장 섬네일 우선 기본 설정을 구현합니다TPdf.LinkAtPoint는 사각형 전용 스캔 대신FPDFLink_GetLinkAtPoint를 사용해 페이지 공간 좌표에 네이티브 링크가 존재하는지 반환합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.88.0을 보고합니다
Version 2.87.0
추가 (Added)
TPdf.AuditActiveContent는 어떤 스크립트나 동작도 실행하지 않고 JavaScript 동작 수, 내장 파일 수, 서명 수, XFA 폼 유형, 문서 권한의TPdfActiveContentAudit스냅샷을 반환합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.87.0을 보고합니다
Version 2.86.0
추가 (Added)
TPdf.GetFeatureInventory는 모든 페이지를 한 번 스캔하여 첨부 파일, 서명, 폼 유형, 권한, PDF 버전 정보와 함께 텍스트, 경로, 이미지, 폼 XObject, 셰이딩 객체 수의 통합 레코드를 반환합니다TPdfFeatureInventory는 이전에 별도의 속성 호출이 필요했던 문서 전체 정보를 단일 스냅샷으로 집계합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.86.0을 보고합니다
Version 2.85.0
추가 (Added)
TPdf.SaveAsReproducible는 동일한 메모리 내 상태의 두 번 저장이 바이트 동일한 출력을 생성하도록 문서를 다시 씁니다- 비결정적
/Info타임스탬프(/CreationDate,/ModDate)는 제거되고 소스/ID(벽시계 의존 바이트에서 유도됨)는 생략되며, 객체 순서와 세대는 안정적으로 유지됩니다 TPdfReproducibleReport는 유지되고 제거된 객체 수와 제거된 타임스탬프 항목 수를 보고합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.85.0을 보고합니다
Version 2.84.0
추가 (Added)
TPdf.SaveAsInlineImagesExternalised는 모든BI/ID/EI인라인 이미지를 재사용 가능한 이미지 XObject로 추출하고 인라인 블록을/ImN Do연산자로 교체해 문서를 다시 씁니다- 인라인 이미지 사전 축약어(
/W,/H,/BPC,/CS,/F, 색 공간 값, 필터 값)는 전체 이미지 XObject 이름으로 확장되어 추출된 객체가 표준을 준수합니다 - 페이지
/Resources /XObject사전은 새 XObject 참조로 갱신되고 다시 쓰인 콘텐츠 스트림은 Flate 압축됩니다 TPdfInlineImageExternaliseReport는 외부화, 건너뜀, 실패 수와 생성된 XObject 수를 보고합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.84.0을 보고합니다
Version 2.83.0
추가 (Added)
TPdf.SaveAsFlateRecompressed는 문서를 다시 쓰고 적합한FlateDecode스트림을 최대 압축으로 재인코딩하며, 측정된 바이트 절감이 호출자 임계값을 넘을 때만 스트림을 교체합니다TPdfFlateRecompressOptions는 최소 절감 바이트와 최소 절감 비율을 선택해 이미 최적인 스트림은 그대로 둡니다TPdfFlateRecompressReport는 원본 및 재압축 스트림 바이트 총계와 함께 재압축, 건너뜀, 실패한 스트림 수를 보고합니다- 객체 번호와 세대는 안정적으로 유지되고 재압축된 스트림 페이로드와 직접
/Length값만 변경되므로 남아 있는 모든 크로스 레퍼런스가 유효합니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.83.0을 보고합니다
Version 2.82.0
추가 (Added)
TPdf.OptimizeImages는 모든 페이지 이미지 객체를 순회하며 실효 배치 DPI가 호출자 선택 대상을 초과하는 이미지를 다운샘플링한 뒤 각 변경된 페이지를 네이티브 콘텐츠 생성기를 통해 커밋합니다TPdfImageOptimizeOptions는 대상 DPI와 최소 비율을 선택해 실제로 오버샘플링된 이미지만 재인코딩됩니다TPdfImageOptimizeReport는 구조화된 실패 메시지와 함께 최적화, 건너뜀, 실패한 이미지 수를 보고합니다- 다운샘플링은 네이티브 PDFium 비트맵 버퍼에서 최근접 이웃 패스를 사용해 소스 형식, 스트라이드, 알파 채널을 보존하고,
FPDFImageObj_SetBitmap이 결과를 재인코딩합니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.82.0을 보고합니다
Version 2.81.0
추가 (Added)
TPdf.SaveAsDeduplicated는 호환되는 폰트, 이미지, 폼 XObject를 하나의 공유 대표 객체로 통합하는 깨끗한 단일 리비전으로 문서를 다시 씁니다- 재귀 콘텐츠 핑거프린트는 각 리소스 사전과 도달 가능한 전체 하위 그래프, 원시 스트림 페이로드를 결합하므로 전체 콘텐츠가 동일할 때만 중복이 병합됩니다
- 병합으로 사라진 중복으로의 모든 크로스 레퍼런스는 남아 있는 대표 객체로 다시 쓰이고 재구축된 클래식 크로스 레퍼런스 테이블은 객체 번호를 안정적으로 유지합니다
TPdfDedupReport는 유지 및 제거된 객체 수와 범주별 병합된 폰트, 이미지, 폼 XObject 수를 보고합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.81.0을 보고합니다
Version 2.80.0
추가 (Added)
TPdf.SaveAsReachable은 카탈로그와 트레일러 /Info 사전에서 도달 가능한 간접 객체만 유지하는 깨끗한 단일 리비전으로 문서를 다시 씁니다TPdfPruneReport는 유지 및 제거된 간접 객체 수를 소스 및 출력 바이트 크기와 함께 보고하고, 암호화되거나 잘못된 입력에 대한 구조화된 실패 이유를 제공합니다- 증분 업데이트, 페이지 병합 또는 복구된 저장이 남긴 도달할 수 없는 고아 객체가 제거되고, 재구축된 클래식 크로스 레퍼런스와 트레일러는
/Root,/Info,/ID를 번호 재부여 없이 보존합니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.80.0을 보고합니다
Version 2.79.0
추가 (Added)
TPdf.CreateDocumentSearch는 전체 문서 텍스트 인덱스를 구축하지 않고 한 번에 하나의 일치 항목을 반환하는 정방향 또는 역방향 문서 전체 검색을 만듭니다TPdfDocumentSearchResult는 모든 결과에 대해 1 기반 페이지, 문자 범위, 일치된 텍스트, 페이지 공간 사각형을 보고합니다- 검색 세션은
IPdfCancellationToken을 받아들이고 현재 PDFium 페이지 및 텍스트 핸들만 유지하며, 문서가 닫히면 안전하게 종료됩니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.79.0을 보고합니다
Version 2.78.0
변경 (Changed)
TPdfRangeRequestScheduler은 이제 겹치는 우선순위가 낮은 전송을 선점해 페이지에 중요한 PDFium 힌트가 백그라운드 다운로드 뒤에서 대기하지 않습니다- 외부에서 사용할 수 있는 스파스 바이트는 중복 활성 전송을 취소하고, 대체되거나 중복된 전송 콜백은 오래된 커버리지를 게시하지 않고 False를 반환합니다
- 우선순위 승격은 독립적인 재시도 이력을 보존하고, 전송 선점은 영향받지 않는 범위 꼬리의 재시도 예산을 더 이상 소모하지 않습니다
TPdfRangeRequestStatistics.SupersededRequestCount는 우선순위가 높은 힌트나 외부 제공 커버리지로 대체된 전송 작업을 보고합니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.78.0을 보고합니다
Version 2.77.0
추가 (Added)
TPdf.SaveAsNormalizedContent는 구문 정규화된 페이지 콘텐츠를 스트림 또는 원자적으로 교체된 파일에 쓰고 정규화, 건너뜀, 병합된 페이지 수를 보고합니다NormalizePdfContentSequence는 디코딩된 콘텐츠 스트림 시퀀스를 위해 제한된 독립형 토큰 정규화를 제공합니다
변경 (Changed)
- 페이지
/Contents배열은 이제 문자열, 이름, 인라인 이미지 페이로드, 알 수 없는 연산자, 스트림 간 그래픽 상태를 보존하면서 하나의 스트림으로 병합될 수 있습니다 - 잘못된 토큰, 불균형 상태 범위, 지원되지 않는 필터, 암호화된 입력, 서명된 문서 재작성에는 명시적 정책과 구조화된 상태 보고가 있습니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.77.0을 보고합니다
Version 2.76.0
추가 (Added)
TPdfStreamInspector는 임의의 물리적 PDF 스트림 객체를 조사하고 객체 오프셋, 원시 길이, 필터 체인, DecodeParms, 외부 파일 표시자, 암호화 상태, 네이티브 이미지 또는 첨부 경로를 보고합니다CopyRawData는 완전히 인코딩된 페이로드나 검증된 바이트 창을 복사하고,DecodeData는 선언된 순서대로 ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF 8비트, PNG 예측기를 적용합니다TPdfStreamInspectOptions는 소스, 원시, 디코딩된, 사전, 스트림 수, 확장 비율 리소스에 상한을 두고, 제한, 잘못된 데이터, 지원되지 않는 코덱, 암호화, 쓰기 실패에 대한 구조화된 보고서를 제공합니다
변경 (Changed)
- 스트림 길이 확인은 이제 직접 및 간접
/Length값에 대해 정확한 범위를 노출하며, 길이가 0인 스트림과 리터럴endstream시퀀스를 포함하는 페이로드도 다룹니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.76.0을 보고합니다
Version 2.75.0
추가 (Added)
TPdfLoadOptions는 파일, 메모리, 바이트 범위, 사용자 지정 스트림 로딩에 호환, 엄격, 복구 정책을 추가합니다TPdfLoadReport는 클래식, 하이브리드, xref-stream 문서에 대해 네이티브 복구 경로, xref 유효성, 손상된 오프셋, 항목 충돌, 리비전 수, 감사 예산, 구조화된 문제를 보고합니다TPdf.SaveAsRepaired는 전체 단일 리비전 사본을 만들고 전달하기 전에 독립적으로 엄격 로드한 뒤 검증된 스트림을 제공하거나 대상 파일을 원자적으로 교체합니다
변경 (Changed)
- 기존 로드 오버로드는 호환 동작을 유지하고 이제
LastLoadReport를 통해 네이티브 xref 유효성과 복구 상태를 게시합니다 - 엄격 로딩은 네이티브 xref 재구축이 필요했거나 구조 감사에 실패한 문서를 거부하고, 서명된 복구 출력은 명시적인 호출자 승인이 필요합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.75.0을 보고합니다
Version 2.74.0
추가 (Added)
TPdf.MergeFiles는 소스별 페이지 범위와 비밀번호를 갖춘 파일 기반 소스 목록을 병합하면서 최대 하나의 소스 문서만 열어 둡니다TPdfBatchMergeOptions는 중지 또는 건너뛰기 오류 처리, 소스 범위 또는 청크 가져오기, 폼 및 아웃라인 정책, 삽입 제어, 진행률 콜백, 취소, 뷰어 기본 설정 복사, 롤백 제어를 추가합니다TPdfBatchMergeReport는 커밋 및 롤백된 페이지, 소스 결과, 네이티브 가져오기 호출, 가장 큰 배치, 최대 열린 소스, 정책 감지, 문제, 최종 상태를 보고합니다
변경 (Changed)
- 기본 배치 경로는 소스당 하나의 네이티브 페이지 가져오기를 수행해 PDFium이 해당 소스에서 복제된 객체를 재사용하게 하고, 다음 파일을 열기 전에 소스를 닫습니다
- 청크 모드는 더 세밀한 취소 지점과 더 작은 네이티브 배치를 제공하고, 실패한 부분 소스와 중지 또는 취소 결과는 연산이 삽입한 모든 페이지를 제거할 수 있습니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.74.0을 보고합니다
Version 2.73.0
추가 (Added)
TPdfRandomAccessStore는 스레드 안전 순차 및 위치 지정 I/O를 제공하고, 작은 콘텐츠를 제한된 메모리에 유지하며, 호출자가 선택한 상한에서 개인 임시 저장소로 한 번 스플합니다TPdf.SaveMemoryLimit과SaveTemporaryDirectory는 저장 스테이징을 구성하고,LastSaveSpillCount와LastSaveLargestMemoryBuffer는 측정 가능한 저장별 진단을 노출합니다
변경 (Changed)
- 저장, 표준 변환, 검증, 암호화, DSS, PAdES 스테이징 버퍼는 이제 닫을 때 삭제되는 배타적 스플 파일과 메모리 스크러빙을 갖춘 제한된 작업 저장소를 공유합니다
- 사용자 지정 PDFium 블록 콜백은 일반 스트림 탐색을 직렬화하고
TPdfRandomAccessStore가 뒷받침할 때 커서 독립적인 위치 지정 읽기를 사용합니다 - 파일 기반 XFA 기능 스캔은 이제 전체 PDF를 메모리로 복사하는 대신 고정 크기 겹침 블록을 읽습니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.73.0을 보고합니다
Version 2.72.0
추가 (Added)
TPdf.BeginIncrementalSave,CommitIncrementalSave,EndIncrementalSave는 변경되거나 새로 생성된 간접 객체만 추가하는 리비전 세션을 제공합니다TPdfIncrementalCommitInfo는 각 커밋에 대해 변경된 객체 수, 추가된 바이트, 총 출력 바이트, 성공적인 리비전 수를 보고합니다
변경 (Changed)
- 모든 변경 커밋은 완전한 이전 출력을 정확한 바이트 접두사로 보존하고, 변경된 것이 없으면 리비전을 내보내지 않으며, 소스의 클래식 또는 xref-stream 형식을 이어갑니다
- 네이티브 xref-stream 증분 출력은 추가 처리 전에 필요한 유형, 자기 항목, 길이, 인덱스, 객체 종결자로 복구됩니다
- 암호화된 문서는 세션이 시작되기 전에 거부되고, 서명된 문서는 명시적인 호출자 권한이 필요해 서명 정책이 우연히 우회되지 않습니다
- 파일 오버로드는 대상을 원자적으로 교체하기 전에 형제 임시 파일을 완료하고, 쓰기 또는 교체 실패 후 세션 상태를 롤백합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.72.0을 보고합니다
Version 2.71.0
추가 (Added)
TPdf.SaveAsObjectStream은 제한된 압축 객체 그룹과 완전한 type-2 항목을 포함한 순수 xref 스트림으로 PDF 1.5+ 파일을 씁니다PackPdfObjectStreams은 활성 리비전을 확인한 후 클래식, 하이브리드, xref-stream 및 기존 객체 스트림 입력을 현대화할 수 있습니다
변경 (Changed)
- 페이지 지역 객체 정렬, 적응형 xref 필드 폭, 직접 카탈로그 접근, 구성 가능한 멤버 및 디코딩된 바이트 상한이 파일 크기와 임의 접근 성능의 균형을 맞춥니다
- 파일 오버로드는 대상을 원자적으로 교체하기 전에 형제 임시 파일을 완료하고, 잘못된 증분, 버전, 그룹화 옵션은 출력이 시작되기 전에 거부됩니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.71.0을 보고합니다
Version 2.70.0
추가 (Added)
TPdf.SaveAsLinearized는 첫 페이지 객체 그룹화, 두 개의 크로스 레퍼런스 섹션, Annex F 페이지 오프셋 및 공유 객체 힌트 테이블을 사용해 진정한 Fast Web View PDF를 스트림 또는 파일로 씁니다- 활성 객체 스트림 멤버는 자동으로 구체화되어 xref-stream 및 객체 스트림 입력이 보이는 페이지 콘텐츠를 변경하지 않고 범위 친화적 출력이 될 수 있습니다
변경 (Changed)
- 파일 오버로드는 대상을 원자적으로 교체하기 전에 형제 임시 파일을 완료하고, 스트림 오버로드는 일반적인 PDFium 저장 옵션과 명시적 버전 검사를 유지합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.70.0을 보고합니다
Version 2.69.0
추가 (Added)
TPdfRangeRequestScheduler은 PDFium 바이트 범위 힌트를 연속 다운로드를 강요하지 않고 우선순위가 지정되고 병합되며 크기가 제한된 전송 작업으로 변환합니다- 전체 및 부분 완료, 제한된 재시도, 스파스 가용성 중복 제거, 요청 통계, 세대 안전 취소가 HTTP Range 및 사용자 지정 전송 파이프라인을 지원합니다
TPdfProgressiveDocument.RangeRequests는 문서, 폼, 페이지 힌트를 자동으로 받아 상호 작용 페이지를 차단하는 정확한 바이트만 승격합니다
변경 (Changed)
CancelProgressiveLoad는 이제 네이티브 가용성 및 스트림 해체 전에 활성 범위 작업을 취소하고, 오래된 전송 완료는 안전하게 무시됩니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.69.0을 보고합니다
Version 2.68.0
추가 (Added)
TPdfProgressiveDocument는 원격 또는 성장하는 임의 접근 스트림이 PDFium이 요청한 바이트 범위를 수신하는 동안 PDFium의 가용성 세션을 유지합니다CheckDocumentAvailability,CheckFormAvailability,LoadAvailablePage는 병합된TPdfDownloadRange힌트를 반환해 호스트가 선형화된 페이지를 열고 표시하는 데 필요한 데이터만 가져올 수 있게 합니다AvailableByteCount는 단조 연속 다운로드를 지원하고,OnDataAvailable은 스파스 및 비순차 범위 캐시를 지원합니다
변경 (Changed)
- 선형화된 파일은 PDFium의 네이티브 점진적 문서, 폼, 페이지 게이트를 사용하고, 비선형화 파일은 전체 파일이 있는 후 네이티브 사용자 지정 스트림 로더로 자동 전환됩니다
TPdfStreamAdapter는 현재 저장된 바이트와 다른 논리적 최종 크기를 노출하면서 명시적인 4 GiBFPDF_FILEACCESS제한을 보존할 수 있습니다TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.68.0을 보고합니다
Version 2.67.0
추가 (Added)
TPdfView.AllowFormEvents는 읽기 전용 뷰어나 폼 상호 작용을 직접 구동하는 뷰어를 위해 뷰어가 폼 채우기 계층으로 전달하는 마우스, 키보드, 포커스 이벤트를 끕니다- 꺼져 있어도 폼 필드는 정상적으로 렌더링됩니다. 페이지 로드와 닫기는 입력에 반응하는 것이 아니라 폼 계층을 초기화하는 것이므로 의도적으로 게이트되지 않은 채로 남습니다
- 이 스위치는 기존
AllowUserPageChange및AllowUserTextSelection토글에 합류하고 기본값은 True이므로 기존 동작은 변경되지 않습니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.67.0을 보고합니다
Version 2.66.0
추가 (Added)
- 문서가 발생시키는 이름 있는 동작(ISO 32000-1 §12.6.4.11)이 이제 새
OnNamedAction이벤트를 통해 호스트에 도달합니다. 이전에는 모두 버려졌습니다 - 처리하지 않으면 네 가지 표준 탐색 이름 —
NextPage,PrevPage,FirstPage,LastPage— 이 페이지를 이동하며, 순환하지 않고 처음과 끝에서 고정됩니다 TPdf.PerformNamedAction은 애플리케이션이 같은 동작을 직접 실행할 수 있게 하고, 라이브러리가 제공하는 의미가 없는 이름에 대해 False를 반환합니다
수정 (Fixed)
- 암호화 테스트 하나가
endstream에서 뒤로 스캔해 스트림 본문을 측정했는데, 가끔 암호문 바이트를 줄 종결자로 잘못 알아보아 간헐적 실패로 보고했습니다. 라이브러리 자체는 전체적으로 올바랐습니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.66.0을 보고합니다
Version 2.65.0
추가 (Added)
BuildToUnicodeCMap은 CID 폰트에 필요한 ToUnicode CMap(ISO 32000-1 §9.10.3)을 생성해 텍스트를 복사, 검색, 보조 기술로 읽을 수 있게 합니다 — 없으면 텍스트는 올바르게 렌더링되지만 추출 시 아무것도 나오지 않습니다- 항목은 사양이 정한 블록당 100개 제한에서 청크로 나뉘고, 중복 글리프는 한 번만 쓰이며,
.notdef는 건너뜁니다 - CMap은 CID = GID 관례를 따르므로 옆에
CIDToGIDMap스트림이 필요 없습니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.65.0을 보고합니다
Version 2.64.0
추가 (Added)
- 잉크 및 스탬프 주석은 페이지 콘텐츠 스트림이 아니라 자체 페이지 객체에서 그려지며, 이제 그 객체에 도달할 수 있습니다.
AnnotationObjectCount와AnnotationObjectInfo가 읽고,AddPathToAnnotation이CreatePath로 만든 경로를 주석에 넘기며,RemoveAnnotationObject가 하나를 삭제합니다 - 스탬프의 모양을 만드는 데 더 이상 외부 도구가 필요 없습니다. 평소처럼 경로를 만든 다음 페이지 대신 주석에 넘기면 됩니다
- PDFium은 잉크 및 스탬프 하위 유형에서만 페이지 객체를 받아들이므로, 다른 하위 유형은 알 수 없게 실패하는 대신 제한을 알린 메시지와 함께 거부됩니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.64.0을 보고합니다
Version 2.63.0
추가 (Added)
TPdf.AddStandardFontText는 모든 PDF 리더가 제공해야 하는 14개 폰트 중 하나로 텍스트를 그리며 폰트 프로그램을 전혀 내장하지 않습니다 — 결과 파일은 시스템 글꼴을 내장하는AddText로 같은 텍스트를 그린 것보다 눈에 띄게 작습니다- 새
TPdfStandardFont열거형은 14개 글꼴 모두의 이름을 지어 호출자가 기본 폰트 이름을 잘못 입력할 수 없게 합니다. PDFium은 이 이름과 정확히 일치시키므로 오타는 조용히 폰트 없음으로 이어집니다 - PDF/A와 PDF/X는 모든 폰트 내장을 요구하므로, 해당 프로파일을 겨냥한 출력은 계속
AddText를 사용해야 합니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.63.0을 보고합니다
Version 2.62.0
추가 (Added)
TPdf.TextObjectGlyphOutline은 텍스트 객체 폰트의 한 글리프 윤곽을 경로 세그먼트로 반환해 텍스트를 벡터 아트로 변환하거나 폰트 대체가 변경했을 수 있는 글리프를 검사합니다- 결과는 기존
TPdfPathSegments형식을 재사용하므로 그린 경로 객체의 윤곽과 정확히 같은 방식으로 읽힙니다 - 좌표는 폰트 자체의 디자인 공간에 있으며 1 em이 1.0이 되도록 정규화됩니다. 요청된 폰트 크기는 좌표를 확장하지 않으므로 장치 단위를 원하는 호출자가 직접 포인트 크기를 곱합니다
- 빈 결과는 폰트가 해당 글리프의 윤곽을 노출하지 않는다는 뜻이며 오류가 아닙니다. 텍스트가 아닌 객체의 글리프를 요청하면 예외가 발생합니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.62.0을 보고합니다
Version 2.61.0
추가 (Added)
TPdf.InspectAvailability는 PDF를 문서로 로드하지 않고 PDFium이 알 수 있는 것을 보고합니다. 파일이 선형화되었는지(“웹 최적화”), 전체 파싱이 성공할지, 폼 데이터를 포함하는지, 뷰어가 처음 표시할 페이지가 무엇인지입니다- 새
TPdfAvailability,TPdfLinearization,TPdfFormAvailability형식이 답을 전달합니다. 스트림은 읽히지만 유지되지 않으며 반환 시 위치가 복원됩니다 - 이로써 바인딩과 로드는 되어 있었지만 라이브러리 어디에서도 호출자가 없던
FPDFAvail_*계열의 마지막 간극이 닫힙니다 - Delphi, Lazarus, C++Builder 각각이 보고된 사실, 스트림 위치 보장, nil 스트림 거부를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.61.0을 보고합니다
Version 2.60.0
추가 (Added)
- 마크된 콘텐츠(ISO 32000-1 §14.6)가 이제 상위 수준 API에서 도달 가능합니다.
PageObjectMarks가 페이지 객체에서 모든 BDC 태그와 속성 목록을 읽고,AddPageObjectMark가 하나를 쓰고,RemovePageObjectMark가 하나를 삭제하며,PageObjectMarkedContentID가 MCID를 보고합니다 - 새
TPdfContentMark,TPdfContentMarkParam,TPdfMarkParamKind형식이 태그 이름과 형식화된 매개변수(정수, 실수, 문자열, blob)를 전달하며, 값 종류는 성공하는 게터에서 추측하는 대신 PDFium에서 확인됩니다 - 마크를 추가하면 페이지 콘텐츠 스트림이 재구축되므로 태그가 저장 후에도 남습니다.
SaveAs는 스스로 콘텐츠를 재생성하지 않으므로 이 과정이 명시적이어야 했습니다 - Delphi, Lazarus, C++Builder 각각이 여섯 가지 사례를 다루며, 그중 하나는 저장된 콘텐츠 스트림을 확장해 BDC 연산자와 속성 목록이 실제로 들어갔는지 확인합니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.60.0을 보고합니다
Version 2.59.0
추가 (Added)
TPdfAnnotation에HasLinkUri와LinkUri가 추가되어CreateAnnotation이 이제 작동하는 웹 링크를 만들 수 있습니다. 주석은 주어진 주소를 가리키는/URI동작과 함께 저장됩니다anLink외의 하위 유형에 링크 URI를 설정하면 예외가 발생합니다. 동작 사전을 가지는 것은 Link 주석뿐입니다- 이 필드는 당분간 쓰기 전용입니다. 링크 대상을 다시 읽는 것은 문서 핸들이 필요한
FPDFLink_*계열을 거칩니다 - Delphi, Lazarus, C++Builder 모두 저장된 바이트가
/URI동작과 대상 주소를 담고 있는지 검증합니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.59.0을 보고합니다
Version 2.58.12
추가 (Added)
- PDF/X 검증은 페이지가
/TrimBox와/ArtBox를 함께 가지면pvxiTrimBoxWithArtBox를 보고합니다. 둘 다 완성된 페이지를 뜻하므로 RIP는 어느 쪽이 권위인지 알 방법이 없습니다 (ISO 15930) - PDF/X 검증은
/TrimBox또는/BleedBox가 음수 원점을 갖는 상자를 포함해/MediaBox밖으로 나가면pvxiPageBoxOutsideMediaBox를 보고합니다. 매체를 벗어난 상자는 이미징될 수 없습니다 - 비교 전에 사각형이 정규화되므로 어느 모서리 순서도 받아들여지고, 매체 가장자리에 정확히 닿는 상자도 여전히 검증을 통과합니다
- 프리플라이트 보고서는 두 문제를 모두 구조 아래 분류하고 구체적인 해결책을 제시합니다
- Delphi, Lazarus, C++Builder 모두 거부되는 두 사례와 적합한 한 사례를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.12을 보고합니다
Version 2.58.11
추가 (Added)
- PDF/UA 검증은 문서가 TOCI 항목에 태그를 달지만 그것이 속한 TOC 컨테이너에는 태그를 달지 않으면
pvuaiTociWithoutToc를 보고합니다. 그러면 보조 기술이 목차 없이 목차 항목을 알리게 됩니다 (ISO 14289-1 §7.7) - 프리플라이트 보고서는 문제를 구조 아래 분류하고 항목을 TOC 요소로 감싸도록 권장합니다
- C++Builder가 Delphi 및 Lazarus 사례와 함께 처음으로 PDF/UA 테스트 커버리지를 갖습니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.11을 보고합니다
Version 2.58.10
추가 (Added)
- PDF/A 검증은 상징적 TrueType 폰트가
/Encoding항목을 가지면pvaiSymbolicTrueTypeEncoding을 보고합니다. ISO 19005-1 §6.3.7은 폰트 내장 cmap만 인정하므로/Encoding은 이와 모순됩니다 - 상징 플래그는 폰트 사전에 인라인으로 쓰였든 간접 참조되든
/FontDescriptor에서 읽습니다. 비상징 폰트는 필요한/WinAnsiEncoding또는/MacRomanEncoding을 플래그 없이 유지합니다 - 프리플라이트 보고서는 문제를 콘텐츠 아래 분류하고 항목 제거를 권장합니다
- Delphi와 Lazarus는 플래그된 사례와 수용되는 두 사례를, C++Builder는 플래그된 사례와 비상징 사례를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.10을 보고합니다
Version 2.58.9
추가 (Added)
- PDF/A 검증은 ISO 19005-1 부속서 C의 컨테이너 구현 한계를 보고합니다. 127바이트를 넘는 이름에
pvaiNameOverLimit, 8191개 요소를 넘으면pvaiArrayOverLimit, 4095개 항목을 넘으면pvaiDictOverLimit, 28단계 중첩을 넘으면pvaiNestingOverLimit입니다 - 한계는 포함적이므로 정확히 한계에 있는 컨테이너는 여전히 검증을 통과합니다. 테스트는 각 경계의 거부 측과 수용 측을 모두 고정합니다
- 프리플라이트 보고서는 네 가지 문제를 구조 아래 분류하고 각 권장 사항에 구체적인 한계를 제시합니다
- Delphi와 Lazarus는 네 가지 한계와 경계 사례를 모두, C++Builder는 배열 한계와 경계를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.9을 보고합니다
Version 2.58.8
추가 (Added)
- PDF/R 검증은 이미지 수가 페이지 수와 일치하지 않으면
pvriPageImageMismatch를 보고합니다. ISO 23504-1 §6.5.1은 모든 페이지가 정확히 하나의 스트립 이미지여야 하므로 없거나 여러 개인 페이지는 적합하지 않습니다 - Delphi, Lazarus, C++Builder 테스트는 이미지 없는 페이지, 이미지가 두 개인 페이지, 적합한 이미지 한 개 사례를 다룁니다
변경 (Changed)
- PDF/R 마커 주입 테스트는 마커 주입이 메타데이터를 추가할 뿐 페이지 콘텐츠를 공급할 수 없으므로 이제 이미 스트립 이미지가 있는 소스 페이지에서 시작합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.8을 보고합니다
Version 2.58.7
추가 (Added)
- PDF/R 검증은 페이지가 폰트 리소스를 지정하면
pvriFontForbidden을 보고합니다. PDF/raster 페이지는 스캔한 이미지만 담습니다 (ISO 23504-1 §6.5.2) - PDF/R 검증은 허용 목록 밖의 스트립 인코딩에
pvriForbiddenImageFilter를 보고합니다./LZWDecode,/RunLengthDecode,/ASCII85Decode,/ASCIIHexDecode,/JBIG2Decode,/Crypt는 거부되고/CCITTFaxDecode,/DCTDecode,/JPXDecode,/FlateDecode는 통과합니다 (ISO 23504-1 §6.6) - 프리플라이트 보고서는 두 문제를 모두 콘텐츠 아래 분류하고 구체적인 해결책을 권장합니다
- Delphi, Lazarus, C++Builder 테스트는 폰트 리소스, 거부된 필터, 허용 목록 인코딩만 사용하는 페이지를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.7을 보고합니다
Version 2.58.6
추가 (Added)
- PDF/E 검증은 문서가 폰트 사용을 보이지만 내장 폰트 프로그램이 없으면
pveiFontNotEmbedded를 보고합니다. 요구 사항이 PDFium 경로뿐 아니라 DLL 없는 경로에서도 검사됩니다 - 엔지니어링 도면은 수십 년 후에도 동일하게 렌더링되어야 하므로 ISO 24517-1은 표준 14개 폰트 중 어느 것도 면제하지 않습니다. 검사는
/Type1,/TrueType,/Type0,/MMType1에 동일하게 적용됩니다 - 프리플라이트 보고서는 새 문제를 콘텐츠 아래 분류하고 모든 폰트 프로그램 내장을 권장합니다
- Delphi, Lazarus, C++Builder 테스트는 프로그램 없는 디스크립터, 내장된
/FontFile2, 폰트를 전혀 사용하지 않는 문서를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.6을 보고합니다
Version 2.58.5
추가 (Added)
InjectPdfEMarkers는 이제 ISO 24517-1 §6.2가 요구하는 출력 인텐트를 씁니다. 내장된 sRGB ICC 대상 프로파일, 그것을 지정하는/GTS_PDFE1출력 인텐트, 카탈로그/OutputIntents배열이 모두 같은 증분 업데이트의 일부로 들어갑니다- 프로파일 스트림은 세 성분을 가정하는 대신 ICC 헤더에서
/N을 얻으므로 CMYK 프로파일도 올바르게 기술됩니다 - PDF/E 검증은
pveiMissingOutputIntent와pveiMissingIccProfile을 보고하므로 명시된 색 조건이 없는 후보는 더 이상 수용되지 않습니다 - Delphi, Lazarus, C++Builder 테스트는 수용되는 출력 인텐트, 대상 프로파일 없는 것, 출력 인텐트가 전혀 없는 카탈로그를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.5을 보고합니다
Version 2.58.4
추가 (Added)
- PDF/X 검증은 이제 바이트 스캔에서
pvxiFontNotEmbedded를 보고해 내장되지 않은 폰트가 PDFium 기반 검사만이 아니라 DLL 없는 경로에서도 잡힙니다 - PDF/A와 달리 PDF/X는 표준 14개 폰트가 면제되지 않으므로 내장 폰트 프로그램 없는 모든 폰트 사용이 보고됩니다
- 검사는 보수적으로 유지됩니다. 파일이 폰트 사용을 보이는데
/FontFile,/FontFile2,/FontFile3이 전혀 없을 때만 발동하는데, 디스크립터와 프로그램을 세면 공유 디스크립터에서 오탐이 나오기 때문입니다 - Delphi, Lazarus, C++Builder 테스트는 프로그램 없는 디스크립터, 내장된 프로그램, 폰트를 사용하지 않는 문서를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.4을 보고합니다
Version 2.58.3
추가 (Added)
- PDF/X 검증은 이제 PDF/X-1a 후보가
/DeviceRGB,/CalRGB,/Lab을 가지면pvxiColorSpaceForbidden을 보고합니다. ISO 15930-1 §6.2는 이를 CMYK 교환에서 제외합니다 - 검사는 PDF/X-1a에만 적용되므로 PDF/X-3 이상은 RGB와 출력 인텐트와 짝을 이루는 장치 독립 공간을 계속 허용합니다
- 모호하지 않은 색 공간 이름 토큰만 검사됩니다.
ICCBased스트림은/N확인이 필요해 객체 모델 계층에 남습니다 - Delphi, Lazarus, C++Builder 테스트는 플래그된 RGB 공간, 플래그된 Lab 공간, 수용되는 CMYK와 회색조 쌍, PDF/X-3에서 허용되는 사례를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.3을 보고합니다
Version 2.58.2
추가 (Added)
- PDF/X 검증은 이제 투명 그룹 또는 활성 소프트 마스크에 대해
pvxiTransparencyForbidden을 보고합니다. ISO 15930-1 §6.2(PDF/X-1a)와 ISO 15930-3 §6.3(PDF/X-3)이 이를 금지합니다 - 검사는 감지된 적합 수준에 따라 적용되므로 PDF/X-4와 PDF/X-6는 투명도를 계속 허용하고, 수준을 식별할 수 없는 파일은 자신에게 적용되지 않을 수 있는 규칙으로 플래그되지 않습니다
/SMask /None으로 명시적으로 꺼진 소프트 마스크는 투명도로 취급되지 않습니다PdfHasActiveSMask가FPdfPdfa에서FPdfPdfCommon인터페이스로 이동해 모든 검증기가 하나의 소프트 마스크 규칙을 공유합니다- Delphi, Lazarus, C++Builder 테스트는 X-1a에서 플래그된 그룹, X-3에서 플래그된 소프트 마스크, 비활성화된 소프트 마스크, X-4에서 허용되는 사례를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.2을 보고합니다
Version 2.58.1
추가 (Added)
- PDF/X 검증은 이제 ISO 15930-7 §6.2.4가 요구하는 출력 인텐트의 형태를 검사합니다.
pvxiOutputIntentScheme은 존재하지만/GTS_PDFX가 아닌 하위 유형을 보고하고,pvxiOutputIntentMissingIdentifier는 누락된/OutputConditionIdentifier를 보고합니다 - 하위 유형은 전체 이름 토큰으로 일치되므로
/GTS_PDFXVersion같은 더 긴 이름은 더 이상 통과하지 못하고, 같은 이름의#xx이스케이프 표기는 여전히 통과합니다 - 하위 유형을 전혀 가지지 않는 출력 인텐트는 그대로 남습니다. 부재는 이미 마커 수준 문제가 보고하기 때문입니다
- 프리플라이트 보고서는 두 문제를 출력 인텐트 범주 아래 제출하고 수정을 제안합니다
- Delphi, Lazarus, C++Builder 테스트는 수용되는 하위 유형, PDF/A 하위 유형, 더 긴 이름 토큰, 부재하는 하위 유형, 누락된 조건 식별자를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.58.1을 보고합니다
Version 2.58.0
변경 (Changed)
- PDFium이 자체 C++ 프레임에서 호출하는 35개 콜백 전부(폼 채우기, XFA, JavaScript 플랫폼, 점진적 렌더 일시 정지, 스트림 읽기 및 쓰기)가 이제 Pascal 예외를 억제하고 언어 경계를 넘어 풀리는 대신 문서화된 실패 값을 반환합니다
- 따라서 예외를 발생시키는 이벤트 핸들러, 실패하는 할당, 콜백 안의 예기치 않은 오류가 프로세스를 죽이거나 PDFium을 정의되지 않은 상태로 남길 수 없습니다
수정 (Fixed)
- 폼 타이머 등록은 기반 타이머를 만들 수 없을 때 항목을 누출했습니다
추가 (Added)
- Delphi, Lazarus, C++Builder 테스트가 이제 쓰기를 거부하는 대상 스트림으로 저장을 다루고 이후 문서가 계속 사용 및 저장 가능한지 확인합니다
Version 2.57.8
수정 (Fixed)
- 이전 Delphi 릴리스(XE5 이하)에서
FPdfPades.pas의E2003 Undeclared identifier: 'GetTickCount64'오류로 평가판 라이브러리 컴파일이 중단되었습니다. 해당 컴파일러와 함께 배포되는 Windows 유닛이 이 심볼을 내보내지 않기 때문입니다 - 같은 컴파일러는
PDFium.pas의GetUserDefaultLocaleName과GetXfaFormPackets의TBytes를array of Byte에 대입하는 부분에서도 실패했으므로, XFA 로캘 콜백과 패킷 스냅샷도 이제 해당 컴파일러에서 빌드됩니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.57.8을 보고합니다
Version 2.57.7
변경 (Changed)
- 모든 저장 측 재작성은 이제 되감기만 하는 대신 쓰기 전에 대상 스트림을 자르므로, 더 긴 문서를 이미 담고 있던 호출자 제공 버퍼가 새
%%EOF뒤에 오래된 꼬리를 남길 수 없습니다 - Delphi, Lazarus, C++Builder 테스트가 이제 미리 채워진 스트림에 저장하는 경우를 다룁니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.57.7을 보고합니다
Version 2.57.6
수정 (Fixed)
- 암호화에 앞서 수행되는 객체 스캔이 임의 길이의 숫자 나열을 받아들여, 파일 어디에나 있는 긴 숫자가 음수나 엉뚱한 객체 번호로 감싸지고 재구축된 크로스 레퍼런스 테이블에 유령 항목을 추가할 수 있었습니다
- ISO 32000-1 부속서 C 한계를 넘는 객체 번호와 65535를 넘는 세대는 이제 잘리는 대신 객체 헤더로서 거부됩니다
추가 (Added)
- Delphi, Lazarus, C++Builder 테스트가 이제 재구축된 테이블의 사용 중 항목 수를 정확히 확인합니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.57.6을 보고합니다
Version 2.57.5
수정 (Fixed)
EncryptMetadata = False로 암호화하면 Encrypt 사전에/EncryptMetadata false를 쓰면서도 문서 메타데이터 스트림을 여전히 암호화했으므로, 그 선언을 따르는 리더는 읽을 수 없는 XMP를 만났습니다- 메타데이터 암호화가 꺼져 있으면
/Type /Metadata스트림이 변경 없이 복사되고, 다른 모든 스트림은 여전히 암호화됩니다
추가 (Added)
AnsiNameTokenMatchesKey가 구분자 인식 이름 비교를 위해 이제FPdfPdfCommon인터페이스의 일부입니다- Delphi, Lazarus, C++Builder 테스트가 이제 두 가지 메타데이터 암호화 모드를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.57.5을 보고합니다
Version 2.57.4
수정 (Fixed)
- 암호화 중에 재구축된 크로스 레퍼런스 테이블이 ISO 32000-1 §7.5.4가 요구하는 필수 객체 0 프리 리스트 헤드를 생략해 첫 번째 하위 섹션이 객체 하나 늦게 시작했습니다
- 재구축된 모든 항목이 세대 0을 주장했습니다. 더 높은 세대로 쓰인 객체는 이제 그것을 유지하므로 테이블이 가리키는 객체 헤더와 일치합니다
추가 (Added)
- Delphi, Lazarus, C++Builder 테스트가 이제 재구축된 테이블의 프리 리스트 헤드 항목과 세대 보존을 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.57.4을 보고합니다
Version 2.57.3
수정 (Fixed)
- 암호화된 출력이 모든 스트림 객체에서
stream키워드를 떨어뜨려 저장된 파일이 더 이상 유효한 PDF 구문이 아니었고 엄격한 리더가 페이지 콘텐츠를 스트림도 스트림 배열도 아니라고 보고했습니다 /Length재작성이/Length를 평범한 부분 문자열로 일치시켜,/Length1(내장 폰트라면 언제나)을 가진 스트림 사전은 키 이름이 손상되는 동안 실제 길이는 오래된 채로 남았습니다- 길이를
/Length N 0 R로 간접적으로 밝히는 스트림은 객체 번호가 새 길이로 덮어 쓰였습니다. 해당 항목은 이제 직접적인 암호화된 길이로 교체됩니다 /Length가 전혀 없는 스트림 사전은 이제 리더를 길이 없이 남기는 대신 하나를 받습니다
추가 (Added)
AnsiFindDictKeyToken이 최상위 구분자 인식 사전 키 조회를 위해 이제FPdfPdfCommon인터페이스의 일부입니다- Delphi, Lazarus, C++Builder 테스트가 이제
/Length1보존, 간접 길이 교체, 스트림 본문 크기 일치를 다룁니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.57.3을 보고합니다
Version 2.57.2
수정 (Fixed)
Revision = erR6으로SaveAsEncrypted와SaveAsEncryptedToStream을 실행하면 대략 네 파일 중 하나에서 올바른 비밀번호조차 거부하는 문서가 만들어졌습니다. ISO 32000-2 §7.6.4.3 알고리즘 2.B 라운드 카운터가 한 라운드 낮게 시작해 추가 라운드가/U,/O,/UE,/OE값을 변경했기 때문입니다- R6 암호화 문서는 이제 모든 규격 준수 리더에서 사용자 또는 소유자 비밀번호로 다시 열리고, 잘못된 비밀번호는 여전히 거부합니다
추가 (Added)
- Lazarus와 C++Builder 테스트 도구 모음이 이전에 Delphi 전용이던 암호화 커버리지를 얻었습니다. R6 키 길이, Encrypt 사전 필드, 반복 암호화 및 재열기 왕복, 잘못된 비밀번호 거부입니다
변경 (Changed)
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.57.2을 보고합니다
Version 2.57.1
변경 (Changed)
- 폼 필드에 입력하고, 캐럿을 옮기고, 확인란을 전환할 때 이제 뷰어 전체가 아니라 PDFium이 손상된 것으로 보고하는 영역만 다시 그립니다
- 손상 상자는 위쪽 페이지 Y축에 대해 정규화되고, 안티앨리어싱된 위젯 테두리가 깨끗하게 유지되도록 1픽셀 넓어지며, 보이는 클라이언트 영역으로 잘립니다
- 뷰포트에서 완전히 벗어나 스크롤된 손상 상자는 더 이상 다시 그리기를 예약하지 않고, 비활성 뷰나 매핑되지 않은 페이지는 여전히 전체 다시 그리기로 폴백합니다
- Delphi, Lazarus, C++Builder 테스트가 이제 제한된 폼 무효화, 뒤집힌 페이지 상자, 화면 밖 상자, 비활성 뷰 안전을 다룁니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.57.1을 보고합니다
Version 2.57.0
추가 (Added)
TPdfThumbnailView.Orientation이 기존 세로 기본값을 유지하면서 세로 및 가로 섬네일 레이아웃을 지원합니다FirstVisiblePageIndex,LastVisiblePageIndex,EnsureCurrentPageVisible이 1 기반 페이지 인덱스로 섬네일 뷰포트를 노출하고 제어합니다
변경 (Changed)
CurrentPageIndex변경 시 이제 어느 방향에서든 선택된 섬네일을 보기 영역으로 스크롤합니다- Delphi, Lazarus, C++Builder 테스트가 이제 방향 기본값, 전환, 보이는 범위 및 선택된 페이지 가시성을 다룹니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.57.0을 보고합니다
Version 2.56.2
변경 (Changed)
HighlightSearchText,AddSearchTextHighlight,ClearHighlight이 전체 뷰어를 다시 그리는 대신 추가되거나 제거된 검색 범위에 대한 장치 사각형만 무효화합니다- 같은 일치 항목으로 강조를 교체하거나 중복 일치를 추가할 때 더 이상 불필요한 다시 그리기를 예약하지 않습니다
- Delphi, Lazarus, C++Builder 테스트가 이제 경계 무효화, 멱등 업데이트, 지우기 및 비활성 뷰 안전을 다룹니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.56.2를 보고합니다
Version 2.56.1
변경 (Changed)
TPdfThumbnailView가 여러 다시 그리기와 인접 스크롤 위치에서 계속 보이는 페이지에 대해 렌더링된 비트맵을 재사용합니다- 캐시는 현재 보이는 페이지 범위만 유지하며, 페이지가 그 범위를 떠나거나 할당된 문서가 변경되거나 섬네일 크기가 변경될 때 정확히 항목을 해제합니다
- Delphi, Lazarus, C++Builder 테스트가 이제 캐시 재사용, 뷰포트 가지치기, 크기 무효화, 문서 교체 및 컴포넌트 파괴를 다룹니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.56.1을 보고합니다
Version 2.56.0
추가 (Added)
TPdfView.CutSelectedFormTextToClipboard와TPdfView.PasteFormTextFromClipboard가 포커스된 편집 가능 폼 위젯에 대한 Unicode 클립보드 편집을 제공합니다
변경 (Changed)
- 포커스된 폼 편집기가 텍스트 입력을 PDFium으로 전달하기 전에 표준 복사, 잘라내기, 붙여넣기, 모두 선택 키보드 단축키를 처리합니다
- 잘라내기와 붙여넣기는 읽기 전용 필드와 폼 작성 또는 수정 권한이 없는 세션을 거부하며, 잘라내기는 선택한 텍스트를 제거하기 전에 먼저 복사에 성공합니다
- Delphi, Lazarus, C++Builder 테스트가 이제 포커스 없음, 단축키 왕복 및 읽기 전용 거부 동작을 다룹니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.56.0을 보고합니다
Version 2.55.0
추가 (Added)
TPdfView.AddSearchTextHighlight이 다른 검색어의 고유 일치 항목을 현재 페이지 오버레이에 추가하여 여러 쿼리가 함께 강조 표시된 상태로 유지되도록 합니다
변경 (Changed)
HighlightSearchText는 여전히 대체 진입점이며 가법 스캐너를 공유하고, 중복 문자 범위는 무시되며ClearHighlight가 누적된 전체 집합을 제거합니다- Delphi, Lazarus, C++Builder 테스트가 이제 개별 쿼리 누적과 중복 범위 억제를 다룹니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.55.0을 보고합니다
Version 2.54.0
추가 (Added)
TPdf가 완전한 페이지 객체 스냅샷, 일괄 스타일 업데이트, 아핀 객체 변환, 경로 세그먼트, 클립 경로 및 Form XObject 자식을 노출합니다- 문자 검사에 채우기 및 획 색상, 글꼴 이름과 플래그, 느슨한 글리프 경계, 유효 행렬, 텍스트 객체 핸들, 문자-투-텍스트 인덱스 변환이 포함됩니다
- 주석이 테두리 기하학과 normal, rollover, down 모양 스트림을 왕복합니다
- 새 raw 및 디코딩된 섬네일 접근자, 페이지 콘텐츠 및 주석 변환,
RenderPageWithMatrix가 직접적인 고급 렌더링과 편집 경로를 제공합니다
변경 (Changed)
- 페이지 객체 스타일 변경을 하나의 일괄 처리로 커밋하여 PDFium이 페이지 콘텐츠를 한 번만 다시 생성하도록 할 수 있습니다
- 대상 비트맵 레이아웃이 호환될 때 행렬 렌더링은 기존 제로 카피 비트맵 경로를 사용합니다
Version 2.53.1
수정 (Fixed)
- 내장 중국어 복사 메뉴 캡션이 인코딩에 독립적인 Unicode 코드 포인트를 사용하여 Lazarus 빌드에서 올바르게 표시됩니다
- 오래된 Delphi 툴체인이
Winapi.Windows유닛이GetTickCount64선언을 생략하는 경우에도FPdfAsync를 컴파일할 수 있습니다
Version 2.53.0
추가 (Added)
- 이전에 종단 간 테스트 검증이 없었던 공개 TPdf API를 다루는 새
Tests.ApiCoverage테스트 픽스처:GetPageBox/SetPageBox(MediaBox/CropBox 읽기/쓰기, 누락 상자 오류 및 저장 왕복),FlattenPage/FlattenAllPages(반환 값과 페이지 수 보존),GenerateFormAppearances(비폼 문서에서 작업 없음),SaveAsEncrypted/SaveAsEncryptedToStream(비밀번호 왕복 포함 AES-256 — 암호화된 파일이 비밀번호 없이는 열리지 않고 비밀번호가 있으면 열리는지 검증),DeletePage경계 검증(페이지 0과 범위 초과는EPdfError발생), v2.38.0에서 도입된HasContents/HasAuthor주석 센티넬(Default(TPdfAnnotation)이 그것들을False로 남겨두는지 검증)
Version 2.52.0
추가 (Added)
TPdfView.CopySelectedFormTextToClipboard가 포커스된 AcroForm 위젯 내의 텍스트 선택을CF_UNICODETEXT로 Windows 클립보드에 복사합니다
변경 (Changed)
- 페이지 텍스트와 포커스된 폼 복사 작업이 동일한 방어적 Unicode 클립보드 작성기를 공유하며, 선택이 비어 있을 때 클립보드를 변경하지 않습니다
- Delphi, Lazarus, C++Builder 테스트가 이제 비활성 또는 포커스되지 않은 폼 복사 호출과 Windows 클립보드를 통한 포커스된 폼 선택 왕복을 다룹니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.52.0을 보고합니다
Version 2.51.0
추가 (Added)
TPdfView.SelectLineAt이 마우스 입력 없이 1 기반 페이지와 0 기반 문자 인덱스를 포함하는 시각적 텍스트 줄을 선택합니다
변경 (Changed)
- 프로그램적 줄 선택, 세 번 클릭 선택,
Shift+Home또는Shift+End가 하나의 문자 상자 줄 경계 모델을 공유합니다 - Delphi, Lazarus, C++Builder 테스트가 이제 안정적인 줄 선택과 잘못된 페이지나 문자 인덱스를 다룹니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.51.0을 보고합니다
Version 2.50.0
추가 (Added)
TPdf.LoadDocument가TBytes버퍼에 대한 0 기반Index와Count창을 받아들여 임베디드 PDF를 임시 바이트 배열 슬라이스를 할당하지 않고도 로드할 수 있습니다
변경 (Changed)
- 바이트 범위 로딩이 문서 상태를 변경하기 전에 음수 또는 범위를 벗어난 창을 거부하고 기존 버퍼링 및 빌린 버퍼 수명 옵션을 보존합니다
- Delphi, Lazarus, C++Builder 테스트가 이제 임베디드 PDF 창과 잘못된 바이트 범위 인수를 다룹니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.50.0을 보고합니다
Version 2.49.1
추가 (Added)
TPdfView.FitMode가 이제pfmFitHeight를 지원하여 현재 페이지를 보이는 뷰포트 높이에 맞추며 필요할 때 가로 스크롤을 허용합니다
수정 (Fixed)
- 스크롤바 가시성 변경이 클라이언트 영역을 변경한 후 맞춤 모드가 수렴하여 VCL과 LCL 간에 fit-page, fit-width, fit-height 결과를 일관되게 유지합니다
- Delphi, Lazarus, C++Builder 뷰어 테스트가 이제
pfmFitHeight선택과 열거형 왕복을 다룹니다 TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.49.1을 보고합니다
Version 2.49.0
추가 (Added)
- 공개 PDFium 바인딩 표면이 이제 검토된 헤더의 모든 470개 내보낸 함수를 다루며,
FPDFAttachment_SetDescription및FPDFAttachment_GetDescription을 통한 첨부 설명 접근을 포함합니다 TPdf가 이제 첨부 설명, 교차 참조 유효성, trailer 끝 오프셋, security-handler 개정, 64비트 메모리 로딩, 서명 바이트 범위, 웹 링크 텍스트 범위 및 확장된 이미지 데이터, 필터, 메타데이터, ICC 프로필 스냅샷을 노출합니다- 양식 도우미가 이제 네이티브 필드 포커스, 포커스된 선택 옵션 쿼리 및 업데이트, 마우스 휠 전달, 쓰기 가능한 잉크 스트로크, 점진적 렌더링 후 양식 오버레이를 지원합니다
변경 (Changed)
FormFieldCount, 양식 필드 인덱스, 탭 순서가 이제 관련 없는 페이지 주석을 포함하는 대신 위젯 주석만 설명합니다- 헤드리스
TPdf페이지가 이제 양식 채우기 페이지 수명 주기에 진입하고 떠나서 네이티브 포커스와 포커스된 필드 API가TPdfView없이 작동합니다 - 첨부 설명 내보내기가 기능 제한되어 이전 PDFium 빌드를 사용하는 응용 프로그램이 여전히 라이브러리를 로드하고 사용 불가능한 기능을 감지할 수 있습니다
수정 (Fixed)
- 점진적 페이지 렌더링이 이제 양식 채우기가 활성화된 경우 양식 컨트롤을 그립니다
- Delphi, Lazarus, C++Builder 테스트가 이제 새로운 문서 진단, 첨부 설명, 잉크 경로, 양식 동작, 서명 바이트 범위, 웹 링크 범위, 이미지 메타데이터를 다룹니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.49.0을 보고합니다
Version 2.48.0
추가 (Added)
TPdfMatrix가 이제 팩토리, 복제 및 할당, 유한 상태 및 가역성 진단, 허용 오차 기반 비교, 변환 액세스, 행렬식 보고, 아핀 분해를 노출합니다- prepend 합성, 피벗 인식 회전, 스케일링, 기울이기 및 뒤집기, stretch, contain, cover 사각형 매핑이 수동 계수 산술 없이 로컬 공간 및 맞춤 레이아웃 워크플로를 지원합니다
- 비변이 역 액세스, 역 포인트 매핑, 벡터 및 사변형 변환, 동적 포인트 및 사각형 배치, in-place 변형, 단일 패스 변환된 경계가 재사용 가능한 기하 표면을 확장합니다
변경 (Changed)
- 변환, 스케일링, 축 뒤집기가 이제 일반 아핀 곱셈을 통해 라우팅하는 대신 영향받는 계수만 업데이트합니다
- 사각형 변환이 입력을 한 번 정규화하고, 가능한 경우 특수화된 정확한 축 정렬 경로를 사용하며, 임시 포인트 레코드 없이 일반 회전 경계를 계산합니다
- 포인트 및 사각형 배치 변환이 하나의 결과 배열을 할당하거나 호출자 저장소를 재사용하며, 변환된 포인트 경계는 중간 배열 없이 한 패스로 누적됩니다
수정 (Fixed)
- 사각형 매핑이 사용 불가능한 매트릭스를 게시하기 전에 크기가 0인, 비유한,
Single오버플로 결과를 거부합니다 - Delphi, Lazarus, C++Builder 테스트가 이제 합성 순서, 피벗 불변량, 역 왕복, 맞춤 사각형, 분해, 대량 기하 동작을 검증합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.48.0을 보고합니다
Version 2.47.0
추가 (Added)
FPdfAsync가 이제 원래 API를 보존하는 확장된 인터페이스를 통해 구조화된 취소 이유 및 메시지, 제거 가능한 콜백 등록, 시간 초과 기반 소스, 취소 대기, 원자적 try-cancel 작업을 제공합니다TPdfFuture<T>.RunEx가 구성 가능한 응답 디스패치와 작업자 우선순위를 추가하는 동시 결과 봉투가 작업 ID, 값 유효성, 예외 클래스 이름, 완료 타이밍, 재사용 가능한 완료 도우미를 노출합니다TPdfAsyncExecutor가 4개의 FIFO 우선순위 레인, 선택적 경계 큐기 배압, 취소 가능한 작업 핸들, 시간 초과 인식 대기, 작업 스냅샷, 집계 통계, 우아한 종료를 갖춘 재사용 가능한 고정 작업자 풀을 추가합니다
변경 (Changed)
- 반복되는 비동기 작업이 각 작업마다 스레드를 만드는 대신 작업자 스레드와 O(1) 큐 작업을 재사용할 수 있으며, 동기화된 완료는 UI 호스트에 계속 사용 가능합니다
- 실행기와 future 실패가 예외 클래스 및 메시지 진단을 보존하고, 취소가 원래 이유를 유지하며, 콜백 예외가 작업자 수명 주기와 종료로부터 격리된 상태로 유지됩니다
- Delphi, Lazarus, C++Builder 테스트가 이제 확장된 취소, future 메타데이터, 작업 제어, 배압, 우선순위 정렬, 통계, 실패, 종료 표면을 다룹니다
수정 (Fixed)
- 동시 취소 소유자가 이제 별도의 관찰 및 취소 시퀀스에 의존하는 대신 결정론적 첫 작성자 결과를 받습니다
- 메인 스레드 유휴 대기가 동기화된 작업 응답을 처리하여 완료된 작업자가 조정된 종료 중에 실행기를 영구적으로 비유휴 상태로 남겨두는 것을 방지합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.47.0을 보고합니다
Version 2.46.0
추가 (Added)
FPdfAsn1이 이제 식별자 클래스, 64비트 high-tag-number 인코딩 및 디코딩, 파싱된 TLV 레코드, 제로 카피 자식 판독기 창, 타입화된 원시 디코더, 콘텐츠 또는 인코딩된 값 슬라이스를 노출합니다- DER 작성기가 이제 전체 부호 없는 64비트 INTEGER 범위, 검증된 임의 INTEGER 콘텐츠, ENUMERATED, 자동 UTCTime 또는 GeneralizedTime 선택, application 및 private 태그, 다중 값 SEQUENCE, 정준적으로 정렬된 SET OF 출력을 지원합니다
ValidateDer가 구성 가능한 중첩, 노드 수, 콘텐츠 길이, 오류 수, 루트, 선택적 SET 정렬 제한을 적용하면서 오프셋 인식 검증 오류를 반환합니다
변경 (Changed)
- DER 연결 및 다중 값 합성이 하나의 출력 할당을 사용하고, 작성기 버퍼가 reserve, count, capacity, 소유권 이전 작업을 노출하며, SET OF 정렬이 이제
O(n log n)병합 정렬을 사용합니다 - BOOLEAN, INTEGER, BIT STRING, OBJECT IDENTIFIER, NULL, UTF8String, PrintableString, IA5String, UTCTime, GeneralizedTime 값이 인코딩, 타입화된 디코딩 또는 검증 중에 정준 형식 검사를 받습니다
- Lazarus 런타임 패키지가 이제
FPdfAsn1을 내보내며, Delphi, Lazarus, C++Builder 테스트 스위트가 동일한 공개 DER 표면을 연습합니다
수정 (Fixed)
- 30보다 큰 context-specific 태그 번호가 더 이상 식별자의 낮은 5비트로 잘리지 않습니다
- 잘못된 high-tag 식별자, 비최소 정 길이, 잘못된 UTF-8, 0이 아닌 BIT STRING 패딩, 잘못된 시간 필드, 후행 루트, 리소스 제한 위반이 결정론적으로 거부됩니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.46.0을 보고합니다
Version 2.45.0
추가 (Added)
FPdfPreflightReport가 이제 모든 문제에 Info, Warning 또는 Error 심각도를 할당하고 표준별 및 보고서 수준 심각도, 상태, 범주, 문제 코드, lookup, search, flattening, filtering API를 노출합니다- 사전 점검 보고서가 이제 CI, 자동화, 스트리밍 파이프라인을 위해 일치하는
To*및Save*ToFile메서드를 통해 SARIF 2.1.0, JUnit XML, NDJSON, 네이티브 XML을 내보냅니다 - 안정적인 SHA-256 보고서 지문이 소스 경로 및 생성 타임스탬프와 무관하게 동등한 검증 결과를 식별합니다
변경 (Changed)
- JSON, CSV, text, Markdown, HTML 보고서가 이제 심각도 및 확장된 상태 요약을 포함합니다; HTML이 접근 가능한 표 캡션과 상태 요약을 추가합니다
- 문제 및 표준 컬렉션 구성이 기하학적 용량 증가를 사용하고, 쿼리 결과가 미리 크기 지정되며, JSON 이스케이프가 하나의 경계진 출력 버퍼에 쓰고, 모든 보고서 파일이 하나의 직접 UTF-8 작성기를 사용합니다
- 문제 범주 요약이 결정론적 정렬을 사용하고, 타임스탬프가 밀리초를 포함하며, JSON이
formatVersion: 2를 운반하고, CSV 셀이 스프레드시트 수식을 중화합니다
수정 (Fixed)
- JSON 내보내기가 이제 유효한 보충 Unicode 쌍을 보존하고 잘못된 형식의 스칼라 데이터를 내보내는 대신 격리된 UTF-16 서로게이트 코드 단위를 대체합니다
- HTML 내보내기가 이제 아포스트로피를 이스케이프하고, 필터링된 보고서 보기가 변경 가능한 결과 저장소를 공유하는 대신 독립적인 문제 배열을 소유합니다
TPdf.AboutInfo, Lazarus 패키지 메타데이터, 설치 관리자 메타데이터가 이제 일관되게 Version 2.45.0을 보고합니다
Version 2.44.0
추가됨 (Added)
- 북마크와 목적지가 열린 상태, 하위 항목 수, 액션 대상, 목적지 보기 모드, 최대 4개의 보기 매개변수를 노출합니다
Metadata,GrantedPermissions,UserGrantedPermissions,HasPermission,UserHasPermission가 형식화된 문서 검사 스냅샷과 권한 쿼리를 제공합니다ExtractThumbnail(PageNumber)가 활성 페이지를 변경하지 않고 요청된 페이지를 렌더링하며, RFC 3161 타임스탬프 결과가 정책, 생성 시간, nonce 세부 정보를 노출합니다
변경됨 (Changed)
- 북마크, JavaScript, 메타데이터, 목적지, 섬네일 경로가 검증된 2패스 버퍼, 기하학적 컬렉션 증가, 사이클 안전 순회를 사용합니다
- 저장 후처리가 현재 xref 리비전을 통해 활성 카탈로그, 페이지 트리, 열기 액션을 해결하고, 디코딩된 객체 스트림을 캐시하며, 어휘 경계로 PDF 사전을 스캔합니다
- 공유 PDF 파싱이 이제 정확한 객체 헤더, 세대, 사전 키, 스트림 길이, 예측자 기하학, 정수 범위, 주석·리터럴 문자열·16진수 문자열 경계를 강제합니다
- RFC 3161 응답 검증이 이제 nonce와 SHA-256
messageImprint모두를 바인딩하고, 구조적으로 유효한 서명자를 요구하며, 엄격한 DER 길이·OID·INTEGER·GeneralizedTime 규칙을 적용합니다
수정됨 (Fixed)
- 증분 문서가 기본 열기 액션을 추가할 때 더 이상 비활성 중복 카탈로그나 잘못된 형식의 참조 접미사를 선택하지 않습니다
- 롱폼 DER 길이를 가진 타임스탬프 토큰이 완전히 인코딩된 토큰을 유지하고, 잘못된 형식의 CMS 선택 필드 순서와 빈 서명자 집합은 거부됩니다
- 클린 Delphi 빌드가 이제 정렬 안전 바이트 복사를 통해 PAdES nonce 시드 필드를 작성하고 정확한 네이티브 포인터 형식으로 XFA 응답 바이트를 전달합니다
TPdf.AboutInfo와 Lazarus 패키지 메타데이터, 설치 프로그램 메타데이터가 이제 Version 2.44.0을 일관되게 보고합니다
Version 2.43.0
추가됨 (Added)
- XFDF 필드와 주석 레코드가 이제 생략된 XML 값과 명시적으로 빈 값을 구분하는 존재 플래그를 노출합니다
변경됨 (Changed)
- XFDF 임포트가 네임스페이스 접두사가 있는 요소와 속성, 혼합 텍스트와 CDATA 콘텐츠, 엔티티 참조, 공백이 의미 있는 값을 허용하면서 잘못된 Unicode 스칼라 참조를 거부합니다
- XFDF 임포트와 익스포트가 인덱스된 필드 매칭과 제한된 기하학적 버퍼를 사용하여 깊게 중첩된 폼, 대규모 주석 컬렉션, 잉크 목록, 정점, 마크업 사변형에 대한 처리량과 피크 할당 동작을 개선합니다
- PDF/A와 PDF/UA 검증이 대규모 페이지·스트림·구조 이름·RoleMap 컬렉션에 제한된 증가를 사용하며; PDF/UA RoleMap 해석이 이제 직접 배열과 정확한 세대의 간접 이름 또는 배열 객체를 따릅니다
수정됨 (Fixed)
- XFDF 라운드트립이 이제 깊게 중첩된 필드 경로, 명시적으로 빈 필드 값, 명시적으로 빈 주석 콘텐츠, 부재와 빈 콘텐츠의 구분을 유지합니다
- 잘못된 메모리 버퍼 로드와 범위를 벗어난 페이지 할당이 부분적인 문서나 페이지 상태를 남기지 않고 거부되며, 실패한 네이티브 페이지 리로드가 이전에 활성이던 페이지를 유지합니다
- 대규모 마크된 콘텐츠 식별자와 서명 메타데이터 버퍼가 할당이나 네이티브 액세스 전에 제한되고 검증됩니다
Version 2.42.0
추가됨 (Added)
TPdfMatrix가 이제 좌표 매핑, 히트 테스트, 정규화된 경계, 명시적 특이 행렬 처리를 위해Invert,TryInvert,TransformPoint,TransformRect를 제공합니다TPdf.WrapText가 공백 없는 CJK 및 기타 텍스트를 분할하면서 유효한 UTF-16 서로게이트 쌍을 함께 유지하는BreakLongWords오버로드를 추가했습니다TPdfAnnotation.AttachmentPointSets가 여러 줄 마크업 주석의 모든 사변형을 노출하면서 기존AttachmentPoints필드는 첫 번째 집합의 별칭으로 유지됩니다
변경됨 (Changed)
- 텍스트 추출, 읽기 가능 콘텐츠 구성, 단어 조회, 음성 텍스트 오프셋 매핑이 이제 제한된 할당과 이진 조회 경로를 사용하여 대규모 페이지에서 반복 할당과 선형 스캔을 줄입니다
- ASN.1 직렬화와 암호화된 PDF 생성이 이제 기하학적 출력 버퍼를 사용하며; 암호화된 객체 정렬은
O(n log n)정렬을 사용하고 xref 행이 최종 버퍼에 직접 작성됩니다 WrapText가 CR, LF, CRLF 줄 경계를 유지하고 전체 작업에 하나의 네이티브 측정 객체를 재사용합니다- XFDF 임포트와 익스포트가 모든 마크업 사변형을 유지하며; 임포트는 또한 RGB/내부 색상을 적용하고 프로세스 로케일과 무관하게 십진 좌표를 파싱합니다
수정됨 (Fixed)
- 레거시 호출자가 새로운
HasContents와HasAuthor센티널을 설정하지 않고도 비어 있지 않은 문자열을 할당하여 주석 콘텐츠와 작성자를 다시 업데이트할 수 있습니다 - 명시적으로 빈 주석 문자열이 이제 유효한 제로 종료 네이티브 버퍼를 사용하므로,
/Contents,/T, 기타 선택적 텍스트 키를 지워도 더 이상 PDFium에 nil 포인터를 전달하지 않습니다
Version 2.41.0
변경됨 (Changed)
- Delphi에서 preflight 보고서
SaveJsonToFile,SaveMarkdownToFile및SaveTextToFile이 이제 시스템 ANSI 코드 페이지 대신 UTF-8로 작성되어 기존의SaveHtmlToFile과 일치하며; 이 메서드들을 통해 저장할 때 Delphi에서 파일 경로, 권장 사항 및 범위 노트의 non-ASCII 문자가 깨지던 문제를 해결합니다 SaveCsvToFile이 이제 BOM 접두사가 있는 UTF-8로 작성하여 Windows용 Excel이 인코딩을 자동 감지하도록 하며; BOM이 없으면 Excel은 UTF-8 CSV를 code-page 1252로 처리하여 non-ASCII 문자를 손상시킵니다
수정됨 (Fixed)
- 폼을 명시적으로 정리하지 않고 닫았을 때
ExtractImages데모가FExtractedImages에 캐시된TBitmap객체를 누수하던 문제를 해결하기 위해; 이제 폼이Destroy를 재정의하여ClearExtractedImages를 호출함으로써 모든 캐시된 비트맵을 해제합니다
Version 2.40.0
변경됨 (Changed)
TPdf.RenderPage(HDC, ...)가FPDF_RenderPage호출 주변의 FPU/SSE 예외를 마스크 처리하여TPdfView.RenderPage(HDC)(v2.25.0에서 수정됨) 및 비트맵을 반환하는 모든 렌더링 진입점과 일치하도록 하며; 이전TPdf레벨의 direct-to-DC 오버로드는 pre-D12 컴파일러에서 FPU 예외를 마스크되지 않은 상태로 두었습니다
수정됨 (Fixed)
ColorToARGB가 센티널 값을 리터럴 RGB 색상으로 처리하는 대신clNone및clDefault에 대해 완전 투명한 픽셀 (alpha 0)을 반환하며; 이전에는 호출자가 “색상 없음”을 기대하며clNone을 전달했을 때 어둡고 거의 불투명한 채우기가 생성되었습니다
Version 2.39.1
수정됨 (Fixed)
- 명시적인 PDF 1.3 저장이 이제 기본 그래픽 상태를 반복할 뿐인
/SMask /None,/AIS false및/TK true항목을 제거하는 동시에 기본값이 아닌 투명도 상태를 계속 거부합니다
Version 2.39.0
변경됨 (Changed)
CreatePDF및ImageToPDF가 이제 확인된 저장 대상을 사용하고SaveAs가 성공적으로 완료되었을 때만 성공을 보고합니다BatchExport,PDFtoJpg및SplitPDF가 이제 고유한 출력 디렉토리를 할당하여 반복 실행 및 동일한 이름의 입력이 이전 결과를 보존하도록 합니다SplitView가 이제 취소 또는 일치 항목 없음 이후에 숨겨진 페이지 상태를 남겨두지 않고 검색을 한 번 순환하며; 불완전한 인쇄 작업을 부분 출력으로 제출하는 대신 중단합니다
수정됨 (Fixed)
MergePDF가 이제 잘못된 형식의 페이지 범위 토큰 및 소스를 덮어쓰는 출력 경로를 거부하고, 실제로 임포트된 페이지를 카운트하며, 빈 결과 저장을 거부합니다- Delphi 및 C++Builder
Attachment데모가 이제 롤백 방지 파일 교체를 통해 동일 경로 저장을 커밋하므로 이름 바꾸기 실패로 인해 원본 PDF가 제거되지 않습니다
Version 2.38.0
변경됨 (Changed)
SetAnnotationData가 이제 기존HasName/HasSubject/HasIcon패턴과 일치하게TPdfAnnotation에서HasContents/HasAuthor센티널 뒤에/Contents및/Author쓰기를 모니터링하며; 이전에는 이 두 필드가 무조건 기록되어 색상 또는 플래그만 업데이트하기 위해Default(TPdfAnnotation)레코드를 할당할 때 주석의 기존 콘텐츠와 작성자가 빈 문자열로 덮어씌워졌으나,GetPageAnnotation이 센티널을 설정하여 읽기-수정-쓰기 주기가 원본 값을 유지하도록 합니다
수정됨 (Fixed)
GenerateFormAppearances가 이제 widget 사전을 읽는FPDFAnnot_GetStringValue(Annot, 'V', ...)대신 (ISO 32000-1 §12.7.5에 따라 상위 필드 사전으로 이동하는)FPDFAnnot_GetFormFieldValue를 통해 확인란/라디오 단추 값을 읽으며; widget은 대개/V가 없으므로/AS가 선택 상태에 동기화되지 않아 병합된 확인란/라디오가 선택되지 않은 상태로 렌더링되던 문제를 해결합니다
Version 2.37.0
변경됨 (Changed)
ParseTsaUrl이 이제 구문 분석 후 포트를1..65535범위로 제한하며; 그렇지 않으면 범위를 초과하는 포트 값이DWORDtruncation을 통해 wrap되어 유효한 포트에 연결될 수 있었습니다- XFDF
ParseField가 이제 깊이 매개변수 (기본값 0, 64로 제한)를 수락하고 제한 시 빈 필드를 반환하여, 악의적으로 중첩된 100 000 깊이의<field>체인이 더 이상 스택을 오버플로할 수 없도록 합니다
수정됨 (Fixed)
- TSA HTTP 요청이 이제
WinHttpSendRequest에@ReqDer[0]을 전달하기 전에 빈 요청 본문을 방지하도록 보호하며; 길이가 0인 동적 배열 역참조는 근거 없는 포인터에 액세스했을 것이며,BuildTimeStampReq는 항상 비어 있지 않은 SEQUENCE를 반환하지만 이제 호출 지점이 계약을 보호합니다
참고 사항 (Notes)
- HTTPS 해지 확인에 대한
FPdfTsaWin헤더 주석이 수정되어; WinHttp는 기본적으로 서버 인증서 체인을 확인하지만WinHttpSetOption을 통해 명시적으로 활성화되지 않는 한 CRL/OCSP 해지 확인을 수행하지 않으며, 해지 확인이 “무료로 제공된다”고 주장한 이전 문구는 오해의 소지가 있었습니다
Version 2.36.0
변경됨 (Changed)
- TSA HTTP 요청이 이제
Content-Type및Accept헤더 외에도 명시적인Content-Length헤더를 전송하며; WinHttp는 전체 길이에서 이를 합성하지만, 일부 RFC 3161 프록시는 명시적 헤더를 요구하고 그것 없이는 요청을411 Length Required로 거부합니다 - XFDF 내보내기가 이제 유효하지 않은 백슬래시-16진수 시퀀스를 내보내는 대신 (이미 이스케이프된 TAB/LF/CR 제외) C0 제어 문자를 삭제하며; 이전
\-01F이스케이프는 유효한 XML이 아니므로 (XML에서 백슬래시는 특별한 의미가 없음) 준수하는 리더는 문서를 잘못된 형식으로 거부했을 것입니다 InjectAssociatedFiles가 이제 호출자가TAssociateFile.MIMEType을 제공할 때 EmbeddedFile 스트림 사전에/Subtype을 작성하며; 필드가 선언되고 문서화되었으나 이전에는 인젝터가/Type /EmbeddedFile을 하드코딩하고 무시했습니다 (ISO 32000-2 §7.11.4는 스트림의/Subtype을 허용함)
수정됨 (Fixed)
- XFDF 임포트가 UTF-8 BOM 뒤의 첫 번째 콘텐츠 바이트와 BOM이 없을 때의 첫 번째 바이트를 건너뛰던 문제 (
BytesToAnsi(Bytes, 4, ...)(BOM) 및BytesToAnsi(Bytes, 1, ...)(BOM 없음)가BytesToAnsi가 0 기반 배열 인덱스를 취하기 때문에 1씩 어긋난 시작 오프셋을 사용함)를 해결하기 위해; 이제 호출은3및0을 사용합니다 ExtractSignatureValue에서 선택적인certificates [0]및signedAttrs [0]분기에 대해R.Position:= CN이 무조건 실행되던 두 개의 dangling-if들여쓰기 버그를 수정하기 위해; 선택적 TLV를 실제로 읽었을 때만 위치가 진행되도록 분기를begin/end로 래핑합니다 (v2.22.0의AddSignatureTimestampToCms에서 수정된 것과 동일한 클래스의 버그임)
Version 2.35.0
변경됨 (Changed)
TFPDFAvail_IsDocAvail,TFPDFAvail_IsPageAvail및TFPDFAvail_IsFormAvail이 이제var hints: FX_DOWNLOADHINTS대신hints: PFX_DOWNLOADHINTS를 사용하므로, 문서화된nullptr쿼리 전용 모드 (추가 데이터를 요청하지 않고 현재 가용성 확인)에 Delphi에서 액세스할 수 있으며; PDFium 헤더는 명시적으로hints가 null이 될 수 있도록 허용하지만 이전var바인딩은 이를 불가능하게 만들었습니다TFPDF_SetSystemFontInfo가 이제var pFontInfo: FPDF_SYSFONTINFO대신pFontInfo: PFPDF_SYSFONTINFO를 사용하므로, 호출자가nil을 전달하여 PDFium에 이전에 등록된 시스템 글꼴 인터페이스 사용을 중지하도록 지시할 수 있습니다 (문서화된 비활성화 경로)TPdfThumbnailView.Paint가 이제UpdateScrollBarRange(ClientHeight div RowHeight)와 동일한 공식으로VisibleRows를 계산하므로 그린 행 수가 스크롤바 페이지 크기와 일치하며; 이전의 페인트 전용 공식 ((ClientHeight - FMarginY) div RowHeight + 1)은 경계 높이에서 한 행씩 차이가 날 수 있어 페이지를 벗어난 행에 대한 렌더링을 낭비하거나 마지막으로 표시된 행을 놓쳤습니다
Version 2.34.0
추가됨 (Added)
TPdf.SaveAsEncrypted/SaveAsEncryptedToStream— 문서를 저장한 다음 PDF 2.0 AES-256-CBC (V=5/R=5/R=6)로 암호화하는 상위 수준 API이며; 사용자/소유자 비밀번호, 권한 및 개정을 포함하는TPdfEncryptOptions를 취하고EncryptDocumentBytes로 위임합니다- StrF 리터럴 문자열 암호화:
EncryptDocumentBytes가 이제 스트림이 아닌 객체 (Info 사전 등)의(...)리터럴 문자열을 스트림 암호화 형식 (16-byte IV + PKCS7 ciphertext)과 일치하는 AES-256-CBC hex 문자열로 암호화하며; hex 문자열<...>은 그대로 유지합니다
Version 2.33.0
추가됨 (Added)
FPdfEncrypt.pas의 전체 문서 AES-256-CBC 암호화 인젝터이며;EncryptDocumentBytes가 일반 텍스트 PDF 및 비밀번호를 가져와 모든 간접 스트림 객체 (파일 키 아래의 16-byte IV + AES-256-CBC PKCS7)를 암호화하고,/Length를 패치하고,/Encrypt사전 객체를 추가하고,/Encrypt및/ID를 포함하는 완전한 클래식 교차 참조 테이블 + trailer를 재구성하며; PDF 2.0 암호화 스택을 완료합니다 (AES block + GCM + SHA-512/384 + R6 key derivation + dictionary + document sweep)EncryptStreamPayload헬퍼 — 자체 객체 레이아웃을 관리하는 호출자가 재사용할 수 있는 PDF 2.0 AES-256 스트림 형식 (IV가 AES-CBC-PKCS7 ciphertext 앞에 추가됨)
Version 2.32.0
추가됨 (Added)
- 새
FPdfSha512.pas유닛에 SHA-512 / SHA-384 해시(FIPS 180-4)를 순수 Pascal로 구현했습니다. PDF 2.0 R6 비밀번호 해시 반복에 필요한 기능으로, 각 반복에서 128-bit 값의 mod-3 결과에 따라 SHA-256/384/512를 선택합니다. FIPS-180-4 B.1 known-answer 테스트로 검증했습니다 - 새
FPdfEncrypt.pas유닛에 PDF 2.0 암호화 키 파생과 Encrypt 사전 빌더를 추가했습니다. ISO 32000-2 §7.6.4.3 알고리즘 2.B(R6 hash dance: AES-128-CBC + 반복적인 SHA-256/384/512 선택)를 구현해 32-byte 파일 암호화 키와/O,/U,/OE,/UE,/Perms항목을 생성하고,/CFM /AESV3를 사용하는 V=5/R=5/R=6 Encrypt 사전을 구성합니다. 바이트 버퍼는 TBytes 스타일을 사용합니다
Version 2.31.0
추가됨 (Added)
- 새
FPdfAes.pas유닛에 AES 블록 암호 프리미티브(FIPS 197)를 추가했습니다. AES-128 및 AES-256 블록 암호를 순수 Pascal로 구현하고 CBC 모드 헬퍼와 CSPRNG 백엔드를 함께 제공합니다. FIPS-197 Appendix C.2 / C.3 known-answer 테스트로 정확성을 검증했으며, PDF 2.0 암호화 스택의 암호학적 기반이 됩니다 - 새
FPdfAesGcm.pas유닛의 AES-GCM 인증 암호화 (NIST SP 800-38D)이며; AES 블록 프리미티브 상단에 GHASH (GF(2^128) multiplication), GCTR 및 GCM AEAD 구조를 구현하며, NIST GCM 테스트 케이스 1 및 3 (AES-128)이 권장되는 ciphertext 및 tag와 정확히 일치하며 테스트 케이스 13 (AES-256)은 왕복 테스트를 거쳤으며, GCM은 PDF 2.0용 ISO/TS 32003 모드입니다 - PDF/A Level A ParentTree 및 ClassMap 무결성 검증 (ISO 19005-1 §6.8.3)이며;
pvaiParentTreeMissing은 /ParentTree 숫자 트리가 없는 StructTreeRoot를 플래그 지정하고,pvaiClassMapUnresolved는 /ClassMap이 없는 /C 클래스 참조를 플래그 지정합니다
Version 2.30.0
추가됨 (Added)
- Associate Files 주입 (
InjectAssociateFiles/TPdf.SaveAsWithAssociateFiles, ISO 32000-2 §7.11.4)이며; 새FPdfAssocFiles유닛은 8개의 ISO 32000-2 Table 45/AFRelationship값을 모두 포함하여 catalog 또는 임의의 페이지 사전에 filespec 참조의/AF배열을 첨부하며,InjectPadesDssMarkers에서 검증된 증분 업데이트 패턴을 재사용합니다 - PDF/X-6 (ISO 15930-9:2020) 지원이며;
TPdfXConformance가pxc6을 추가하고 인젝터 및 검증기가 이를pdfxid:GTS_PDFXVersion식별을 통해 스레딩하며, PDF/X-6은 완전 교환을 위한 PDF/X-4의 PDF 2.0 기반 후속 버전입니다 - PDF/A가
/Thread작업을 금지하며 (ISO 19005-1 §6.6.1 화이트리스트 갭); 금지된 작업 목록은 이제 Launch, ResetForm, ImportData, SetOCGState, SetState, GoTo3DView, Rendition 및 Hide와 함께 Thread를 포함합니다
수정됨 (Fixed)
- PDF/A-4e 검증 경로가 이제 Level A와 동일한 tagged-structure, MarkInfo 및 word-break 검사를 따르며; v2.29.0 저장 측 다운그레이드는
PdfAIsLevelE를 포함했으나 세 개의ValidatePdfACompliance게이트가PdfAIsLevelA단독으로 검사하여 tagged 구조가 누락된 PDF/A-4e 문서가 경고 없이 통과되었습니다 - OCG
/BaseState테스트 편차: v2.28.0 PostProcess 패스는 수락 범위를/ON또는/OFF(ISO 32000-1 Table 8.70)로 올바르게 확장했으나, Delphi 및 C++ 테스트는 여전히/OFF가 거부되기를 기대했기에; 이제 테스트는 진정으로 유효하지 않은 값 (/Undefined)을 사용하고 새로운 긍정 테스트가/OFF수락을 고정합니다 - 지리 공간
/Subtype /GEO과다 일치:ContainsDictionarySubtype('GEO')가 토큰을 전달하는 모든 사전에 일치하여 분실된/ViewerPreferences << /Subtype /GEO >>와 같은 무관한 사전도 일치했기에; 새ContainsMeasureDictionarySubtype은 추가로/Type /Measure또는 Measure 전용 형제 키를 요구하여 Measure가 아닌 사전이 더 이상 ADBE ExtensionLevel 3 요구 사항을 작동시키지 않도록 합니다
Version 2.29.0
추가됨 (Added)
- 검증기, XMP 인젝터 및 Pdfium 객체 모델 레이어 전체에서 PDF/A-4 (ISO 19005-4:2020)를 지원하며;
TPdfAConformance가pac4base,pac4f및pac4e를 추가하고, 기본 레벨은 PDF 2.0 (ISO 32000-2)이며 기존 A/B/U 레벨을 기본 + F (form) + E (accessibility)로 대체하며,ValidatePdfA가pdfaid:part=4XMP 패킷을 읽고 (기본값은 적합성 요소를 생략함)SaveAsPdfA가 이를 방출하며SignPadesWithPdfA가pac4base를 장기 보관 컨테이너로 수락합니다 FPDFBookmark_GetColor바인딩 — 마지막 언바운드 PDFium 공용 export (469/469)이며;TBookmark가 북마크/C배열 (ISO 32000-1 §12.3.3)에서 채워진HasColor및Color필드를 획득하며, 바인딩은 허용 오차 로딩을 사용하여 export 이전의 이전 DLL이 계속 작동하도록 합니다- PDF/E-1 (ISO 24517-1 §5) 헤더 버전 검사
pveiBadPdfVersion— PDF/E-1은 PDF 1.6을 기반으로 하며 1.6이 아닌 헤더는 이제 플래그로 지정됩니다 - PDF/R-1 (ISO 23504-1)
pvriEncryptVersionMismatch— 암호화는%PDF-2.0헤더에서만 허용되며;/Encrypt를 전송하는 1.x 본문은 이제 플래그로 지정됩니다 (이전에는 작동하지 않는 문이었음) - PDF/R-1
pvriBadMediaBox— 각 페이지MediaBox는[0 0 w h]이어야 하며;PdfRHasNonZeroMediaBoxOrigin은 간접 참조 MediaBoxes를 건너뛰는 로케일 독립적 ASCII 스캐너입니다 - PDF/A Level A
pvaiRoleMapUnresolved(ISO 19005-1 §6.8.3.4) — 사용자 정의/S구조 유형을 매핑되지 않은 상태로 두는 존재하는 불완전한 RoleMap은 이제 플래그 지정되어 기존의 존재 여부만 검사하는pvaiRoleMapMissing검사가 남겨둔 갭을 채웁니다
수정됨 (Fixed)
PdfVersionToName(20)이"2.0"대신"1.0"을 반환하여 모든 PDF 2.0 저장에 대해 catalog/Version항목 및 검증기 메시지를 손상시키던 문제를 수정하고; 포맷터는 이제 버전 코드>= 20에 대해 major.minor를 명시적으로 분할합니다FPdfAsn1.pas음수-INTEGER 인코더가 Delphi 12에서 컴파일에 실패하여 (Integer(-(V<0))에서E2015발생) 전체 테스트 프로젝트를 차단하던 문제를 해결하기 위해; 부호 확장 마스크에Int64(-Ord(V<0))을 사용하도록 수정합니다- PDF/A 금지 주석 목록에 이제 모든 파트에서
/RichMedia가 포함됩니다 (이전에는 누락되었으며; ISO 32000-1 §12.5.6.35는 PDF/A에서 이를 금지함)
Version 2.28.0
추가됨 (Added)
TPdfVersion이 이제 PDF 2.0 (ISO 32000-2)에 대한pv20을 포함하며;DecodePdfVersion(20)은pvUnknown대신pv20을 반환하고EncodePdfVersion(pv20)은 20을 방출하여 PDF 2.0 문서의 버전이 읽어올 때 더 이상 손실되지 않고 명시적으로 작성될 수 있도록 합니다
변경됨 (Changed)
DecodeDate가 이제 전체 23자D:YYYYMMDDHHmmSSOHH'mm'형식을 요구하는 대신 PDF Reference 3.8.3에 따라 선택적 뒤따르는 필드가 있는 PDF 날짜 문자열을 구문 분석하며; 준수하는 잘린 날짜 (예:D:20260712,D:20260712153000및D:20260712153000Z)는 이제 수락되고 이전에는 엄격한Length=23게이트에 의해 거부되었으며, 시간대 시간 오프셋은 이제> 23대신 실제 UTC-12..UTC+14 범위에 대해 검증됩니다FPdfMeasure.MeasureText가 이제 현재 코드 페이지를 통해 non-ASCII 패밀리 이름을 가리던 베어AnsiString캐스트 대신 라이브러리의 다른 FPDF_BYTESTRING 호출 사이트와 일치하도록 글꼴 이름을 FPCAnsiString/ DelphiUTF8Encode로 인코딩합니다
수정됨 (Fixed)
TDerWriter.Integer음수 값 경로가 충돌하거나 잘못된 형식의 DER을 생성하던 문제 (while V <> -1 do V := V shr 8루프는Value = -1에 대해Inner를 비워두어 후속Inner[Length(Inner)-1]에서 범위 오류가 발생했고 다른 음수에 대해 바이트를 초과 생산함)를 해결하기 위해; 부호 확장 시프트로 2의 보수 바이트를 추출하고 나머지가 순수한 부호 확장일 때 올바르게 중지하며, CMS/PAdES INTEGER 필드는 양수이므로 이는 음수 값을 전달하는 호출자에게만 영향을 미치지만 이제 경로가 올바릅니다TPdf.GetCharacterOrigin및TPdfView.GetCharacterOrigin이FPDFText_GetCharOrigin반환 값을 무시하고 실패 시 초기화되지 않은 포인트를 반환하던 문제를 수정하고; 결과는 이제 0으로 초기화되고 읽기 실패 시 원점을 반환합니다 (GetCharacterRectangle계약과 일치함)
Version 2.27.0
변경 (Changed)
- Delphi, C++Builder 및 Lazarus
PDFViewer와MultiPageViewer데모가 문서 검색을 순환하고Enter/F3로 다음 결과를 찾으며 옵션 변경 시 컨텍스트를 재설정하고Esc를 활성 검색 또는 인쇄 취소에 사용합니다 - 뷰어 인쇄가 현재 회전을 따르고 세로 또는 가로 출력을 선택하여 도구 모음 회전을 인쇄 페이지에 반영합니다
- 세
ViewerInteractionLab데모가Ctrl+A,Ctrl+C,Enter,F3,Esc단축키를 지원하며 기본 편집 컨트롤의 선택/복사를 가로채지 않습니다
수정 (Fixed)
- C++Builder 및 Lazarus 뷰어 인쇄 취소가 프린터 작업을 중단하고 취소 전 렌더링 페이지를 제출하지 않으며 Lazarus는 중첩 복사/페이지/정렬 루프도 명시적으로 종료합니다
- Delphi
MultiPageViewer취소 버튼을 핸들러에 연결하고 C++Builder/LazarusMultiPageViewer검색 필드의 화살표, Home, End 키 편집을 유지합니다
Version 2.26.0
변경 (Changed)
TPdf.GetObjectBitmap,TPdf.GetBitmap,TPdf.GetThumbnail및TPdfView대응 메서드가FPDFImageObj_GetBitmap/FPDFPage_GetThumbnailAsBitmap호출 주변에서 렌더링 잠금을 얻어RenderPage/RenderTile과 일치합니다. 이들은 잠금 없이 실행되던 PDFium 렌더링 측 호출로, 같은 문서에 대해 동시에 실행되는UnloadPage/ReloadPage와 경합할 수 있었습니다TPdf.RenderPageThumbnail이 이제 페이지/Rotate항목을 반영합니다:/Rotate 90또는270페이지는 회전된 크기를 기준으로 맞춤을 다시 계산해 섬네일 가로세로 비율이 뷰어에 표시되는 모습과 일치하고,FPDF_GetPageSizeByIndex가 반환하는 회전 전 고유 크기는 더 이상 사용하지 않습니다
수정 (Fixed)
TPdfView.GetCharacterRectangle은FPDFText_GetCharBox의 반환 값을 무시했고 PDFium이 실패를 보고하면 초기화되지 않은TPdfRectangle을PageToDevice에 전달했습니다. 이제 사각형은 0으로 초기화되며 실패한GetCharBox는Rect(0,0,0,0)을 반환합니다GetLinkAnnotations의 URI 경로와 파일 경로 버퍼 길이가 1만큼 어긋났습니다: 두 번째FPDFAction_GetURIPath/GetFilePath호출이size-1로 할당한 버퍼에 버퍼 길이로size(뒤에 붙는 NUL 포함)를 전달했습니다. 이제size-1을 전달해 스스로 클램프하지 않는 PDFium 빌드에서도 할당 범위를 벗어나 쓰지 않습니다
Version 2.25.0
변경 (Changed)
TPdf.AddText,SetText,AddPath,InsertFormObjectFromXObject는 페이지 콘텐츠를 재생성하기 전에 캐시된 텍스트 페이지와 링크 주석을 무효화하여SetTextPositions와RemoveObject와 일치합니다. 이전에는 페이지를 편집한 뒤GetText/GetWebLinks/FindFirst를 호출하면 편집 전에 캡처된 오래된 텍스트와 링크 데이터가 반환되었고, 유지된FPDF_TEXTPAGE핸들이 콘텐츠 재생성 후에 사용되어 정의되지 않은 동작을 일으켰습니다TPdfView.RenderPage(HDC, ...)는 이제 렌더링 잠금을 얻고FPDF_RenderPage호출 주변에서 FPU/SSE 예외를 마스크하여 다른 모든 렌더링 진입점과 일치합니다. 기존의 DC 직접 출력 오버로드는 같은 문서에서 동시에 실행되는UnloadPage/ReloadPage와 경합할 수 있었고 D12 이전 컴파일러에서는 FPU 예외가 마스크되지 않은 채로 남았습니다- Delphi
PrintPDF데모는 취소 시finally블록이 취소 전에 렌더링된 페이지를 제출하는Printer.EndDoc에 도달하게 두는 대신Printer.Abort를 호출합니다. Lazarus 데모는 이미 이를 올바르게 처리하고 있었습니다
수정 (Fixed)
TPdf.GetCharacter,TPdf.GetCharcode와TPdfView대응 메서드가FPDFText_GetUnicode가 반환한 아스트랄 평면 코드 포인트(이모지, CJK Extension B)를WideChar()로 하위 16비트로 잘라 lone surrogate를 만들어 이후 텍스트 처리를 손상시켰습니다. U+FFFF 초과 문자는 이제 U+FFFD(치환 문자)를 반환하며, 아스트랄 문자의 전체 UTF-16 인코딩이 필요하면GetText를 사용하세요GetWebLinks가 반환 값에 대한 방어 없이SetLength(Rectangles, FPDFLink_CountRects(...))를 호출했고, 잘못된 형식의 페이지에서-1반환 시EOutOfMemory가 발생했습니다. 음수 개수는 이제 0으로 클램프합니다TPdf.Destroy가 참조 카운트 버퍼가 해제되기 전Password문자열을 메모리에서 지우고(UniqueString+FillChar) 컴포넌트가 파괴된 후 힙에 암호가 읽을 수 있는 채로 남지 않게 합니다
Version 2.24.0
추가 (Added)
TPdf.DeletePage,GetAttachment,GetAttachmentName,GetAttachmentType,SetAttachment,DeleteAttachment가 인덱스를 검증하고 범위를 벗어나면EPdfError를 발생시킵니다
수정 (Fixed)
TPdf.AddText,AddBitmap,AddJpegImage에서 실패했을 때 페이지 객체 핸들이 새는 문제: 객체가 생성된 뒤FPDFText_SetText,FPDFImageObj_SetBitmap,FPDFImageObj_SetMatrix또는FPDFImageObj_LoadJpegFileInline이FPDFPage_InsertObject가 객체를 페이지에 넘기기 전에 실패하면 네이티브FPDF_PAGEOBJECT핸들이 새었습니다. 각 경로는 이제 예외 시 객체를 파괴한 뒤 다시 던집니다TPdf.UnloadPage가 진행 중인FPath핸들(CreatePath로 설정했지만AddPath가 아직 소비하지 않은)을nil로 설정하며FPDFPageObj_Destroy를 호출하지 않고 버렸습니다. 이제 핸들을 파괴하므로 만든 뒤 버려지거나(또는 페이지 전환으로 중단된) 경로가 더 이상 새지 않습니다TPdf.InsertFormObjectFromXObject는UpdatePage(FPDFPage_GenerateContent) 호출, 즉AddText/AddPath/AddBitmap/AddJpegImage/SetText/RemoveObject가 모두 수행하는 호출을 누락했으므로, 이 방식으로 삽입한 Form XObject는 다음 리로드나 저장에서 사라졌습니다. 이제 삽입 후UpdatePage를 호출합니다
Version 2.23.0
수정 (Fixed)
- 옵션 콘텐츠
/BaseState검증이 이제/OFF도/ON과 함께 허용합니다(ISO 32000-1 Table 8.70은 둘 다 허용). 이전 검사는 파일이 규격에 적합함에도 정상적인/OCProperties /D /BaseState /OFF구성을 “malformed optional content” 오류로 거부했습니다 - 옵션 콘텐츠
/Intent검증이 이제/Design과[/View /Design]같은 이름 배열도 허용하며/View리터럴만 받아들이지 않습니다. ISO 32000-1 Table 8.70은/Intent를/View와/Design에서 뽑은 이름 또는 이름 배열로 정의하는데, 이전 단일 값 검사는 표준 저작 도구의 출력을 과도하게 거부했습니다 - PDF 1.7
/Extensions /ADBEExtensionLevel 3 게이트의 지리 공간 Measure 사전 판정이 ISO 32000-1 Table 254가 선택 사항으로 표시한/Type /Measure를 더 이상 요구하지 않습니다./Type을 생략하는 GeoPDF 생산 도구(PDFBox, QGIS, FME)는 이전에 게이트를 우회해 규격에 맞지 않는 PDF 1.7 출력을 조용히 만들었고, 판정기는 이제/Subtype /GEO만으로 일치를 판정합니다
Version 2.22.0
변경 (Changed)
TPdfView맞춤 확대 계산(GetPageZoom,GetPageWidthZoom,GetPageHeightZoom)이 이제ClientWidth/ClientHeight를 창Width/Height대신 사용하므로pfmFitPage/pfmFitWidth/pfmFitHeight가 스크롤바와 테두리를 포함한 바깥 프레임이 아닌 보이는 뷰포트에 페이지를 맞춥니다. 덕분에 맞춘 페이지가 클라이언트 영역보다 약간 커서 나타나던 불필요한 스크롤바가 사라집니다AddSignatureTimestampToCms가 읽을 수 없는 CMS SignerInfo 필드(version / sid / digestAlgorithm / signedAttrs / signatureAlgorithm)를 식별하는 명시적인Exception을 발생시키며, 조용히Exit해서 부분 파싱이 완전히 서명된 CMS인 것처럼 흘러가게 두지 않습니다. 또한begin/end블록 없이 두었던 선택적signedAttrs [0]분기 때문에R.Position이 전진하지 않던 문제도 수정했습니다
수정 (Fixed)
ResolveWinSigner의 CNG 개인 키 핸들 새는 문제:CryptAcquireCertificatePrivateKey가 성공했지만 이후 발급자/일련번호 추출이나TWinCmsSigner.Create가 실패하면, 소유권이 성공한 생성자에서만 서명자로 넘어가므로NCryptKeyHandle이 해제되지 않았습니다. 획득 후 설정을 이제 감싸서 실패 시 핸들이NCryptFreeObject로 먼저 해제됩니다EcDsaP1363ToDer가 이제 모두 0인r또는s절반을INTEGER 0을 출력하는 대신 거부합니다.r = 0또는s = 0인 ECDSA 서명은 유효하지 않고(RFC 4754 §6 / FIPS 186-4 §6는1 ≤ r, s ≤ n-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)
- 명시적인 PDF 1.3 저장은 PDF 1.4 이상이 필요한 활성 메타데이터 스트림을 이제 거부합니다. PDF 1.4부터 PDF 1.7까지의 타깃에서는 해당 스트림을 보존합니다
Version 2.21.1
수정됨 (Fixed)
- 하이브리드 참조 검증은 이제 동일 리비전의 고전적 xref 자리표시자보다 먼저 보완
/XRefStm항목을 적용하므로, 호환성 테이블이 이를 자유로 표시할 때 압축 주석과 기타 버전 제한 객체가 더 이상 누락되지 않습니다
Version 2.21.0
변경됨 (Changed)
- 모든 Delphi, C++Builder 및 Lazarus 뷰어 예제는 이제 첫 번째 명령줄 인수로 전달된 PDF를 열 수 있으며, C++Builder 및 Lazarus
MultiPageViewer예제는 전체 선택과 복사를 위한 명시적 단축키를 제공합니다
수정됨 (Fixed)
- 뷰어 예제는 이제 유효하지 않은 북마크와 링크의 페이지 타깃을 거부하고 로드 오류를 보존하며, 수동 확대/축소 입력을 일관되게 검증합니다. 인쇄에서는 현재 보이는 페이지를 반복하지 않고 요청한 폼 입력 페이지를 출력하며, Delphi 인쇄 작업을 취소하면 부분 출력을 제출하는 대신 작업을 중단합니다
Version 2.20.0
변경됨 (Changed)
- 모든 Delphi, C++Builder 및 Lazarus 뷰어 예제는 열기, 검색, 저장, 인쇄, 확대/축소, 페이지 탐색에 일관된 단축키를 제공합니다. 각
ViewerInteractionLab변형은 페이지 이동, 검증된 10–600% 수동 확대/축소, 영속적인 상호작용 로그, 클릭 좌표 round-trip 검사도 지원합니다
Version 2.19.1
수정됨 (Fixed)
- 명시적 PDF 버전 검증은 이제 압축 객체 항목을 포함해 활성 classic, hybrid 또는 xref-stream 리비전 체인을 따릅니다. 따라서 교체되거나 해제되거나 참조되지 않는 객체가 기능 버전 오류를 잘못 일으키지 않습니다
Version 2.19.0
변경됨 (Changed)
- C++Builder와 Lazarus의 첨부 파일, 이미지 추출, 텍스트 추출, 페이지 변환, 분할 예제는 이제 전용 출력 폴더나 안전하게 완료 처리한 파일을 사용합니다. 일관된 0 채움 이름, 빠르게 반영되는 진행 상황, 항목별 오류 수를 담은 완료 요약도 제공합니다
수정됨 (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 형식입니다. 이제 해당 항목만Continue로 건너뛰고Break로 전체 스캔을 중단하지 않아, 간접/배열 항목 뒤에 매핑된 유형에서 발생하는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
추가 (Added)
- 기존 Delphi 콘솔 샘플에 더해, Lazarus 및 C++Builder용
AnnotationsLab샘플을 이식했습니다
수정 (Fixed)
TPdf.CreateAnnotation은 새 주석에 아직 바꿀 quad 슬롯이 없었기 때문에 quad 포인트를 사용하는 마크업 주석(Highlight, Underline, StrikeOut, Squiggly)에 대해 “Cannot set attachment points”를 발생시킬 수 있었습니다. 이제 대신 첫 번째 quad를 추가합니다
Version 1.79.0
추가 (Added)
- 새로운
AnnotationsLabDelphi 콘솔 샘플: Text, Highlight, Square 및 Circle 주석을 만들고 PDF에 쓴 다음 파일을 다시 로드하고 페이지 주석 목록을 열거합니다
Version 1.78.0
추가 (Added)
- 새로운
TPdf.MeasureText및TPdf.MeasureTextWidth: 페이지에 내용을 추가하지 않고 특정 글꼴 및 크기(PDF 사용자 단위, 1 단위 = 1/72인치)에 대해 렌더링된 문자열의 너비와 높이를 측정하므로AddText를 기반으로 레이아웃 및 자동 줄 바꿈(word-wrap) 로직이 가능해집니다. 독립 실행형FPdfMeasure유닛에서 클래스 도우미로 제공됩니다 - 새로운
TPdf.WrapText: 공백을 기준으로 텍스트를 분할하고 주어진 너비(PDF 사용자 단위)보다 넓지 않은 줄로 단어를 묶는MeasureTextWidth를 기반으로 한 탐욕적 자동 줄 바꿈입니다. 너무 긴 단일 단어는 자체 줄을 가지며(단어 내 분리 없음), 래핑된 줄을 배열로 반환합니다
Version 1.77.0
추가 (Added)
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
수정 (Fixed)
- C++Builder 헤더(
.hpp)를 모든 RAD Studio 버전과 플랫폼(Win32/Win64/Win64x)에 대해 다시 생성했습니다. Pascal 소스와 어긋나 오래된 함수 시그니처와 누락된 유닛이 소스 배포를 통해 C++Builder 사용자에게 전달되고 있었습니다
Version 1.62.1
수정 (Fixed)
- RAD Studio 12 Athens 및 그 이전 버전에서 소스 컴파일을 복구했습니다: PDF/UA 검증 경로의
TArray<Byte>대입이 Delphi 13 전용 암시적 배열 변환을 사용하고 있어 오래된 IDE에서는 컴파일되지 않았습니다
Version 1.62.0
추가 (Added)
TPdf.RenderPageThumbnail은 문서의 현재 페이지, 로드된 페이지를 바꾸거나OnPageChange를 발생시키지 않고, 인덱스로 지정한 어떤 페이지든 종횡비에 맞는 비트맵으로 렌더링합니다
수정 (Fixed)
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
변경 (Changed)
- 영향을 받는 콜백을 구현한 코드를 다시 컴파일해야 할 수 있는 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 호출이 올바르게 동작합니다
수정 (Fixed)
- 메모리 안전성 수정: 활성 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
변경 (Changed)
- AccessibilityReader 데모(Delphi, Lazarus, C++Builder)는 이제
TPdfReadingSession위에서 읽기 소리를 재생합니다. 각 페이지는BuildSpokenTextFromWords로 하나의 음성 청크로 묶이고, SAPI 단어 위치가FeedSpokenPosition으로 전달되며, 세션이 페이지를 진행하고 뷰의 단어 커서를 구동합니다. 각 데모에 있던 수작업 오케스트레이션은 이로써 대체되었습니다 - 데모의 단어 수준 카라오케 추적은 이제 NVDA가 음성 엔진이어도 동작합니다.
EstimatePacing은 경과한 읽기 시간에 맞춰 읽기 커서를 조정하며, 이전의 NVDA는 단어 추적 없이 그대로 읽었습니다 - 데모의 Pause와 Resume도 이제 NVDA에서 동작합니다.
ResumeRestartsChunk는 Resume 시 현재 페이지를 처음부터 다시 읽고, SAPI는 기존의 제자리 pause / resume을 유지합니다
Version 1.60.0
추가 (Added)
TPdfView의 라이브 저시력 렌더링: 새로운 렌더 옵션reInvert와reNightDuotone은 검색, 선택, 읽기, 단어 커서 오버레이가 그려지기 전에 렌더된 각 페이지 타일의 색을 다시 칠합니다(전체 색 반전 또는 야간용 2색조 팔레트). 기존 비트맵 색 변환을 단일 페이지와 맞쪽 페이지 레이아웃 모두에 대한 대화형 뷰어로 가져옵니다. 옵션을 토글하면 즉시 다시 그려집니다NightDuotoneInk와NightDuotonePaper는 야간 팔레트를 설정하며, 기본값은 검은 페이지 위의 호박색 텍스트입니다. 두 옵션이 모두 설정되면reInvert가 우선합니다
Version 1.59.0
추가 (Added)
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
추가 (Added)
EstimateSpokenWordIndex는 경과 시간과 분당 단어 수를 바탕으로 음성 엔진이 말하는 단어를 추정해, 긴 단어에 비례해 더 많은 시간을 줍니다. 단어 위치를 보고하지 않는 엔진(NVDA controller client 등)도 단어 수준 읽기 커서를 구동할 수 있으며, 호출자가 경과 시간을 넘기므로 루틴은 시계에 의존하지 않아 단위 테스트가 가능합니다
Version 1.57.0
추가 (Added)
- 읽기 소리 추적을 위한 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는 연결된 PDFium Delphi Component 버전을 출력하는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는 연결된 PDFium Delphi Component 버전을 출력하는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 부분을 제거합니다. 그래서[email protected]와 같은 조작 링크는 실제 호스트로 귀속되며,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)
- PDFium API
FPDFPageObj_AddExistingMark()를 바인딩함. 기존 콘텐츠 마크를 페이지 객체에 첨부함. 연속된 페이지 객체가 동일한 마크를 공유하면 저장된 PDF는 이들을 모두 아우르는 단일 마크로 합침. 비연속 객체는 각각 별도의 사본을 받음 - PDFium API
FPDFTextObj_SetFontSize()를 바인딩하여 기존 텍스트 객체의 글자 크기(포인트)를 변경할 수 있게 함. 기존FPDFTextObj_GetFontSize()바인딩과 짝을 이룸
변경 (Changed)
- 동봉된 PDFium 런타임 DLL(Win32 및 Win64, 표준 빌드 및 V8 빌드)을 2026-06-02 PDFium 스냅샷으로 갱신함
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으로 끌어가면 페이지가 자동으로 스크롤됩니다(50 ms 간격, 간격당 16 px, 패닝과 같은 경계 적용). 따라서 먼저 마우스를 놓지 않고도 현재 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), 필터 제한 (§6.2.2 — FlateDecode, 2색 CCITTFaxDecode, 8비트 gray/RGB DCTDecode만 허용), object stream 부재 (§6.2.4), §6.6의 strip layout은 후처리로 강제할 수 없습니다. PDF/R은 다른 PDF/x 표준보다 구조적으로 훨씬 엄격한 하위 집합이므로 소스 바이트를 처음부터 올바르게 생성해야 합니다. ValidatePdfR은 이 유닛이 탐지할 수 있는 파일 형식 문제를 보고합니다. 전체 콘텐츠 수준 검증에는 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과 PDF/X-1a / PDF/X-3용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을 제공하거나,OutputCondition/OutputConditionIdentifier/RegistryName을 바꿔 특정 ICC 특성화 레지스트리 항목을 지정할 수 있습니다(예: FOGRA39, GRACoL2006_Coated1v2) - 모든 폰트 임베딩, 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 사전 재작성은 PDFium Delphi Component의 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 PDFium 스냅샷으로 갱신하여 FPDFText_SetText / FPDFText_SetCharcodes 크래시 경로에 대한 수정과 PDFium 프로젝트의 다양한 내부 강화 사항을 반영함
- FPdfPageOps.pas에 PDFium의 새로운 저장 플래그 FPDF_SUBSET_NEW_FONTS를 노출하여, FPDF_SaveAsCopy 호출자가 새로 추가된 텍스트 객체에 사용된 임베드 폰트 파일을 자동 서브세팅하도록 요청 가능. 기존 FPDF_INCREMENTAL, FPDF_NO_INCREMENTAL, FPDF_REMOVE_SECURITY 상수는 PDFium의 비트 시프트 형식으로 재정의됨(레거시 숫자 값 3은 바이너리 호환성을 위해 FPDF_REMOVE_SECURITY_DEPRECATED로 보존)
- FPdfView.pas에 FPDF_FONT_BACKEND_TYPE 열거형(FREETYPE / FONTATIONS) 및 FPDF_LIBRARY_CONFIG의 m_FontLibraryType 필드를 추가하여, Skia 렌더러로 PDFium을 초기화하는 애플리케이션이 시작 시 폰트 백엔드를 선택할 수 있도록 함
- TFPDFPage_InsertObject 시그니처를 PDFium C 익스포트에 맞춰 갱신: 함수는 이제 void가 아니라 FPDF_BOOL을 반환함(성공 시 TRUE, page_object가 NULL이거나 소유권 이전이 실패하면 FALSE). Delphi / FPC는 함수 반환값 무시를 허용하므로 PDFium Delphi Component 기존 호출자는 수정 없이 계속 컴파일됨
- TPdf.AboutInfo 문자열을 수정하여 현재 제품 버전을 보고하도록 함(v1.28.0이 문서 전용 릴리스였던 탓에 v1.27.0에서 멈춰 있었음)
Version 1.28.0
- API 참조 페이지의 인페이지 문서를 대폭 확장. 모든 속성, 메서드, 이벤트, 전역 함수 항목에 3단락 Description, Remarks 목록, 다중 라인 Delphi Example, 더욱 풍부한 See Also 블록을 추가 — 이전에 내용이 부족했던 200+ 페이지를 포함하여 모든 TPdf 카운터, 메타데이터 게터, 폰트 및 문자 액세서, 페이지 레벨 속성, 인덱스 레코드, 문서 레벨 메서드, 그리고 TPdfView의 전체 상태/표시/이벤트 표면을 포괄
- 도움말 레이아웃을 losLab 시각 기준에 맞춰 다듬었습니다. 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 없이 PDFium Delphi Component이 지원하는 모든 플랫폼에서 동작
- 인메모리 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를 선택적으로 만들어 PDFium Delphi Component이 해당 실험적 텍스트 위치 setter를 내보내지 않는 PDFium DLL에서도 계속 로드되도록 함
- Delphi, C++Builder, Lazarus 회귀 테스트 스위트를 각각 61 케이스로 확장하여 표준 DLL 및 V8 DLL 능력 커버리지 포함