HotPDF Release Notes
HotPDF 사용자에게 보이는 기능, 수정, 호환성 업데이트, 문서 변경의 버전 기록
참고: 변경 기록은 최신 800개만 유지됩니다
Last release
- 최신 버전: 2.974.0; 릴리스 날짜: 2026-10-11
Version 2.974.0
Added
- 정확한 페이지와 Unicode 이름으로 팝업과 답변 cascade를 포함한 페이지 주석을 제거하며, 인증된 권한과 게시 rollback을 갖춘 상한이 적용된 네이티브 API, Windows 트랜잭션, JSON job, 버전이 붙은 콜백을 통해 처리합니다
Version 2.973.0
Added
- appearance 리소스, 공유 object 그래프, 로컬 action destination을 보존하면서 binary FDF 주석을 네이티브 API, Windows 교환, 버전이 붙은 콜백으로 교환합니다
Version 2.972.0
Added
- 텍스트 상태, 자동 맞춤, rich-text 간격, 텍스트 클리핑을 보존하면서 rendering 모드 4부터 7까지 포함해 주석 기본 appearance를 그립니다
Version 2.971.1
Fixed
- 명시적인 32비트 모듈로 해시 곱셈, 정확한 cache-key 격리, LRU 방출을 유지해서 FPC 3.3.1 Windows 빌드의 공개 shaped-run cache에서 range-check 실패를 막습니다
Version 2.971.0
Added
- 루트 :scope를 매칭하고 비활성 상호작용 상태의 정적 hover, active, focus pseudo class를 받아들이며, 부정, 논리·상대 selector, support 질의, 저장된 FDF/XFDF appearance를 보존합니다
Version 2.970.0
Added
- 지원되는 declaration과 selector 질의, 상한이 적용된 중첩 조건, namespace을 인지하는 probe, cancellation 복구, 계산된 저장 FDF/XFDF appearance로 네이티브 rich-text @supports 그룹과 supports() import를 평가합니다
Version 2.969.0
Added
- 유한한 calc, min, max, clamp 식, 루트 기준·명시적 viewport 길이, 최종 폰트의 행·간격 메트릭을 네이티브 rich-text 디코딩, 저장된 필드 appearance, rich FDF/XFDF import에서 평가합니다
Fixed
- 컴파일러 타깃 전반에서 최소 미디어 크기와 resolution, 초기 폰트 크기를 일관되게 받아들이되, 지원 하한 미만 값은 계속 거부합니다
Version 2.968.0
Added
- 명시적인 rich-text color scheme, reduced motion, 투명·데이터 preference, contrast, forced 색상과 반전 색상, scripting 가용성을 평가하면서 알 수 없는 생략된 preference와 계산된 저장 appearance를 보존합니다
Version 2.967.0
Added
- 호출자가 제공한 linked·imported rich-text 스타일 시트를 공유 preferred·alternate 제목 집합, 상한이 적용된 URI·문서 기준 resolution, 트랜잭션 네이티브·Windows·Linux FDF/XFDF 게시와 함께 적용합니다
Version 2.966.0
Added
- 명시적인 print/screen 프로파일, 중첩 조건, 상한이 적용된 feature 범위로 네이티브 rich-text media query를 평가하고, 계산된 스타일을 저장된 appearance와 트랜잭션 FDF/XFDF import에 유지합니다
Version 2.965.0
Added
- 네이티브 XFA form 트리를 트랜잭션으로 만들고 clone·편집하며, 살아남은 node identity, event rollback, 지원되는 empty-merge 발생, 저장된 form packet을 작성된 템플릿과 독립적으로 보존합니다
Version 2.964.0
Added
- 완전한 OpenType CFF2 폰트를 기본 variation 좌표에서 네이티브 plain·rich·shaped·family appearance로 생성하고, 상한이 적용된 정적 CID-keyed CFF 1 출력에서 glyph identity, Unicode, 폭, embedding 권한을 보존합니다
Version 2.963.0
Added
- scoped CSS namespace 선언과 qualified selector를 네이티브 rich-text 필드와 Windows/Linux form 트랜잭션에 적용하고, 계산된 appearance, 상한이 적용된 namespace lookup, 정확한 no-op 게시, checked-build 호환성을 보존합니다
Version 2.962.0
Added
- 생성된 raw-font 주석 텍스트를 스타일 run 전반에서 공백과 하이픈 경계로 줄바꿈하며, 완전한 인코딩 문자, hard break, 자동 크기 조정, 상한이 적용된 cancellation을 보존합니다
Version 2.961.0
Added
- 없는 주석 텍스트 appearance를 원본 Type1C, CIDFontType0C, bare Type1 폰트 프로그램으로 그리며, Unicode 매핑, 자동 크기 조정, 간격, 행 높이, 상한이 적용된 불변 리소스를 보존합니다
Version 2.960.0
Added
- 표준 XFDF Stamp normal·rollover·down Form appearance를 내장 폰트·이미지 리소스, 상한이 적용된 비순환 그래프, 인증된 네이티브 트랜잭션, 기존 Windows/Linux 콜백으로 전달합니다
Version 2.959.0
Added
- complex not 목록, forgiving is·where 목록, anchored has 관계, filtered nth-child 위치를 네이티브 내부 rich-text 스타일 시트에 적용하고, selector specificity, 계산된 값, 폰트, 트랜잭션 FDF/XFDF appearance를 보존합니다
Version 2.958.0
Added
- JavaScript와 FormCalc에서 read-only 숫자 인덱스로 live 네이티브 Data DOM 자식 컬렉션에 접근하며, 현재 자식 순서, 유지된 script-object 참조, 독립 clone, 저장된 값, PDF appearance를 보존합니다
Fixed
- 숫자 할당, 삭제, property 정의를 현재 컬렉션과 유지된 lexical script object 내부 모두에서 거부하고, 상한이 적용된 event rollback과 재시도를 갖춥니다
Version 2.957.0
Added
- attribute selector, sibling combinator, 구조·위치 pseudo class, 상속 언어 매칭, compound 부정을 네이티브 내부 rich-text 스타일 시트에 적용하고, 실제 계산된 값, 폰트, 저장된 appearance, 트랜잭션 FDF/XFDF import를 보존합니다
Version 2.956.1
Fixed
- FormCalc nodes 자식 목록 경로를 실제 event 컴파일러로 해석하며, live form/property 컬렉션, Data DOM item 접근, 상한이 적용된 replay, 저장된 네이티브 값, PDF appearance를 보존합니다
Version 2.956.0
Added
- 완전한 OpenType CFF 폰트에서 네이티브 plain·rich·shaped 필드 appearance를 생성하며, 이름 키 glyph identity, 실제 CID-keyed charset, Unicode 매핑, embedding 권한, 공유 폰트 리소스를 보존합니다. 없는 FreeText appearance는 내장 OpenType 기본값으로 그립니다
Fixed
- CFF 파싱과 glyph 메트릭에 상한을 두고 cancellation과 스타일별 불변 reader를 유지하며, 여섯 네이티브 컴파일러 타깃에서 TrueType 동작을 보존합니다
Version 2.955.1
Security
- 정규화 바이트 직렬화 뒤 모두 0인 X25519와 X448 공유 비밀을 거부합니다. 약한 필드 limb이 0이 아닌 low-order 입력도 포함되며, 합의 결과는 빈 비밀과 새로운 진단으로 false를 유지합니다
Fixed
- 정수 오버플로와 범위 검사가 켜져 있어도 이식 SHA3/SHAKE 상수와 의도적인 2^64 나머지 키 합의 산술을 유지합니다. 32비트 Free Pascal의 전체 폭 P-256, P-384, P-521 교환이 포함됩니다
Version 2.955.0
Added
- length, 인덱스 읽기, item, namedItem, 순회, 독립 clone을 갖춘 live JavaScript form/property 자식 컬렉션을 추가하고, event와 반복 인스턴스 편집, 암시적 property 생성을 거치며 소유자 identity를 유지하고, 저장된 네이티브 값과 PDF 모양을 남깁니다
Fixed
- 유지된 live 목록을 현재 event 소유자에 붙여 두고, 제거된 소유자는 다른 인스턴스로 재지정하지 않고 거부하며, 컬렉션 할당·연산·마감 실패 아래에서 네이티브 값, 유지 상태, 저널 rollback을 보존합니다
Version 2.954.0
Added
- 타입, 클래스, ID selector, 자손과 자식 combinator, 그룹 selector, Unicode 식별자 이스케이프, specificity, importance, 소스 순서로 네이티브 rich-text 필드와 FDF/XFDF import에 내부 XHTML 스타일 시트를 적용합니다
Fixed
- 상한이 적용된 스캔과 매칭, cancellation, 정확한 커밋 no-op 바이트, 트랜잭션 콜백 rollback과 함께 실제 저장 값과 위젯 모양에 계산된 스타일을 유지합니다
Version 2.953.0
Added
- all, classAll, classIndex, clone, 멤버십 연산, 안정적인 유지 참조, 상한이 적용된 트랜잭션 재생, 네이티브 저장 PDF 소비로 독립적인 XFA query 노드 컬렉션을 추가합니다
Fixed
- 유지된 조회 instance manager를 현재 event 그래프에 붙여 두고, 일반 SOM 경로와 predicate를 원본 기본 스택과 연산 한도 안에서 평가합니다
Version 2.952.0
Added
- 네이티브, 일반 Windows, 버전이 붙은 콜백 XFDF 교환을 거쳐 원격 GoToR 주석 destination을 보존합니다. 정확한 좌표, Unicode 파일 명세, 선택적 윈도우 동작이 포함됩니다
Fixed
- 일반 로드된 문서 주석 import는 허용된 호출자 편집과 독립적인 소스 수명을 유지하면서 원본 암호화 권한, 서명, 필드 잠금에 대조해 인증합니다. 서명 ByteRange 정수를 Single 반올림 없이 읽고, 암호화 전에 공유 RC4 문자열 저장소를 분리합니다
Version 2.951.0
Added
- normal appearance가 없는 Square, Circle, Polygon, FreeText 주석에 상한이 적용된 구름 테두리를 그리며 폭, 대시, 투명도, 소스 그래프를 보존합니다. FreeText 뷰 사이에서 디코딩 바이트 청구를 반복하지 않고 불변인 생성 폰트 바이트를 공유하되, 파싱 예산과 cancellation은 유지합니다
Version 2.950.0
Added
- 상한이 적용된 소유권, 상속된 네임스페이스, 안정적인 import 참조, 바인딩 새로 고침, 완전한 event rollback으로 네이티브 XFA Data DOM 노드를 만들고, 복제하고, 이름을 바꾸고, 삽입하고, 제거합니다. 저장된 XML과 네이티브 PDF 소비자를 거쳐 UTF-8 속성과 유지된 FormCalc 참조를 보존합니다
Version 2.949.0
Added
- 네이티브, Windows, Linux XFDF 교환을 거쳐 선택된 choice 옵션이 없는 상태와 빈 export 값을 선택한 상태의 구분을 보존합니다. 정확한 no-op 공개, 상한이 적용된 검증, 검사된 암호화 문서 로딩이 포함됩니다
Version 2.948.0
Fixed
- PDF 경로, 패턴, alpha, 블렌드 연산자를 보존하면서 캡처된 소수 클립 커버리지로 채워진 글리프 마스크를 그리고, 할당 전에 래스터 작업 메모리 용량을 확인합니다
Version 2.947.1
Fixed
- XFA 파싱과 직렬화 동안 명시적인 빈 기본 XML 네임스페이스 선언을 보존해, 저장과 다시 읽기 뒤에 무자격 데이터 하위 트리가 조상 네임스페이스를 상속하지 않게 합니다
Version 2.947.0
Added
- 사각 주석의 부조와 안쪽 파인 테두리, 측정된 Unicode 또는 rich 선 캡션을 그리며 투명도, 끝점 오프셋, 기존 appearance, 상한이 적용된 폰트 리소스, 주석 클리핑을 보존합니다
Version 2.946.3
Fixed
- xfa.host.resetData를 네이티브 event로 적용하면서 Data XML import로 잘못 읽지 않고, 템플릿 기본값, 바인딩된 값, 반복 scope, 대기 중인 편집, 트랜잭션 rollback을 보존합니다
Version 2.946.2
Fixed
- 컴파일러 범위와 오버플로 검사를 켠 상태로 SHA-1, SHA-256, SHA-384, SHA-512 워드 산술을 바로잡습니다. 공개 인터페이스를 바꾸지 않고 유효한 다이제스트와 AES-256 password 인증을 유지합니다
Version 2.946.1
Fixed
- 네이티브 XML 직렬화, 영구 property 기본값, 반복 스크립트 event, 트랜잭션 rollback을 거쳐 값 없이 존재하는 XFA 속성과 UTF-8 이름, 값, 네임스페이스, 인덱스 query를 보존합니다
Version 2.946.0
Added
- 명시적인 읽기 전용 Preview/Print 폰트 권한과 바뀌지 않은 전체 폰트 바이트로 임시 rich 주석 텍스트를 그립니다. 암시적 미디어 placeholder 없이 편집 가능한 임베딩 정책과 기존 Screen appearance를 보존합니다
Version 2.945.0
Added
- 네이티브와 구형 XFDF 교환을 거쳐 로컬 주석 페이지와 이름 붙은 destination을 보존합니다. 정확한 상한이 적용된 소수 토큰, 자격이 붙은 Adobe XML, 중복 속성 검증, 트랜잭션 Windows/Linux 콜백 공개가 포함됩니다
Version 2.944.0
Added
- JavaScript와 FormCalc로 라이브 XFA choice 표시·export 항목을 다루면서, 살아남는 별칭, 정확한 중복·빈 선택, 네이티브 인스턴스별 리스트, 저장된 네이티브·legacy PDF appearance를 한정된 변경 한도 아래에서 유지합니다
Version 2.943.1
Fixed
- 네이티브 스칼라·타입이 있는 rich-text 트랜잭션이 섞이거나 빈 배치가 변경 없이 끝날 때에도 로드된 PDF 바이트를 그대로 보존하고, 대기 중인 그래프 편집, 인증된 서명·암호화 정책, 리소스 한도, 원자적 게시를 유지합니다
Version 2.943.0
Added
- 매핑된 주석 XFDF를 Windows file job과 기존 V1 콜백으로 주고받으며, 인증된 append 트랜잭션, 한정된 바이너리·Unicode 데이터, 변경 없을 때의 정확한 바이트 보존, 원자적 게시를 갖춥니다
Version 2.942.0
Added
- normal appearance이 없는 지원 대상 주석을 한정된 임시 지오메트리, 선 끝모양, 아이콘, Unicode FreeText로 렌더링하고, 원본 리소스, rich text, 보기/인쇄 플래그, 취소를 유지합니다
Version 2.941.1
Fixed
- 네이티브 XFA choice 선택의 유일성을 한정된 취소 가능 정렬로 검증하면서, 대소문자를 구분하는 정확한 export 값, 원본 선택 순서, 트랜잭션 실패 동작을 유지합니다
Version 2.941.0
Added
- 독립적으로 캐스케이드되는 네이티브 CSS와 기존 타입이 있는 자간·단어 간격을 셰이핑된 run, 물리 줄, 피팅, 저장된 appearance에 적용하고, 계산된 포인트 직렬화, 정확한 소수 반올림, 트랜잭션 방식 Windows/Linux JSON 게시를 갖춥니다
Version 2.940.0
Added
- 열여덟 종류의 매핑된 주석 타입을 한정된 네이티브 XFDF와 Linux V1 JSON 연산으로 주고받으며, Unicode rich 콘텐츠, 콜아웃, 투명 색, 바이너리 첨부, popup·전달-회신 링크, 인증된 권한, 트랜잭션 방식 append 게시를 유지합니다
Version 2.939.0
Added
- legacy XFA 콤보·리스트 필드를 정확한 반복 인스턴스 export, 표시 라벨, 선택 인덱스, 스크롤 위치, 스타일 적용 Unicode appearance와 함께 만들고, 지정 폰트를 쓰는 분리형 choice 팩토리와 메타데이터 전용 모드로 상위 필드 플래그와 필드별 롤백을 유지합니다
Version 2.938.0
Added
- 네 가지 표준 color intent를 그래픽 상태, 폼, 이미지, 셰이딩, 패턴, 투명도 그룹 전반에서 이미지 재정의와 알 수 없는 이름의 상대 fallback과 함께 렌더링하고, 한정된 취소 가능 ICC 변환 캐시를 갖춥니다
Version 2.937.0
Added
- 실제 반복 인스턴스 범위에서 독립적인 legacy XFA 라디오 그룹을 만들고, 그룹 전체 편입 롤백과 분리형 지정 폰트 네이티브 멤버 appearance API로 정확한 export, 선택 상태, 스타일 적용 Unicode 캡션을 유지합니다
Version 2.936.1
Added
- FNV 해시 곱셈의 하위 32비트를 명시적으로 남겨 산술 오버플로 검사를 켠 상태로 유효한 PDF 딕셔너리와 trailer를 파싱합니다
Version 2.936.0
Added
- 명시적으로 지정한 타입이 있는 JSON rich-text 줄 높이를 Windows와 Linux 저장 appearance에 묶고, 작성된 run, 지정된 부모 메트릭, 한정된 집계 계획, 트랜잭션 방식 혼합 필드 갱신을 유지합니다
Version 2.935.1
Added
- portable XFA 패스워드 appearance에서 보충 Unicode 문자를 한 번만 세고, 원본 값을 유지하며, 스칼라 단위 취소로 마스크를 할당하기 전에 집계 glyph 예산을 강제합니다
Version 2.935.0
Added
- rich-text 줄 높이, 계산된 CSS 길이, 상속된 배율, 부모 폰트 메트릭을 네이티브 레이아웃, 저장 appearance, Windows file job·콜백, Linux FDF/XFDF JSON 임포트 전반에서 보존하고, 한정된 metric 폰트 계획을 갖춥니다
Version 2.934.0
Added
- 인스턴스별 유효 폰트 패밀리·스타일, 편집 가능한 임베드 폰트 리소스, 스칼라 패스워드 마스킹, 트랜잭션 방식 리소스 편입으로 실제 Unicode legacy XFA 텍스트·숫자·날짜·패스워드 appearance를 만듭니다
Version 2.933.0
Added
- 다차원 샘플링 cubic 컬러 함수를 기존 4노트 스칼라 관례, 짧은 차원 선형 fallback, 한정된 텐서 연산, 취소, 그대로인 스칼라 보간으로 평가합니다
Version 2.932.0
Added
- 부호 있음·없음 JPEG 2000 컴포넌트를 혼합 정밀도, 서브샘플링, 불투명도와 함께 26비트까지 디코딩하고, 한정된 샘플을 정규화하며, 렌더링 전에 JPX 이미지 BitsPerComponent 선언은 무시합니다
Version 2.931.0
Added
- legacy XFA 체크박스의 on·off·중립 export 상태, 스타일 적용 Unicode 캡션, 네이티브 appearance 번들을 보존하고, 특수 PDF 이름을 일관되게 인코딩하며, 취소된 위젯 편입 뒤에 직접 페이지 리소스를 복구합니다
Version 2.930.0
Added
- 자동 optional-content 용도 적용을 명시적 줌·언어·사용자 컨텍스트와 영구 네이티브 수동 선택, 한정된 Linux JSON 연산 상태로 평가하고, 문서가 바뀌면 빌려 온 렌더링 컨텍스트를 무효화합니다
Version 2.929.0
Added
- 정렬된 지정 regular 폰트 패밀리로 네이티브 세터, Windows job, 버전 있는 Windows/Linux 콜백 전반에서 스칼라 텍스트, comb 셀, choice 라벨, 버튼 마크를 만들고, 일반 스칼라 메타데이터를 유지하며, 빈 choice 선택과 선택된 빈 export를 구분합니다
Version 2.928.0
Added
- ExtGState dash 배열과 phase를 한정된 타입이 있는 PDF 배열 스캔으로 렌더링하면서, 코멘트, 엄격한 피연산자 검증, 상속된 stroke 지오메트리, 취소, 일반 텍스트 배열을 유지합니다
Version 2.927.0
Added
- 기존 Windows ApplyXFAAsAcroForm 푸시버튼의 스칼라·rich 캡션을 실제 설치된 패밀리/스타일 프로그램, 영구 인스턴스별 재정의, 네이티브 normal/down/rollover appearance 번들로 그리고, 실제 AcroForm 폰트 리소스를 등록합니다
Version 2.926.0
Added
- 한정된 인라인 CSS font shorthand를 독립적으로 캐스케이드되는 크기·굵기·이탤릭·지정 패밀리 후보로 확장하고, 상속된 상대 크기, 생략된 스타일 리셋, important 구성 요소 우선순위, 실제 저장 폰트 appearance를 유지합니다
Version 2.925.0
Added
- Windows file job과 V1 콜백으로 완전한 스타일 적용 rich-text 그래핌마다 정렬된 호출자 지정 폰트 패밀리를 고르고, CSS·타입이 있는 후보, 실제 빈 값 트랜잭션, 집계 폰트 예산을 유지합니다
Version 2.924.0
Added
- 기본 문서 optional-content 그룹과 멤버십 표현식을 마킹된 페이지 콘텐츠, form XObject, 주석 전반에서 렌더링하고, 숨겨진 그래픽·텍스트 상태를 보존하며, 명시적 보기/인쇄 용도를 네이티브 Linux V1 JSON 인터페이스로 노출합니다
Version 2.923.0
Added
- 정렬된 rich-text 폰트 후보 리스트를 네이티브 appearance와 Linux V1 JSON에서 보존하고, 섞인 스칼라·기존 타입이 있는 run을 정확한 페인트, 지정 스타일 프로그램, 2단계 게시로 Windows file job과 그대로인 V1 콜백에 묶습니다
Version 2.922.0
Added
- 네이티브 주석 보기/인쇄 가시성을 PDF 2.0 Invisible 규칙으로 고르고, RichMedia·Projection 정적 appearance와 암묵적 Text 변환을 인식하며, 실제 OS 오류 진단과 함께 한정된 취소 가능 Windows PNG 원자적 교체를 유지합니다
Version 2.921.0
Added
- 네이티브 XFA 푸시버튼 스칼라·XHTML 캡션을 실제 지정 패밀리·스타일 프로그램, 보존된 인라인 구분자, 작성된 패딩, 실제 normal/down/rollover appearance, 캡션 가시성, 영구 반복 인스턴스 재정의로 렌더링합니다
Version 2.920.1
Fixed
- 성공한 네이티브 Linux C ABI PDF 변경이 커밋된 원본 스냅샷과 계속 맞물려, 이어지는 같은 값 FDF·XFDF 임포트가 낡은 입력 바이트를 되살리는 대신 게시된 폼 값, 타입이 있는 appearance, 그려진 텍스트, 임포트된 페이지를 정확히 유지합니다
Version 2.920.0
Added
- 섞인 스칼라 필드와 기존 타입이 있는 rich-text run을 하나의 독립 원자적 문서 트랜잭션으로 저장하고, 정확한 appearance 값과 지정 폰트 프로그램을 유지하며, 인증된 정책과 현재 그래프 편집을 보존하고, 실제 읽기 전용 appearance no-op을 인식합니다
Version 2.919.0
Added
- 명시적으로 지정한 후보 폰트 패밀리로 완전한 스타일 적용 Unicode 그래핌을 해석하고, 작성된 값과 정확한 appearance 스타일을 보존하며, 그대로인 V1 콜백으로 옵트인 네이티브 Linux JSON fallback을 노출하고, 구성된 프로그램을 로드하는 동안 실제 집계 폰트 허용량을 유지합니다
Version 2.918.0
Added
- 네이티브 XFA Boolean 캡션을 유효 XHTML과 지정된 이름 스타일 폰트에서 렌더링하고, 반복 인스턴스 오버레이와 저장된 runtime XML을 보존하며, 자동 캡션 예비 공간을 최종 논리 텍스트 줄 범위로 잽니다
Version 2.917.0
Added
- 중첩 파일 경로나 기존 버전 있는 폰트 콜백으로 Windows FDF·XFDF 임포트에 실제 이름 있는 패밀리·스타일 프로그램을 고르고, 동기화된 랜덤 소스 읽기를 순차 트랜잭션 게시에서 분리합니다
Version 2.916.0
Added
- 182개 내장 legacy CMap을 한정된 1~4바이트 코드, 정확한 부모·자식 쓰기 모드, Unicode 매핑, 결정론적 malformed 코드 복구, 취소 가능 상속, 번들 재배포 고지와 함께 디코딩·렌더링합니다
Version 2.915.0
Added
- 폰트 메트릭 선택 창과 영구 저장된 top 인덱스로 선택된 네이티브 XFA 리스트 옵션을 보이게 유지하고, 완전한 옵션·값 배열을 보존하며, 한정된 보이는 glyph 준비로 반복 인스턴스 폰트 변경과 이벤트 롤백을 유지합니다
Version 2.914.1
Fixed
- 실제 메모리 예약을 획득한 뒤 포그라운드 메모리 캐시 히트와 협력적 프리페치 취소를 겹쳐 실행하고, 연산 캐시 텔레메트리를 유지하며, 캐시 잠금·예약 대기 후 취소를 다시 확인하는 한편 엄격한 미스 순서와 스레드 조인을 유지합니다
Version 2.914.0
Added
- 여섯 가지 커스텀 마크, 둥근·사각 테두리, 마크 색·크기, 다섯 가지 캡션 배치, 공유 임베드 캡션 폰트로 네이티브 XFA Boolean appearance를 만들고, 이벤트 실행과 저장 PDF 다시 로드 전반에서 되돌릴 수 있는 Unicode export 별칭과 구별되는 합법 중립 상태를 보존합니다
Version 2.913.2
Fixed
- 끊긴 조각보다 회전된 매트릭스 바코드 전체를 먼저 디코딩하고, 전체 그리드 샘플링 전에 정확히 일치하지 않는 QR 파인더를 거부하며, 더 조밀한 그룹핑, 기존 선형 바 동작, 원자적 스캔 예산, 그대로인 2초 마감을 유지합니다
Version 2.913.1
Added
- 기존 암묵적 XFA 값을 한정된 라이브 데이터 컨텍스트로 해석하며 selector 파싱을 스크립트 연산 허용량에 다시 청구하지 않고, 기존 트랜잭션 마감과 명시적 바인딩 동작을 유지합니다
Version 2.913.0
Added
- 구성된 네이티브 rich 폰트 패밀리를 그대로인 Linux V1 JSON 콜백으로 골라 타입이 있는 채움과 FDF·XFDF 임포트에 쓰고, 실제 필요한 패밀리·스타일 프로그램을 집계 예산으로 로드하며, 구현된 두 rich 프로필을 알립니다
Version 2.912.0
Added
- Windows file job과 V1 콜백으로 실제 FDF·XFDF를 임포트·익스포트하며, 불변 소유 입력, 현재 저장 안 된 그래프 준비, 실제 4폰트 rich appearance, 인증된 서명 AES 정책, 두 출력 콜백이 모두 성공한 뒤에만 컨텍스트 커밋을 갖춥니다
Version 2.911.0
Added
- 네이티브 XFA 사각형·선·호 드로잉과 인라인 PNG·JPEG 이미지를 실제 샘플 디코딩, 알파 마스크, 맞춤 가로세로 비율, 회전 배치, 한정된 준비, 취소 아래 트랜잭션 소유권으로 만듭니다
Version 2.910.0
Added
- NoZoom·NoRotate 주석 appearance를 변환된 왼쪽 위 사각형 앵커 주위에 맞추고, UserUnit, 맞춤 폼 지오메트리, 불투명도, 실제 페이지 클립을 스케일·회전 전반에서 유지합니다
Version 2.909.0
Added
- rich run마다 실제 지정된 이름 있는 TrueType 패밀리와 한정된 XHTML font-family 선언을 고르고, 패밀리별 스타일 메트릭과 마크 캐시를 유지하며, 패밀리를 인식하는 정규화 비교로 실제 FDF·XFDF rich 값을 임포트합니다
Version 2.908.1
Fixed
- 유효한 인라인 rich-text 선언을 독립 important 우선순위, 감싸는 계산된 font-size 기준, 명시적 상속 속성으로 적용하고, CSS 코멘트와 따옴표·함수 선언 경계를 유지합니다
Version 2.908.0
Added
- 저장된 runtime 데이터에서 곧바로 실제 네이티브 XFA 콤보 박스, 리스트 박스, 다중 선택 필드, 체크박스, 구조적으로 스코프된 라디오 그룹을 만들고, 짝지어진 표시/export 라벨, 인스턴스별 항목, 접근 플래그, 독립 네이티브 appearance 상태를 갖춥니다
Version 2.907.1
Fixed
- 이름 값·상속 폼 필드에서 실제 PDF 16진수 이스케이프와 UTF-8 바이트를 디코딩하고, 네이티브 저장 문서 다시 로드에서도 공백·문장부호·Unicode 버튼 export 상태를 유지합니다
Version 2.907.0
Added
- 실제 폰트 CID-to-GID 매핑으로 실제 CID-keyed CFF glyph 신원과 한정된 notdef 대체를 렌더링하고, 이스케이프된 CMap 파싱 전반에서 독립 텍스트 추출과 취소 검사를 유지합니다
Version 2.906.0
Added
- 첨부 앵커가 없을 때 실제 선택 glyph 경계와 정규 결합 클래스로 스타일 교차 결합 기호를 배치하고, 독립 폰트 스케일, 같은 쪽 스태킹, 이중 기호의 실제 해석된 항목 방향을 갖춥니다
Version 2.905.1
Fixed
- 이스케이프된 predictor 파라미터를 실제 DecodeParms 딕셔너리 안에서 해석하고, 균형 잡힌 외부 딕셔너리 문법 뒤의 실제 스트림 토큰을 찾으며, 평범한 Windows 로딩에서 공백 값 바이너리 xref 페이로드를 보존합니다
Version 2.905.0
Added
- Linux와 Windows에서 XDP와 저장된 runtime 값으로 곧바로 네이티브 PDF 페이지 트리, 반복 편집 가능 필드, 푸시버튼, Unicode 정적 텍스트를 만들고, 실제 임베드 appearance와 호출자 출력 전 한정된 후보 준비를 갖춥니다
Version 2.904.2
Fixed
- 중첩 암호화 설정과 섞지 않고 실제 외부 cross-reference 스트림 딕셔너리를 읽고, 이스케이프된 항목 이름을 해석하며, 평범한 Windows 증분 리비전에서 직접 암호화 딕셔너리를 보존합니다
Version 2.904.1
Fixed
- 자동 독립 셰이핑과 단순 다중 줄 필드 줄바꿈에서 완전한 단락 방향 제어와 짝지은 괄호를 보존하고, 물리 줄 결합 컨텍스트, 불변 단락 캐싱, 한정된 총 glyph 출력을 갖춥니다
Version 2.904.0
Added
- Linux에서 네이티브 XFA JavaScript, 이벤트 저널, Data DOM, XML, FormCalc, ICU 로캘 runtime을 소유 공유 모듈 임대와 실제 단조 시계로 실행하면서 기존 Windows Unicode 초기화를 유지합니다
Version 2.903.1
Fixed
- Unicode 방향 전용 셰이핑 클러스터를 문자 간격 0 전진으로 유지하면서 논리 제어 문자, glyph 신원, 정상적인 보이는 클러스터·단어 간격을 유지합니다
Version 2.903.0
Added
- 줄바꿈된 rich 스타일 줄 전반에서 방향 임베딩, 재정의, isolate, 짝지은 괄호 단락 컨텍스트를 보존하고, 한정된 단락 기반·캐시된 물리 줄 순서 API를 노출하며, 해석된 레벨·스크립트로 실제 줄 항목을 셰이핑합니다
Version 2.902.0
Added
- 실제 Linux JSON C ABI 콜백으로 스타일 적용 FDF·XFDF를 임포트·익스포트하고, 구성된 실제 폰트 페이스를 임베드하며, 서명 정책과 no-op 임포트의 정확한 비공개 원본 바이트를 유지하고, 두 콜백 출력이 모두 성공한 뒤에만 현재 문서 상태를 게시합니다
Version 2.901.0
Added
- Coons·텐서 패치 메시 셰이딩을 한정된 cubic 지오메트리, 소스 공간 색 보간, 이어지는 모서리, 접힘 처리, 트랜잭션 방식 리소스·취소 한도로 렌더링합니다
Version 2.900.0
Added
- 네임스페이스를 인식하는 네이티브 XFA Data DOM XML을 트랜잭션 방식으로 읽고 저장하며, 정렬된 혼합 콘텐츠와 데이터 바인딩 신원을 보존하고, 호스트 값을 선형 시간에 인용 처리하며, 한정된 엔진 리플레이로 세션별 정확한 JavaScript 모듈 임대를 유지합니다
Version 2.899.0
Added
- 스타일 적용 결합 기호를 실제 GPOS 베이스·리가처·마크 앵커에 독립 폰트 스케일로 붙이고, rich 위젯 클립 안에서 음수 원점 glyph 아웃라인을 보존하며, 보이는 쌓임 기호에 맞춤 줄 범위를 예약합니다
Version 2.898.0
Added
- 한정된 FDF·XFDF rich text를 읽고 쓰고, 네이티브 XHTML 스타일 span을 네 가지 실제 임베드 폰트 스타일로 디코딩하며, 기존 읽기 전용 rich 값의 정규화 비교를 포함해 실제 appearance를 서명·암호화 PDF에 트랜잭션 방식으로 임포트합니다
Version 2.897.0
Added
- 선택된 Unicode 스타일 span을 실제 주변 HarfBuzz 컨텍스트로 셰이핑하고, 네이티브 단락 순서·방향 API를 노출하며, 논리 스타일과 객체 소유권을 유지하면서 타입이 있는 rich 항목을 실제 줄바꿈된 물리 줄 안에 배치합니다
Version 2.896.0
Added
- 네이티브 XFA 바인딩 SOM을 반복 데이터 범위에서 한정된 자손 순회, 이스케이프된 이름, Unicode 매칭, 인스턴스별 누락 리프 fallback, 트랜잭션 방식 runtime 값 동기화로 해석합니다
Version 2.895.1
Fixed
- 정적 네이티브 XFA 이벤트 지원을 소유 JavaScript 엔진마다 한 번 컴파일하고 완전한 압축 동적 이벤트 인자를 리플레이하며, 클로저, 기록된 호스트 응답, 인스턴스 격리, 기존 저널 예산, 트랜잭션 마감을 롤백 중에도 유지합니다
Version 2.895.0
Added
- 기존 버전 있는 네이티브 Linux JSON 콜백으로 실제 FDF·XFDF 바이트를 임포트·익스포트하고, Unicode 필드 값, AES 보안, 인증된 서명 정책을 보존하며, 출력이나 결과 게시가 실패하면 현재 문서를 롤백합니다
Version 2.894.0
Fixed
- 너무 넓은 타입이 있는 rich text를 폰트·색 스타일 전반에서 완전한 Unicode 그래핌 경계로 줄바꿈하고, 줄 배정 전에 실제 스타일 범위를 재며, 나눌 수 없는 초과 클러스터, 섞인 포인트 크기, 명시적 문자 간격을 보존합니다
Version 2.893.1
Security
- 서명 정책으로 보호되는 폼 갱신을 받아들이기 전에 실제 RFC3161 문서 타임스탬프 안에서 필요한 Adobe 서명 CRL·OCSP 증거를 인증하고, 누락·폐기·만료·신뢰 불가 증거에 대한 트랜잭션 방식 거부를 유지합니다
Version 2.893.0
Added
- 한정된 네이티브 FDF·XFDF 스칼라 필드 데이터를 읽고 쓰고, 실제 Unicode·choice·버튼 appearance를 독립 게시된 PDF에 트랜잭션 방식으로 임포트하면서 인증된 서명 정책과 AES 암호화를 유지합니다
Version 2.892.0
Added
- 한정된 자유형·격자 삼각 메시 셰이딩을 실제 좌표·플래그·함수·색·투명도 의미로 렌더링하고, 16진수 Indexed 팔레트 스트림을 정확히 한 번 디코딩합니다
Version 2.891.0
Added
- 정렬된 네이티브 XFA XML 코멘트와 처리 명령을 이벤트 임포트, 직렬화, 복제, 트랜잭션 롤백 전반에서 보존하면서, 스칼라 텍스트, rich text, SOM 요소 선택에서는 제외합니다
Version 2.890.1
Fixed
- 일시적인 Windows 원자적 게시 잠금을 최대 여덟 번의 취소 가능 교체 시도로 복구하면서, 정확한 대상, 준비된 바이트, 영구 운영체제 오류, 소유 스테이징 정리를 유지합니다
Version 2.890.0
Added
- 타입이 있는 rich 스타일 run 전반에서 합법적인 Unicode 단어·줄바꿈 없는 공백·문장부호·숫자 그룹을 보존하고, 실제 스타일 폰트 전진으로 그룹 전체를 맞추며, 섞인 크기 베이스라인을 유지하고 스타일 경계의 CRLF를 합칩니다
Version 2.889.0
Added
- 보이는 필드 커밋 뒤에 실체화된 숨김·비가시 XFA 스칼라 별칭을 동기화하면서, 네이티브 반복 데이터 범위, 명시적 빈 값, 정확한 트랜잭션 롤백을 유지합니다
Version 2.888.0
Added
- 기존 문서 API로 완전한 Unicode 17 속성과 문맥 줄바꿈을 적용하고, raw 또는 LB1 해석 portable 속성 조회를 노출하며, 정해진 enum 서수와 테일러링 계약을 유지하고 soft-hyphen 금지를 지킵니다
Version 2.887.0
Added
- 즉시 스크립트 읽기, 네임스페이스·혼합 콘텐츠 보존, 유지되는 반복 인스턴스 신원, 트랜잭션 롤백, 실제 저장 XHTML 렌더링으로 영구 네이티브 XFA exData XML을 임포트·직렬화합니다
Version 2.886.0
Added
- 한정된 스트리밍, SHA256·SHA384·SHA512 임프린트, 신뢰된 TSA 신원·nonce 바인딩, 필수 ESIC 확장 선언, 인증된 인증서·필드 잠금 예외로 독립 RFC3161 PDF 문서 타임스탬프를 만들고 인증합니다
Version 2.885.0
Added
- Unicode 17 기본 줄바꿈 기회를 노출하고 실제 네이티브 rich 필드에서 소비하며, 줄바꿈 없는 공백·하이픈·문장부호 그룹과 Unicode 명시적 구분자를 정확한 기존 V·RV 값으로 보존합니다
Version 2.884.0
Added
- portable Unicode 17 기본 확장 그래핌 경계를 노출하고 너무 넓은 rich 단어를 완전한 클러스터 경계에서 줄바꿈하며, 실제 Unicode appearance 콘텐츠를 유지하고 부분 문자열 셰이핑 뒤 결합형 폭 변화를 바로잡습니다
Version 2.883.0
Added
- 영구 네이티브 XFA 이미지·지오메트릭 값 자식을 만들고 실제 PNG 알파, 이미지 DPI, 가로세로 지오메트리를 렌더링하면서 반복 인스턴스 격리와 트랜잭션 롤백을 유지합니다. 이전에 검게 렌더링되던 FPC 이미지 픽셀을 바로잡습니다
Version 2.882.0
Added
- Form·Type3·Pattern 렌더링에서 실제 자식 스트림 폰트 리소스와 PDF 텍스트 파라미터를 상속하고, 그래픽 상태 텍스트 저장을 유지하며, 보이지 않는 Type3 텍스트를 지키고, 독립 주석 appearance 기본값을 재설정합니다
Version 2.881.0
Added
- 필수 서명 인증서 바인딩으로 표준 분리형 CAdES 서명을 자동으로 인증하고, 검증·허용된 폼 갱신·장기 검증 증거를 위해 실제 16진수 또는 이스케이프된 리터럴 Contents 문자열을 일관되게 읽습니다
Version 2.880.2
Fixed
- 빈 초기 run, 인라인 스타일 변경, 명시적 줄바꿈에서도 rich 단락 정렬을 유지하고, 요청된 사각형·원 테두리와 측정된 하이라이트 행을 조용히 생략하는 대신 그립니다
Version 2.880.1
Fixed
- 페이지 렌더러 할당과 컨텍스트 설치 전, 초기화 도중에 취소를 확인하고, 생성이 처음에 거부될 때 활성 호출자 컬러 컨텍스트를 유지하며, 부분 비트맵을 게시하지 않고 빌려 온 디스플레이 리스트를 해제합니다
Version 2.880.0
Added
- 스크립트 생성 뒤 실제 네이티브 XFA 스칼라 드로잉·캡션 값을 렌더링하고, 명시적 빈 값과 반복 인스턴스 격리를 보존하며, 이후 네이티브 드로잉이 예산을 소진해도 정확한 롤백을 유지합니다
Version 2.879.0
Added
- 즉시 필드·데이터·공유 별칭 동기화, 타입이 있는 폼 영속화, 위젯 커밋, 반복 인스턴스 격리, 정확한 트랜잭션 롤백으로 영구 네이티브 XFA 스칼라 값 자식을 만듭니다
Version 2.878.0
Added
- 병합·분리 위젯, 회전, 암호화, 인증 워크플로를 위한 임베드 Unicode 폰트가 든 실제 Windows 서명 appearance 프로필을 생성하고, 필요한 AppearanceFilter를 실제 생성된 프로필 기준으로 강제합니다
Version 2.877.0
Added
- 상속된 패턴 원점, 중첩 셀, 겹침, stroke·스텐실 페인트, 투명도, 한정된 취소로 실제 색 있는·없는 PDF 타일링·셰이딩 패턴을 네이티브 Linux·Windows 대상 전반에서 렌더링합니다
Version 2.876.1
Fixed
- 누락 인스턴스 폼·템플릿 기본값을 적용하면서도 완전한 XFA SOM 바인딩과 실제 방출된 인스턴스 데이터 선택을 유지하고, 다른 반복 항목에서 값을 빌려 오지 않습니다
Version 2.876.0
Added
- 서명된 Windows Adobe RevocationInfoArchival 속성에 인증된 CRL·OCSP 증거를 임베드하고, 실제 seed 정책을 강제하며, 서명을 게시하기 전에 신뢰 상태, 응답 인가, 신선함을 검증합니다
Version 2.875.0
Added
- 읽을 때 데이터를 지어내지 않고 실제 XFA 필드 기본값을 해석하고, 명시적 빈 인스턴스 값을 보존하며, 편집이 공유 템플릿을 수정하지 않고 독립 인스턴스 데이터에 쓰게 합니다
Version 2.874.0
Added
- 타입이 있는 Unicode 스타일 run, 실제 임베드 regular·bold·italic·bold-italic 폰트, 측정된 섞인 크기 appearance 베이스라인, 장식, 위젯·암호화 출력 전반의 동기화된 V/RV 값으로 네이티브 rich-text 필드를 편집합니다
Version 2.873.0
Added
- 네이티브 스크립트로 영구 인스턴스별 XFA UI choice를 만들고, multiline과 측정된 긴 단어 appearance를 갖춘 실제 텍스트·패스워드·choice 위젯을 다룹니다
Version 2.872.0
Added
- P1·P2·P3 권한과 인증된 Unicode 법적 증명으로 실제 Windows DocMDP 인증 서명을 만들고, 필요한 seed 정책과 FieldMDP 잠금을 지키며, 서명된 정책이 허용하는 경우에만 이어지는 서명을 허용합니다
Version 2.871.1
Fixed
- XFA 이벤트 본문을 자체 렉시컬·엄격 스코프에서 실행하면서 외부 스코프의 필드 별칭, 이벤트 this 값, 명시적 반환, 정확한 실패 롤백을 유지합니다
Version 2.871.0
Added
- 실제 네이티브 이벤트 스크립트로 누락된 XFA 폰트·단락·채움·색·테두리·모서리 속성을 만들고, 정확한 롤백으로 안정적인 인스턴스별 폼 바인딩을 영속화하며, 유효 스타일 변경 뒤 선택적 위젯 appearance를 다시 생성합니다
Version 2.870.0
Added
- 명시적 GDI 표준 폰트 아웃라인과 올바른 Win32 OpenJPEG 호출 규약으로 실제 네이티브 Windows Cairo 출력을 렌더링하고, 재현 가능한 고정 네이티브 의존성과 독립 출력 수용을 사용합니다
Version 2.869.0
Added
- 실제 동기 C ABI RFC 3161 전송 콜백과 SHA256·SHA384·SHA512 임프린트, 인증된 TSA 신뢰·CRL 검사, 필수 타임스탬프 seed 제약, 한정된 트랜잭션 게시로 Windows 문서에 서명합니다
Version 2.868.0
Added
- 유지되는 Unicode 값과 AES-256 정책으로 마스킹된 패스워드·리터럴 파일 선택 필드 appearance를 생성하고, 이스케이프된 보충 Unicode를 네이티브 JSON ABI로 운반하며, subnormal PDF 십진 소스 토큰을 유지하고, 화면 DC 없이 RGB 프리페치 버퍼를 만듭니다
Version 2.867.0
Added
- 측정된 단어 경계, 명시적 줄바꿈, 공유 줄 베이스라인·정렬, 실제 양쪽 정렬 단어 간격, 조각 링크 지오메트리로 인라인 스타일에 걸친 XFA rich text를 줄바꿈하면서 네이티브 반복 인스턴스 XDP 영속화를 유지합니다
Version 2.866.1
Added
- raw 서명 RFC 3161 토큰을 실제 지원되는 SHA256·SHA384·SHA512 메시지 임프린트 알고리즘으로 인증하면서, 기존 SHA256 요청 기본값과 전체 토큰 신뢰·폐기 검사를 유지합니다
Version 2.866.0
Added
- 섞인 크기 XFA rich text run을 공통 저장 PDF 베이스라인에 맞추고, 호출자 텍스트 위치 모드를 유지하며, 빈 단락 전환을 포함해 인접 단락 여백 중 큰 쪽을 적용합니다
Version 2.865.0
Added
- 임프린트를 다시 해싱하지 않고 명시적 SHA256·SHA384·SHA512 메시지 임프린트에 대해 RFC 3161 타임스탬프를 요청·인증하며, 엄격한 다이제스트 길이, 새로운 nonce, 한정된 전송, 신뢰 체인, 폐기 검증을 유지합니다
Version 2.864.0
Fixed
- 완전한 선형 래스터와 quiet-zone 후보 그룹을 우선해 기존 바코드 스캔 마감을 유지하고, 파인더 허용 오차를 바꾸지 않으면서 내부 모듈 샘플링 전에 잘못된 DataMatrix projective 파인더 테두리를 거부합니다
Version 2.863.0
Added
- 유효한 상속 Windows 서명 seed·인증서 제약을 실제 다이제스트·CAdES 선택, Unicode 서명 정보, 정규화된 간접 필드 잠금, 인증된 과거 잠금 권한, 허용된 두 번째 서명, 암호화 폼 정책으로 지킵니다
Version 2.862.0
Added
- 한정된 지오메트리·함수 평가, 상속된 클리핑, Domain·Matrix·Extend·BBox 의미, 보정된·특수 색, 투명도, 소프트 마스크, 블렌딩, knockout 그룹으로 실제 네이티브 function·axial·radial PDF 셰이딩을 렌더링합니다
Version 2.861.0
Added
- 보이는 normal appearance와 명시적 Unicode 하이라이트로 실제 네이티브 주석 계약 검토 PDF를 익스포트하고, 원본 콘텐츠와 증분 서명 리비전을 유지하며, 인증된 P3 주석 권한과 암호화 사용자 권한을 강제하고, 콜백 게시 전에 한정된 출력을 준비합니다
Version 2.860.0
Added
- 네이티브 Linux 서명·검증 옵션을 실제 다이제스트 선택, Unicode 서명 메타데이터, 이름 있는 appearance 프로필, 명시적 신뢰 바이트, 타임스탬프 전송 신원, 인증된 폐기 증거에 묶고, 게시 전 한정된 비공개 준비를 갖춥니다
Version 2.859.0
Added
- 라이브 인스턴스별 XFA 폰트·단락·스칼라 본문 재정의를 실제 rich text 드로잉·측정에 적용하고, 인라인 CSS 우선순위와 명시적 빈 콘텐츠를 네이티브 XDP 영속화로 유지하며, 정확한 트랜잭션 롤백을 지킵니다
Version 2.858.0
Added
- 이스케이프된 PDF 폰트·인코딩·glyph·색·리소스 이름을 네이티브 렌더링과 공유 텍스트 추출에서 정확히 한 번 디코딩하고, 리터럴 해시 리소스 키를 유지하며, 동등한 이름을 실제 아웃라인·glyph 메트릭과 맞춥니다
Version 2.857.0
Added
- 페이지·객체 수, Unicode 텍스트, 정규화된 구조 그래프, 실제 렌더링 RGB·휘도 픽셀로 네이티브 문서를 비교하고, 의미 스트림 동등성, 인증된 암호화 입력, 콜백 게시 전 한정된 준비를 갖춥니다
Version 2.856.0
Added
- 등록된 프로필 이름으로 실제 네이티브 서명 appearance 프리셋을 고르고, 구별되는 approval·인증·컴팩트 레이아웃을 생성하며, 인증된 프로필 메타데이터와 암호화 정책을 유지하고, 게시 전에 알 수 없는 프로필을 거부합니다
Version 2.855.0
Added
- 네이티브 XFA 속성 스키마 기본값을 적용하고, 명시적 빈 값, 인스턴스별 스타일, 소수점 포인트 폰트·테두리·드로잉 측정을 실제 AcroForm·평탄화 PDF 출력으로 유지합니다
Version 2.854.0
Added
- 영구 인스턴스별 폼 바인딩, 동기화된 값/데이터 쓰기, 실제 폰트·테두리·단락·UI 레이아웃 효과를 갖춘 네이티브 XFA 프로퍼티·애트리뷰트 객체를 노출하고, 트랜잭션 롤백과 스크립트 없는 포커스 예산을 유지합니다
Version 2.853.0
Added
- 실제 Adobe 폐기 증거를 인증된 CMS signed attribute로 임베드하고, 게시 전에 명시적 신뢰와 현재 CRL·OCSP 증거로 완전한 인증서·타임스탬프 체인을 검증하며, 필요한 서명 seed 폐기 임베딩을 강제합니다
Version 2.852.0
Added
- 인증 서명에 인증된 Unicode 법적 증명을 쓰고, 인증 전용 Legal seed 요구를 지키며, 기존 법적 통계와 카탈로그 권한을 유지하고, 암호화 문자열 정책을 보존합니다
Version 2.851.0
Added
- 경로, 텍스트, 패킹 이미지, Indexed 팔레트에서 물리 Lab ICC 소스 색과 한정된 XYZ 호환 입력을 렌더링하고, RGB·CMYK 그룹으로 보정된·ICC 대체 틴트를 보존하며, 분리·연결 알파가 붙은 임베드 JPX 프로필을 적용합니다
Version 2.850.0
Added
- 호환되는 폰트 없는 문서를 명시적 한정 Ghostscript 폰트 임베딩, 실제 veraPDF 검증, 원자적 게시로 검색 가능 텍스트·벡터 PDF/A-4로 변환하고, 배포판마다 네이티브 Unicode TrueType 폰트를 일관되게 고릅니다
Version 2.849.0
Added
- 임베드 단순 Type1·Type1C 폰트를 정확히 선언되었거나 내장된 Adobe glyph 인코딩으로 렌더링하고, ToUnicode 추출을 표시 아웃라인과 분리하며, 검증된 중립 stroke 조정과 상대 색도 그래픽 상태를 받아들입니다
Version 2.848.0
Added
- 각 와일드카드 컨텍스트 안에서 완전한 XFA 자손 경로 접미사를 해석하고, 지역 항목 경계를 보존하며, 현재 이벤트 스코프에서 조건식을 정확한 트랜잭션 롤백으로 실행합니다
Version 2.847.0
Added
- 실제 발급자 체인, 주체·키 용도 정책, 선택 가능 CMS 다이제스트, 암호화 Unicode 서명 메타데이터, 잠긴 문서 변환으로 상속된 네이티브 서명 seed·인증서 제약을 강제합니다
Version 2.846.0
Added
- 양방향 폼 바인딩, 동적 인스턴스 데이터 미러링, 안정적인 유지 참조, 독립 언바운드 폼 값, 트랜잭션 스크립트 리플레이로 네이티브 XFA 데이터셋·데이터 노드를 노출합니다
Version 2.845.0
Added
- 기존 또는 상속된 서명 필드 잠금에서 인증된 FieldMDP 참조를 내보내고, 암호화 Unicode 필드 이름과 인증 참조를 보존하며, 기존 서명 정책을 약화시키지 않고 잠금 권한 수준을 적용합니다
Version 2.844.0
Added
- Separation·DeviceN 대체 틴트를 한정된 벡터 함수, 패킹 이미지, CMYK 그룹 블렌딩으로 렌더링하고, None knockout 지오메트리를 유지하며, All registration 색을 일관되게 매핑합니다
Version 2.843.0
Added
- 동적 XFA SOM 경로를 추론·상대 항목, 스코프된 조건식, 클래스·자손 selector, 와일드카드 컬렉션, 트랜잭션 스크립트 객체 프로퍼티 할당으로 해석합니다
Version 2.842.0
Added
- 공유 portable 코어로 소스 glyph 지오메트리, 암호화·중첩 콘텐츠 입력, 준비된 JSON·HTML 검토 출력, 안정적인 동시 잠금 순서를 갖춘 네이티브 2문서 C ABI·Pascal 의미 계약 비교를 제공합니다
Version 2.841.0
Added
- 네이티브 폼 갱신 전에 기존 CMS·CAdES 리비전을 인증하고, 기존 DocMDP·FieldMDP 권한과 잠긴 필드를 강제하며, 서명된 콘텐츠·리소스를 유지하고, 푸시버튼 캡션 메타데이터를 원자적으로 동기화합니다
Version 2.840.0
Added
- 보정된 CalGray·CalRGB·Lab 소스 색, 보정된 그룹·페이지 블렌딩, Indexed 베이스, 16비트 이미지 샘플, XYZ 휘도 소프트 마스크를 한정된 변환과 안전한 감마 평가로 렌더링합니다
Version 2.839.0
Added
- 참조를 통한 할당, 리바인딩과 null 분리, 숫자 동일성 비교, 유지 핸들, 트랜잭션 롤백으로 FormCalc 값 복사와 안정 노드 참조를 구현합니다
Version 2.838.0
Added
- 격리된 계산 스코프, 중첩 평가, Unicode 소스, 한정된 컴파일 재시도, 트랜잭션 호스트 응답 리플레이로 runtime 생성 FormCalc Eval 프로그램을 실행합니다
Version 2.837.0
Added
- 텍스트·choice·멀티셀렉트 필드, 체크박스·라디오 상태, 푸시버튼 캡션에 대한 네이티브 Linux JSON 폼 채우기로 임베드 Unicode appearance를 생성하면서 트랜잭션 게시와 암호화를 유지합니다
Version 2.836.0
Added
- 호환되는 확장 네이티브 서명 연산 레코드로 동기 RFC 3161 타임스탬프 전송을 제공하고, 한정된 응답, 공유 취소, 명시적 TSA 신뢰·폐기 검증을 갖춥니다
Version 2.835.0
Added
- 트랜잭션 XFA 호스트 상태, 페이지·라이프사이클 플래그, 인스턴스별 포커스 변경, 대기 편집 검증, 리셋 연산을 안정 신원과 렉시컬 상태 리플레이로 실행합니다
Version 2.834.0
Added
- CAdES 서명 인증서 식별자를 선택적 인증서 신뢰와 독립적으로 실제 서명자 기준으로 검증하고, 임베드 Encoding CMap 스트림을 네이티브 폰트 어댑터로 해석합니다
Version 2.833.0
Added
- 세로 Identity-V와 Unicode 사전 정의 CMap을 실제 W2/DW2 원점, 행렬, 텍스트 이동, 클리핑으로 렌더링하고, 임베드 Encoding CMap 스트림을 올바르게 디코딩합니다
Version 2.832.0
Added
- PEM 또는 한정된 PFX 신원, 새 Unicode appearance 필드, 인증으로 네이티브 Linux 콜백 ABI를 통해 서명하고, 성공한 게시 뒤에 준비된 서명 문서를 현재 컨텍스트로 유지합니다
Version 2.831.0
Fixed
- 서명 seed, 잠금, 읽기 전용 제약을 인코딩된 PDF 이름에 일관되게 적용하고, 의미상 중복 키를 거부하며, 상속된 정책 딕셔너리를 검증합니다
Version 2.830.0
Added
- 고급 XFA 숫자·달력·텍스트·복합 picture 절을 실제 폼 이벤트로 실행하면서 입력 정밀도, 로캘 의미, 트랜잭션 스크립트 리플레이를 유지합니다
Version 2.829.0
Added
- 네이티브 페이지 리소스 그래프와 변환된 주석 appearance를 plain·암호화 문서에 임포트하고, 호환 입력을 원자적 게시 전 실제 검증을 거친 검색 가능 텍스트·벡터 PDF/A-4로 변환합니다
Version 2.828.0
Added
- 4컴포넌트 CMYK·ICC 투명도 그룹과 페이지 그룹을 모든 블렌드 모드, 중첩 knockout 지오메트리, 공유 컬러 프로필 예산으로 렌더링합니다
Version 2.827.0
Added
- 임베드 로캘 세트, 한정된 트랜잭션 로캘 조회, 보호된 JavaScript IEEE 산술로 로캘을 인식하는 XFA 날짜·시간·숫자·텍스트 picture를 실행합니다
Version 2.826.0
Added
- Unicode 배열 값 choice 선택을 읽고 쓰고, 정렬된 옵션 인덱스를 유지하며, 보이는·스크롤된 리스트 박스 선택에 맞는 appearance를 생성합니다
Version 2.825.0
Added
- Windows JSON·C ABI job으로 암호화 문서에 서명하면서 기존 리비전, AES 보안 설정, 문서 ID, 서명 권한을 유지합니다
Version 2.824.0
Added
- 네이티브 Linux HTML 문서를 만들고 보이거나 맞춘 검색 가능 Unicode 텍스트를 넣으며, 한정된 취소 가능 Tesseract OCR을 돌리고, Pascal·콜백 API로 독립 검증된 래스터 PDF/A-4 출력을 작성합니다
- 그래픽 상태 Alpha/Luminosity 마스크, 한정된 전이 함수, 가산 투명도와 페이지 그룹, knockout 도형, 확장 JPEG 2000 샘플, 임베드 색·알파를 렌더링합니다
- 증분 DSS/VRI 게시 전에 지정된 인증서·OCSP·CRL 증거를 검증하면서 기존 서명과 AES 암호화를 유지합니다
- 명시적 타입이 있는 XFA 호스트·FormCalc 전송 콜백을 한정된 요청, 기록된 응답, 트랜잭션 리플레이로 실행합니다
Fixed
- Free Pascal QuickJS API가 돌려 주는 Unicode 값과 예외 진단을 유지합니다
Version 2.823.0
Added
- 메시지 임프린트, nonce, TSA 인가, 신뢰, 지정된 폐기 증거 검사와 함께 검증된 RFC 3161 타임스탬프를 headless CMS 서명에 임베드하고, 필수 타임스탬프가 실패하면 대상 파일을 유지합니다
- XFA 스크립트 객체 렉시컬 상태, 중첩 클로저, 독립 반복 인스턴스 모듈을 결정론적 한정 트랜잭션 리플레이로 유지합니다
- 측정·생성된 headless Unicode 텍스트 appearance에 명시적 문자·단어 간격을 적용합니다
Fixed
- 명세에 맞는 FormCalc At source/search 인자 순서를 쓰고, 빈 검색 문자열에 대해서는 첫 위치를 돌려 줍니다
Version 2.822.0
Added
- 일반 QuickJS·컴파일된 FormCalc XFA 이벤트를 라이브 반복 인스턴스 DOM 연산, 트랜잭션 표준 form-packet 영속화, 자동 initialize/calculate/validate/ready 라이프사이클, 한정된 실행·취소로 실행합니다
Fixed
- 명세에 맞는 XFA 금융 함수 파라미터와 현금흐름 공식, 그레고리력 날짜 원점, 음수 나머지 동작을 적용하면서 Delphi와 Free Pascal 전반에서 double 정밀도를 유지합니다
Version 2.821.0
Added
- 버전 있는 Linux C ABI, 실제 콜백 기반 텍스트/폼/렌더링/서명 연산, 한정된 취소·실패 롤백, HarfBuzz/FriBidi 셰이핑이 든 multiline/comb/회전/choice/버튼 appearance, PFX 신원, 새 보이는 서명 필드, DocMDP 인증으로 네이티브 headless 문서 워크플로를 확장합니다
- 한정된 이미지 마스크, 소프트 마스크, Indexed/ICC 색, PDF 블렌드 모드, 격리 RGB 투명도 그룹, Type3 glyph, 텍스트 클리핑을 렌더링하고, 인증된 네이티브 문서 경로로 JPEG, JPEG 2000, CCITT, JBIG2, RunLength 이미지 스트림을 디코딩합니다
Version 2.820.0
Added
- 지원되는 네이티브 headless 한 줄 Unicode AcroForm 필드를 실제 임베드 TrueType appearance, 정확한 glyph 폭, CIDToGID/ToUnicode 매핑, 트랜잭션 다중 위젯 갱신, 유지되는 AES 보안, 통제된 폰트 임베딩, Linux·Windows에서 한정된 원자적 저장으로 채웁니다
Version 2.819.0
Added
- Linux에서 네이티브 Cairo/FreeType CPU 표면으로 지원되는 PDF 경로, 가로 텍스트, 이미지, Form, 기존 주석 appearance를 PNG로 렌더링하고, 한정된 작업·취소를 강제하며, 소스를 유지하고, PNG 파일을 원자적으로 게시합니다
Fixed
- PDF 폭이 없을 때 12가지 표준 Helvetica/Times/Courier 스타일에 정규 Adobe AFM 전진 값을 써서 대체 폰트 메트릭으로 인한 누적 텍스트 위치 드리프트를 막으면서, 명시적·임베드 폰트 폭은 유지합니다
Version 2.818.0
Added
- 기존 서명 안 된 필드와 명시적 PEM 자격 증명으로 Linux·Windows에서 실제 네이티브 headless 증분 CMS/CAdES PDF 서명을 게시하고, 이전 리비전과 AES-256 보안을 유지하며, 정확한 서명 바이트를 검증하고, 한정된 원자적 게시로 기존 대상 파일을 보호합니다
Version 2.817.0
Added
- 검증된 증분 PFX 서명, 기존 서명 필드, 2문서 비교, 여섯 가지 네이티브 비교 모드, 양면 계약 JSON/HTML/주석 PDF 검토로 한정된 JSON·C ABI 문서 job을 완수하고, 협력 취소, 리소스 한도, 원자적 파일 게시를 포함합니다
Version 2.816.0
Added
- 정확한 ByteRange/Contents 바인딩과 스트리밍 OpenSSL 3로 네이티브 headless PDF 서명을 검증하고, 명시적 PEM 자격 증명에서 실제 분리형 CMS/CAdES 서명을 생성하며, Linux·Windows에서 인증서 신뢰를 무결성과 분리해 보고합니다
Version 2.815.0
Added
- 조건부 이벤트, 명시적 반복 바인딩, 독립 인스턴스 존재·접근, 안정 영속 신원, 트랜잭션 리플로우, 호스트 캔버스 페인팅, 접근성 기록에 한정된 XFA 인스턴스 표시 헬퍼를 씁니다
Version 2.814.0
Added
- Linux·Windows에서 네이티브 headless AES-256 R5/R6 문서를 열고, 소유자/사용자 권한을 인증하며, 암호화된 압축 객체를 디코딩하고, 정확한 소스 접두사 보존과 한정된 원자적 출력으로 암호화된 증분 폼 값을 저장합니다
Version 2.813.0
Added
- 한정된 페이지 사각형 안에서 베이스라인과 선택된 공유 Form 호출에 걸쳐 텍스트를 리플로우하고, 폰트와 폭을 바꾸며, 보수적 충돌 보고를 살피고, 트랜잭션 커밋·롤백이 붙은 봉인된 미리보기를 씁니다
Fixed
- 객체 직렬화 뒤 반복 저장에서 로드된 문서 편집을 유지합니다. 스트림→파일 저장과 출력 실패 뒤 재시도를 포함합니다
Version 2.812.0
Added
- 호환되는 로드된 문서를 PDF/A-4로 변환하면서 원본 텍스트, 벡터, 이미지, 임베드 리소스를 유지하고, 보이는 주석/위젯 appearance를 합성하며, 검색 가능 OCR을 유지·추가하고, 명시적 손실을 보고하고, 원자적 파일 게시 전에 보존을 검증합니다
Version 2.811.0
Added
- 네이티브 headless 문서 API로 cross-reference 스트림, 하이브리드 참조 섹션, 압축 객체 스트림을 읽고, 한정된 멤버 인덱스·리비전 선행 관계를 검증하며, 정확한 넓은 숫자 소스 값을 유지하고, Linux·Windows에서 소스 보존 독립 증분 출력을 저장합니다
Version 2.810.0
Added
- 한정된 가역 지오메트리로 스캔 방향, 연속 각도 기울기, 그림자, 테두리, 명시적 원근 사변형을 바로잡고, 신뢰된 Tesseract 방향 증거를 쓰며, 편집 가능한 구조 출력을 위해 OCR 단어, 베이스라인, 페이지 사변형, 의미 레이아웃을 원본 스캔에 되돌려 매핑합니다
Version 2.809.0
Added
- JSON·C ABI OCR job에서 로컬 Tesseract·RapidOCR CLI 또는 DLL 엔진을 구성하고, Unicode 검색 텍스트와 스캔 픽셀을 유지하며, 지원 어댑터를 찾고, 명시적 설정을 검증하고, 원자적 출력과 실패 게시 롤백으로 렌더링/인식 예산을 강제합니다
Version 2.808.0
Added
- 네이티브 Linux 콘솔 애플리케이션에서 classic-xref PDF를 읽고, 상속된 리소스로 Unicode 페이지·중첩 Form 텍스트를 추출하며, AcroForm 텍스트 값을 살피고 채우고, 타입이 있는 진단, 취소, 리소스 예산, 원자적 교체로 소스 보존 증분 출력을 게시합니다
Version 2.807.0
Added
- 하나의 래스터에서 떨어져 있는 여러 네이티브 바코드를 찾고, 서로 다른 위치의 반복 페이로드를 유지하며, 4모서리 지오메트리로 회전·projective ECC 200 Data Matrix 심볼을 디코딩하고, 취소와 원자적 결과 게시로 집계 스캔 예산을 강제합니다
Version 2.806.0
Added
- insert·delete·replace·move 기록, 양쪽 페이지 위치, 반복 조항 보존, 명시적 상용구 제외, 한정된 HTML 검토, 원본 대조를 거친 주석 PDF 출력으로 계약서 문단과 단어·문장 수정을 비교합니다
Version 2.805.0
Added
- 중첩된 flex/grid 패널, 줄바꿈되는 row, grid column span, 나란히 놓인 박스 안의 이미지와 폼 컨트롤을 갖춘 HTML 비즈니스 템플릿을 가져오고, 명시적으로 지정한 font-face 리소스는 지연 임베딩을 거쳐 보존하며, 디코딩된 이미지용 캐시 예산을 별도로 둡니다
Version 2.804.0
Added
- 공용 PDF 객체, Direct File I/O, 콘텐츠·폰트 디코딩, 압축, 암호화, writer 코어를 POSIX 매핑과 동기화를 갖춘 네이티브 Linux 코드로 빌드하고, Windows API를 그대로 유지하며 클래식 xref 항목을 올바르게 직렬화합니다
Version 2.803.0
Added
- 버전이 매겨진 인보이스 프로필과 국가별 규칙 레이어를 등록하고, 범위를 인식하는 리포트로 명시적 CII XML 또는 하이브리드 인보이스를 검증하며, 명시적으로 구성한 Saxon 엔진으로 공식 XRechnung 3.0.2와 프랑스 CTC 인보이스 규칙을 실행합니다. 공개된 프로필 가운데 고르고, 실패하면 확실히 막는 진단을 함께 제공합니다
Version 2.802.0
Added
- 타입이 있는 테이블을 네이티브 API, JSON job, C ABI를 통해 Office에 의존하지 않는 XLSX 워크북으로 내보내고, 값 타입, 통화·퍼센트 형식, 병합 셀, 정확한 큰 정수, 선택적 원본 메타데이터를 보존하며, 한정된 스테이징과 failure-safe 게시를 갖춥니다
Version 2.801.0
Added
- JSON job과 C ABI로 로드된 페이지 중 선택한 페이지를 semantic HTML, XHTML, XML, JSON으로 내보내고 타입이 있는 테이블은 CSV나 JSON으로 내보낼 수 있으며, 네이티브 옵션, 한정된 스테이징, 취소, 서명 필드 호환성, 원본 상태 보존, 원자적 파일 게시를 갖춥니다
Version 2.800.2
Fixed
- 그래프 롤백 전에 로드된 폼 관계 캐시를 무효화해, 서명 job이나 실패한 문서 편집이 끝난 뒤에도 원본 문서를 안전하게 조회하고 재사용할 수 있게 합니다
Version 2.800.1
Fixed
- 순차 병렬 렌더링이 이제 메모리 예약을 입력 순서대로 받아들여, 앞선 페이지 전달을 기다리는 사이에 뒤 페이지가 예산을 소진하지 못하게 하고, Delphi와 FPC에서 취소와 한정된 출력을 유지합니다
Version 2.800.0
Changed
- SVG 텍스트, 로드된 FreeText appearance, 로드된 텍스트 치환이 이제 문서 셰이핑 기능, script 자동 셰이핑 플래그, GSUB script·언어 선택을 보존합니다. 선택한 폰트 각각의 OpenType 데이터를 사용하며 폰트가 바뀌어도 Unicode 매핑을 유지합니다
Version 2.799.0
Changed
- SVG 벡터 가져오기가 이제 solid·gradient stroke에 대해 상속된 dash 배열, dash 오프셋, miter 한계를 유지하고, 네이티브 렌더링은 phase를 가진 dash 패턴과 길이 0 dash 패턴을 보존합니다
Version 2.798.0
Changed
- 스타일이 적용된 Unicode 텍스트가 fallback layout을 거쳐도 bold·italic 폰트를 유지합니다. 스타일을 인식하는
ResolveFontForCodePoint와AnalyzeUnresolvedGlyphsoverload가 preflight와 출력을 일치시키고, FPC XML 문자 참조는 텍스트를 망가뜨리는 대신 Unicode 스칼라를 보존합니다
Version 2.797.0
Fixed
- SVG 가져오기가 이제 객체·그룹 불투명도를 격리된 벡터 transparency Form으로 합성하고, fill과 stroke 알파를 독립적으로 유지하며, 명시적인 예산 안에서 중첩된 리소스, clip, mask, 링크 동작을 보존합니다
Version 2.796.0
Added
- JSON job과 C ABI를 통해 한정된 PDF/A-4 래스터 아카이브 변환을 노출하고, 정보 손실에 대한 명시적 수락, 구조화된 예산 실패, 협력적 취소, 원본 상태 복원, 원자적 파일 출력을 갖춥니다
Version 2.795.0
Added
- 로드된 PDF를 이제 엄격한 네이티브 렌더링, 검증된 sRGB 색상, 한정된 디코딩·래스터 리소스, 취소, 원본 별칭 보호, 원자적 파일 게시와 함께 검증된 PDF/A-4 래스터 문서로 정규화할 수 있습니다. 변환 리포트는 의도적으로 제거한 대화형 콘텐츠와 첨부 콘텐츠를 짚어 줍니다
Version 2.794.0
Changed
- HTML5 가져오기가 이제 실측한 혼합 방향 텍스트 줄, widow·orphan 페이지 나눔, 선택적 hyphenation, 한정된 flex·grid layout, 관찰 가능한 CSS 진단을 사용합니다. FPC 네이티브 비트맵은 직접 그리는 GDI 드로잉과 LCL 이미지 캐시를 동기화합니다
Version 2.793.0
Changed
- 한정된 동적 XFA instance-manager 추가·제거와 템플릿 존재 이벤트를 layout 재바인딩, 편집 상태 보존, 원자적 롤백, 리소스 제한, 영속적인 XDP 출력과 함께 추가합니다
Version 2.792.0
Changed
- SVG 가져오기를 실측한 내장 Unicode 폰트, PNG/JPEG 리소스, gradient stroke, 진짜 Alpha·Luminosity soft mask로 확장하고, 네이티브 그룹 알파와 FPC 비트맵 표면 합성을 바로잡습니다
Version 2.791.0
Changed
- 내장 폰트, 줄바꿈·너비 정책, 매치별 진단, stale plan 감지, 한정된 리소스, 원자적 커밋을 갖춘 미리보기 가능한 로드된 Unicode 텍스트 치환을 추가하고, JSON/C ABI로 미리보기와 apply 작업을 제공합니다
Version 2.790.0
Changed
- 글리프 렌더링에 표준 CFF Type 2 스택과 transient 배열 연산을 구현하고, 폰트 서브셋팅 중에 산술로 유도된 로컬·글로벌 서브루틴 의존성을 보존합니다
Version 2.789.0
Changed
- 내장 바코드 디코딩을 Code 128, EAN/UPC, 원근을 고려한 QR 복구, Data Matrix ECC 200, Reed-Solomon 정정과 한정된 페이로드 디코딩을 갖춘 PDF417로 확장합니다
Version 2.788.0
Changed
- Windows FPC가 이제 ABI로 검증한 코덱 브리지를 통해 네이티브 TIFF, JPEG/JPX, ICC 변환, JBIG2, Zopfli를 지원하고, 페이지·순서화된 페이지·타일·밴드·JPEG 2000 타일 렌더링에 실제 워커 스레드를 써서 예산, 순서가 보장되는 콜백, 취소, 결정론적 픽셀을 갖춥니다
Version 2.787.0
Changed
- C ABI와 JSON job 프로세서가 이제 스키마 버전을 매긴 문서 작업을 공유합니다. capabilities, 렌더링, Unicode 텍스트·폼, OCR 레이어, redaction, PFX 서명을 다루며, 명시적인 리소스 예산, 콜백 실패 롤백, 원자적 파일 출력을 갖춥니다. 여러 페이지 콜백 입력도 올바르게 로드됩니다
Version 2.786.0
Changed
- 로드된 FreeText 편집이 이제 내장 Unicode·rich-text appearance를 원자적으로 다시 빌드하고, 줄바꿈, 정렬, 불투명도, 회전, 콜아웃, inset, 명시적인 넘침 정책을 갖춥니다. 다시 쓴 스트림 페이로드는 변경 전에 잡아 두므로 트랜잭션 롤백 시 원본 텍스트가 돌아옵니다
Version 2.785.0
Added
- SearchableOCR 콘솔 데모에 RapidOCR와 함께 내장 OCR과 Tesseract DLL·CLI 엔진이 붙고, 세 페이지짜리 스캔 샘플을 생성하며, 페이지 선택, confidence 필터링, 인식 예산, 자세한 변환 통계를 노출합니다
Version 2.784.0
Changed
- FDF·XFDF 일괄 가져오기가 이제 가져오기가 실패하면 앞서 반영한 필드·주석 업데이트를 롤백하고, 호출자가 소유한 트랜잭션을 유지하며, 실패한 교환 결과 메타데이터를 지웁니다
Version 2.782.0
Added
- 로컬 Tesseract OCR 어댑터가 THPDFTesseractOptions로 페이지 분할, 인식 엔진 모드, 픽셀 제한, 타임아웃을 설정해 받아들이고, 한 줄·한 단어·sparse-text·세로 블록 인식을 지원합니다
Fixed
- 네이티브 Tesseract 어댑터가 세로 기준선이 지배적인 경우 cross-text box 차원을 써서, 세로 단어 길이가 검색 가능 PDF 텍스트 크기를 부풀리지 않게 막습니다
Version 2.781.0
Changed
- Delphi·C++Builder 데모 모음에 비즈니스 라벨을 담은 여러 페이지 바코드 필드 가이드와, 계층적 북마크, named destination, 동작하는 동반 문서 링크를 갖춘 완전한 내비게이션 핸드북이 들어갑니다. 최소형 PDF/A 레시피는 Miscellaneous로 옮기고, 중복되는 독립형 outline·메타데이터 프로젝트는 정리합니다
Version 2.780.1
Fixed
- Showcase 주석 페이지가 콘텐츠 미리보기 캡션을 실제 free-text·stamp appearance와 분리해, PDF 리더에서 라벨이 겹치는 일을 막으면서도 주석 appearance를 숨겼을 때 예제를 알아볼 수 있게 유지합니다
Version 2.780.0
Changed
- 데모 카탈로그가 이제 완전한 워크플로를 우선하고, 최소형이거나 한 가지에 집중하거나 레거시인 열일곱 개 예제는 Miscellaneous 하위 폴더로 분리합니다. 중복되던 ImageCompression과 AddDelPages 프로젝트는 제거했고, 기능은 메인 데모와 회귀 스위트에 남아 있습니다
Version 2.779.0
Added
- Delphi·C++Builder Showcase 데모가 이제 임베디드 미리보기, 검색 하이라이트, 개인화 표지, 클릭 한 번으로 넣는 리뷰 워터마크, 검증된 페이지 내보내기, 편집을 유지하는 AES-256 R6 보호 사본을 갖춘 열 챕터짜리 완전한 문서 스튜디오를 엽니다. 둘 다 같은 문서 엔진을 쓰고, 창 없이 생성하는 명령도 지원합니다
Version 2.778.1
Removed
- 중복되던 Delphi·C++Builder TestNumeric GUI 데모를 정리하고 자동화된 숫자 회귀 테스트로 대체합니다. 이 테스트는 압축하지 않은 PDF와 Flate로 압축한 PDF를 저장했다가 다시 불러왔을 때 소수 페이지 크기와 드로잉 오퍼랜드를 검증하며, 숫자 배열 커버리지도 함께 저장합니다
Version 2.778.0
Changed
- 페이지·고객 리포트 데모가 이제 실전적인 워크플로를 제공합니다. PageOperations는 extract, delete, move, insert, append 명령으로 실제 PDF를 편집하고 다시 불러 검증하며, DBTable은 테이블 엔진으로 줄바꿈되는 row, 반복 헤더, 자동 페이지 나눔을 처리하고 데이터베이스 없이도 돌아가는 기본 샘플을 제공합니다
Version 2.777.1
Fixed
- OCR이 잘못된 UTF-8, 지원하지 않는 제어 문자, 호환되지 않는 네이티브 감지 모델 출력을 텍스트를 내보내기 전에 거부하고, 페이지에 걸친 단어 제한을 적용할 때 버려진 인식 결과도 반영합니다
Version 2.777.0
Fixed
- 내장 OCR은 빈 페이지나 인식하지 못한 페이지를 성공한 빈 결과로 받아들여 스캔 문서 배치가 이어질 수 있게 하고, Windows FPC 비트맵 픽셀을 보존하며, 이미지 분석 전 과정에서 취소와 시간 한도를 확인합니다
- 네이티브 RapidOCR 각도 분류는 짧은 줄의 가로세로 비율을 유지하고, 텍스트 크롭을 회전하기 전에 뒤집혔다고 확신할 만한 예측을 요구합니다
- 로컬 Python RapidOCR 어댑터는 인식된 줄 간격과 문장 부호를 유지하고 불필요한 공백이 붙을 수 있는 개별 문자를 내보내지 않으며, Tesseract DLL 어댑터는 텍스트를 내보내기 전에 C1 제어 문자를 거부합니다
Version 2.776.0
Added
- 스캔 PDF 텍스트 레이어는 저장 후 다시 불러올 때 표시된 HotPDF OCR 스트림을 원자적으로 교체할 수 있고, 인식이 실패하거나 비어 있으면 기존 레이어를 유지하며, 교체된 페이지를 보고하고, 기존 파일을 덮어쓰지 않는 네이티브 다국어 RapidOCR 콘솔 예제로 변환합니다
Fixed
- 같은 줄에서 단어 간격으로 떨어진 인접 라틴·키릴 OCR 단어 사이에는 안정적인 구문 검색과 복사를 위해 명시적인 Unicode 공백을 넣고, 인접 CJK 단어는 계속 붙여 둡니다
- Windows FPC JPEG 스캔 렌더링은 OCR 비트맵 형식으로 변환할 때 디코딩된 픽셀을 유지해, LCL 픽셀 형식 변경으로 인식 입력이 텅 비는 일을 막습니다
Version 2.775.0
Added
- 네이티브 RapidOCR에 간체·번체 중국어, 영어, 프랑스어, 독일어, 스페인어, 포르투갈어, 이탈리아어, 네덜란드어, 터키어, 일본어, 한국어, 러시아어, 아랍어, 힌디어용 로컬 모델 프리셋이 생겼습니다. Delphi, C++Builder, Windows FPC/Lazarus에서 짝이 맞는 문자 사전, 검증된 모델 설치, 가로 읽기 순서, 다국어 Unicode 출력을 갖춥니다
Fixed
- 워커 종료 후 진단 파일이 잠깐 잠긴 채 남아 있으면 로컬 프로세스 OCR 어댑터가 임시 출력 정리를 다시 시도합니다
Version 2.774.0
Added
- 네이티브 RapidOCR DLL 어댑터가 로컬 ONNX 모델을 프로세스 안에 두고 Python 없이 비트맵 스냅샷을 인식하며, 선택적 각도 분류와 Unicode 검색 가능 PDF를 지원하고, Delphi, C++Builder, Windows FPC/Lazarus 빌드에서 협력적 취소로 출력 예산을 검증합니다
Version 2.773.0
Added
- 로컬 RapidOCR 어댑터에 명시적 ONNX 모델 구성, 선택적 각도 분류, 로컬 문자 사전과 폰트, CPU 스레드 제어, 오프라인 preflight, 그리고 Delphi, C++Builder, FPC/Lazarus 빌드에서 Unicode 검색 가능 PDF를 위한 인식 예산이 추가되었습니다
Version 2.772.1
Fixed
- Tesseract DLL·CLI 어댑터가 이제 Windows FPC/Lazarus Win32·Win64 빌드에서 동작하고, Unicode OCR 단어를 보존하며, 검색 가능 PDF 텍스트 레이어를 위해 현재 LCL 이미지 픽셀을 읽습니다
Version 2.772.0
Added
- 선택적 네이티브 Tesseract DLL 어댑터가 추가되어 페이지 분할·엔진 모드를 설정할 수 있는 다국어 OCR, Unicode 단어·신뢰도·단어 경계·베이스라인과 함께, 검색 가능한 스캔 PDF를 위한 협력적 취소, 인식 기한, 출력 예산을 제공합니다
Version 2.771.1
Changed
- 내장 OCR은 밝은 배경이나 어두운 배경이 우세한 페이지에서 일반·굵은·기울임·굵은 기울임 ASCII 텍스트를 인식하고, 명암 대비가 충분한 흐린 글자도 받아들이며, 확실하지 않은 glyph가 남은 단어는 문자를 조용히 버리는 대신 단어째 생략합니다
Version 2.770.175
Fixed
- LoadedDocInspector와 SignatureValidator는 읽을 수 없는 PDF에 실패 종료 코드를 반환하고 유효하지 않은 명령 인수는 거부하며, 성공한 빈 검사처럼 보고하지 않습니다
Version 2.770.174
Fixed
- LoadedImageExport는 페이지를 하나라도 내보내기 전에 모든 이미지 출력 대상을 검증해 경로 별칭이 입력 PDF나 다른 선택 페이지를 덮어쓰지 못하게 하고, 지원하지 않는 형식 이름은 거부합니다
Version 2.770.173
Fixed
- 렌더 페이지 디스크 캐시는 복구·조회·저장·무효화·축출 과정에서 연결된 문서 폴더를 건너뛰어 캐시 밖 파일을 그대로 둡니다
Version 2.770.172
Fixed
- JSON 작업은 어떤 연산이든 실행하기 전에 malformed 구문, 뒤에 남은 내용, 유한 Double 범위를 벗어난 수, 과도한 중첩을 거부하고, 실패 시 부분 파싱된 값을 해제합니다
Version 2.770.171
Fixed
- PreflightCLI는 쓰기 전에 리포트 출력 계획 전체를 점검해 파일 별칭으로부터 입력 PDF를 보호하고 충돌하는 리포트 출력 대상을 거부합니다. 재귀 스캔은 순환을 피하려고 연결된 하위 디렉터리를 건너뜁니다
Version 2.770.170
Fixed
- CopyPage는 내보내기 전에 파일 신원을 확인하고 충돌하는 출력 별칭을 거부하며, 마침표가 든 디렉터리에서 확장자 없는 입력 옆에 자동 이름의 출력을 계속 둡니다
Version 2.770.169
Fixed
- JSON 작업 값은 이스케이프된 null 문자를 보존하고, 부호 있는 64비트 범위 밖의 유한 수를 정수 오버플로 없이 직렬화하며, 프로세스 로캘을 바꾸지 않고 범위 밖 정수 매개변수에 기본값을 반환합니다
Version 2.770.168
Fixed
- 단순 객체 파서 복구는 대괄호 없는 배열 본문에서 어긋난 닫는 괄호를 만나면 종료하고, malformed 구분자 바로 뒤의 유효한 숫자와 딕셔너리 키를 보존합니다
Version 2.770.167
Fixed
- HotPDFCLI는 입력 파일과 별칭이 겹치는 출력 경로를 거부하고 배치 내보내기를 시작하기 전에 생성될 모든 경로를 점검해, 명령이 원본 데이터를 잘라내거나 덮어쓰지 못하게 합니다
Version 2.770.166
Fixed
- ExtractText 예제는 출력이 디렉터리 junction이나 하드 링크를 쓸 때 입력 PDF를 보호하고, LoadedImageExport는 읽을 수 없는 문서나 불완전한 페이지 내보내기에 실패를 보고합니다
Version 2.770.165
Fixed
- 직접 파일 읽기는 I/O 실패 후 불완전한 캐시 채우기를 무효화하고, 부호 있는 64비트 오프셋 한계 근처에서 read-ahead 범위를 안전하게 제한합니다
Version 2.770.164
Fixed
- RunLength 디코딩은 디코딩된 페이로드 크기만 할당하고 출력 할당 전에 malformed run을 검증해, 조기 종료 문자가 있는 스트림에 과도한 메모리를 예약하지 않습니다
Version 2.770.163
Fixed
- Delphi·C++Builder 예제는 프로젝트 폴더와 중첩된 빌드 출력 디렉터리 양쪽에서 번들 이미지, 메타파일, 컬러 프로파일, 선택적 서명 픽스처를 찾습니다
Version 2.770.162
Fixed
- HugeFileBenchmark 예제는 벤치마크 배치를 시작하기 전에 입력 문서와 겹치는 생성 PDF 경로를 거부합니다
- C++Builder 예제는 생성 PDF의 상대 입력 하위 디렉터리를 유지해, 같은 이름의 재귀 입력이 하나의 출력 파일을 공유하지 않게 합니다
- 실패한 연산, 메모리 한도 위반, 잘못된 0페이지 로드는 이제 0이 아닌 종료 코드를 내면서 벤치마크 리포트는 그대로 둡니다
Version 2.770.161
Fixed
- Delphi·C++Builder Preflight CLI는 입력 PDF와 겹치는 리포트·집계 출력 경로를 거부해 리포트가 원본 문서를 덮어쓰지 않게 합니다
Version 2.770.160
Fixed
- ASN.1 파싱은 지원하는 32비트 태그 범위를 넘는 high-tag-number 인코딩을 거부하고, 감싸진(wrapped) 태그 번호를 받아들이지 않습니다
Version 2.770.159
Fixed
- C++Builder Preflight CLI는 재귀 리포트와 대시보드 링크의 상대 하위 디렉터리를 유지해, 같은 이름의 PDF가 서로를 덮어쓰지 않습니다
- Delphi·C++Builder Preflight 대시보드는 특수 문자와 non-ASCII 디렉터리 이름에 대해 리포트 링크를 올바르게 인코딩합니다
- C++Builder 표준 검증 실패는 이제 종료 코드 3을 반환하고, 불러오기에 실패한 입력을 포함해 모든 리포트 형식에서 대시보드에 invalid로 표시됩니다
Version 2.770.158
Fixed
- C++Builder PDF 병합 예제는 실행 파일 디렉터리 기준으로 상대 입력 경로를 해석하고, 파일 대화상자가 작업 디렉터리를 바꾸지 못하게 합니다
- 생성된 각 책갈피는 이제 자기 입력 문서에서 복사한 첫 페이지를 가리킵니다
Version 2.770.157
Fixed
- 객체 파서는 PDF literal 문자열 안의 이스케이프되지 않은 CR·CRLF 줄 끝을 LF로 정규화하되, 이스케이프된 캐리지 리턴과 줄 연결은 그대로 유지합니다
Version 2.770.156
Fixed
- LZW 스트림 압축은 빈 입력에 실제로 쓴 바이트 수를 보고합니다
- InitialCodeSize를 2로 설정해도 LZW 압축·해제가 정확히 왕복되고, 압축은 출력을 쓰기 전에 축소된 알파벳 밖의 literal을 거부합니다
Version 2.770.155
Fixed
- Win64 빌드에서 1e-100이나 5e99처럼 지수가 100에 가까운 수를 담은 SVG·XPS 경로 데이터를 임포트할 때, 애플리케이션이 부동소수점 예외를 언마스크하면 부동소수점 오버플로가 더는 나지 않습니다
- 이런 수는 이제 실제 값으로 읽히므로, 큰 음의 지수를 가진 긴 가수도 올바르게 임포트됩니다
Version 2.770.154
Fixed
- 디코드 영역을 지정하지 않으면 DecodeLoadedPageBarcodes는 이제 CropBox가 MediaBox와 다른 페이지에서 올바른 바코드 경계를 보고합니다. 이전에는 위치가 크롭 박스 오프셋만큼 밀리거나 잘못된 페이지 높이로 스케일됐습니다
- DetectLoadedRedactionFindings가 내놓는 얼굴 결과(얼굴 검출 활성화 시)도 이런 페이지에서 검출된 얼굴 자리에 맞고, 더는 그 자리에서 밀려 있지 않습니다
- 두 기능 모두 보이는 페이지 영역(MediaBox로 클립한 CropBox)을 렌더링하고 이제 검출 위치를 같은 영역으로 되돌려 매핑합니다. 커스텀 IHPDFFaceDetector에 전달되는 페이지 박스는 받는 비트맵과 일치합니다
- 명시적 영역을 지정한 바코드 디코딩과, CropBox가 없거나 MediaBox와 같은 페이지는 변함없습니다
Version 2.770.153
Fixed
- ApplyLoadedOCRTextLayer는 이제 CropBox가 MediaBox와 다른 페이지에서 보이지 않는 텍스트 레이어를 올바른 자리에 놓습니다. 이전에는 검색 가능 텍스트가 크롭 박스 오프셋만큼 밀리거나 잘못된 페이지 높이로 스케일되어, 선택과 검색 히트가 눈에 보이는 단어와 맞지 않았습니다
- OCR 래스터는 보이는 페이지 영역(MediaBox로 클립한 CropBox)에서 렌더링하고, 인식된 단어 위치도 이제 같은 영역으로 되돌려 매핑합니다
- THPDFOCRRequest가 커스텀 IHPDFOCREngine에 넘기는 페이지 박스는 이제 렌더링된 보이는 영역으로, 받는 비트맵과 일치합니다
- CropBox가 없거나 MediaBox와 같은 페이지는 변함없습니다
Version 2.770.152
Fixed
- GetLoadedInvoiceSummary는 이제 구매자 이름(BT-44)을 디코딩된 텍스트로 반환하므로, "Müller & Söhne"처럼 non-ASCII 문자가 든 이름이 XML 이스케이프가 그대로 남은 원시 UTF-8 바이트로 돌아오지 않습니다
- 구매자 이름은 이제 항상 구매자 trade party 자체에서 읽어, 판매자 이름과 다른 요약 필드들과 방식이 같아집니다
- ValidateVisualXmlConsistency도 함께 좋아집니다. 악센트 문자나 이스케이프 문자가 든 구매자 이름을 이제 화면에 인쇄된 페이지 텍스트와 쓰인 그대로 비교합니다
Version 2.770.151
Fixed
THPDFTable은 이제RowSpan으로 묶인 행들을 한 페이지에 유지합니다. 남은 공간에 그룹이 들어가지 않으면 그룹 전체가 반복 헤더와 함께 다음 페이지로 이동합니다- 여러 행에 걸친 셀은 자신이 덮는 행이 다음 페이지로 이어질 때 아래 여백을 더는 넘지 않습니다
- 페이지 전체보다 큰 row-span 그룹은 여전히 행 단위로 나뉘며, 걸친 셀은 각 페이지 아래 여백에서 잘립니다
TotalHeightRendered는 마지막 페이지에서 이동된 그룹을 반영합니다
Version 2.770.150
Fixed
ColSpan이나RowSpan이 0 이하인THPDFTable셀은 이제 테이블 그리드가 배치한 그대로 단일 셀로 그려지고, 뒤따르는 셀을 잘못된 열로 밀어내지 않습니다- 음수 span은 테이블이 그리드 밖을 읽게 하지 않고, 마지막 열이나 행을 넘는 span은 측정과 그리기 양쪽에서 테이블 가장자리에서 잘립니다
- 첫 단어가 열보다 넓은 셀은 빈 줄로 시작하지 않으므로, 그 행은 줄바꿈된 텍스트에 필요한 높이보다 커지지 않습니다
Version 2.770.149
Security
- DOCTYPE에서 internal entity를 선언하는 XFA 폼은 큰 entity를 여러 번 참조해 메모리를 폭증시킬 수 없습니다. internal entity에 치환되는 텍스트는 문서당 16 MB로 제한됩니다
- 1 MB를 넘는 internal entity 값 하나는 거부됩니다
- 어느 한도든 넘는 문서는 기가바이트급 텍스트로 불어나는 대신
EHPDFXFAError로 불러오기에 실패합니다. 평범한 entity 사용은 영향이 없습니다 - entity나 문자 참조가 많은 텍스트도 선형 시간에 디코딩됩니다
Version 2.770.148
Fixed
RecalculateLoadedFormFieldsIncremental은 이제 이름 나열 순서와 관계없이 변경된 것으로 전달된 모든 필드를 똑같이 다룹니다- 계산 필드를 원본 필드 하나와 함께 직접 기록했다면, 그 원본 뒤에 나열된 경우에만 재계산되는 대신 기록된 값을 유지합니다
- 변경된 필드에 의존하는 필드는 여전히 계산 순서대로 한 번만 재계산됩니다
Version 2.770.147
Fixed
- 시작 코드 A(
THPDFBarcode타입 20)를 쓰는 GS1-128 바코드는 이제 Code 128 A처럼 코드 세트 A로 데이터를 인코딩합니다 - 이런 바코드의 소문자는 이제 스캐너가 세트 A의 제어 문자로 읽어버리는 세트 B 코드워드 대신, 코드 세트 B로의 SHIFT로 기록됩니다
- 따라서 소문자가 든 GS1-128 A 심벌을 스캔하면 원래 텍스트가 돌아옵니다
Version 2.770.146
Fixed
- EAN-2·EAN-5 애드온 바코드(
THPDFBarcode타입 18·19)는Checksum이 켜져도 계산된 숫자를 더는Text에 붙이지 않습니다 - 이런 바코드를 반복해서 그리면 다시 그릴 때마다 텍스트에 숫자가 하나씩 붙고 바 패턴이 바뀌는 대신, 이제 매번 같은 심벌이 나옵니다
- 애드온 심벌은 정의상 체크 문자를 넣지 않으므로
Checksum은 무시되며, 패리티 패턴은 예전처럼 값에서 뽑습니다
Version 2.770.145
Fixed
- XFDF 내보내기는 이제 폼 필드 값과 주석 텍스트를 PDF text string으로 디코딩합니다(ISO 32000-1 7.9.2.2). UTF-16BE 값, 16진수 문자열, bullet 같은 PDFDocEncoding 문자가 16진수 자릿수나 코드 페이지 찌꺼기 대신 실제 Unicode 텍스트로 기록됩니다
- XFDF로 내보내는 주석 contents·author·subject·state·overlay 텍스트는 중국어나 키릴 문자 주석 같은 non-Latin 문자를 유지합니다
- XML 선언으로 시작하는 리치 텍스트(
/RC,/RV)는 이제 선언을 떼고 임베드되어, 내보낸 XFDF가 well-formed XML로 유지됩니다 - XFDF 가져오기는 텍스트를 시스템 ANSI 코드 페이지로 더는 변환하지 않습니다. 폼 필드와 주석 텍스트 모두 PDFDocEncoding이 표현할 수 있는 값은 그대로, 나머지는 UTF-16BE text string으로 저장합니다
- 내보낸 XFDF 파일은 ANSI 코드 페이지 밖 문자를
ImportLoadedFormFromXFDF와ImportLoadedAnnotationsFromXFDF로 물음표로 만들지 않고 왕복합니다
Version 2.770.144
Fixed
- 인보이스 요약의 이름과 기타 텍스트는 이제 UTF-8 인보이스 XML에서 디코딩되므로, "Müller GmbH" 같은 판매자가 깨진 멀티바이트 문자로 돌아오지 않습니다
- 이스케이프된 마크업 문자와 문자 참조는 해석되어, XML의 "A & B"가 "A & B"로 보고됩니다
ValidateVisualXmlConsistency는 악센트 문자나 앰퍼샌드가 든 판매자 이름이 화면 페이지 텍스트에 실제로 인쇄돼 있는데도 누락됐다고 보고하지 않습니다- 요약 레코드의 필드가 ANSI 문자열이므로 요약 텍스트는 시스템 ANSI 코드 페이지로 반환되며, 그 코드 페이지가 표현 못 하는 문자는 물음표가 됩니다
Version 2.770.143
Fixed
GetLoadedInvoiceSummary는 이제 인보이스 수준 순합계(BT-106)를 첫 품목 금액이 아니라 헤더 금액 합산에서 보고합니다- 세액 합계·총액·지급액도 마찬가지로 헤더 합산에서 읽고, ZUGFeRD 1.0 인보이스도 예외가 아닙니다
- 발행일(BT-2)은 중첩된
DateTimeString마크업을 포함하는 대신20260305같은 날짜 값 그대로 반환됩니다 HPDFFacturXXMLElementText는 이제 자식 태그를 제거한 요소 전체의 문자 데이터를 반환하고, 이름이 요청한 이름으로 시작하기만 하는 요소를 더는 매칭하지 않습니다
Version 2.770.142
Fixed
- XFDF 내보내기는 이제 emoji나 희귀 CJK 한자처럼 Basic Multilingual Plane 밖 문자를 유효한 4바이트 UTF-8로 기록하고 서러게이트 절반을 따로 인코딩하지 않으므로, 엄격한 XML 리더도 파일을 받아들입니다
- XFDF 가져오기는
😀같은 U+FFFF 초과 문자 참조를 전체 문자로 디코딩하고, 무관한 BMP 문자로 잘라내지 않습니다 - Unicode 스칼라 값을 가리키지 않는 문자 참조와 내보낼 때의 짝 안 맞는 서러게이트는 이제 텍스트를 망가뜨리는 대신 U+FFFD가 됩니다
- 이전 버전이 쓴 XFDF 파일도 여전히 올바르게 가져옵니다
Version 2.770.141
Fixed
C:\Data\2024\001같은 Windows 경로처럼 백슬래시가 든 필드 값과 주석 텍스트는 이제 숫자열이 제어 문자로 바뀌지 않고 XFDF 내보내기·가져오기를 그대로 통과합니다- 백슬래시가 이스케이프로 읽힐 상황에서는 XFDF 내보내기가 PDF literal 문자열처럼 8진수 이스케이프
\134로 기록합니다(ISO 19444-1 5.8.2) - XFDF 가져오기는 이 형식이 제어 문자와 백슬래시에 쓰는 8진수 이스케이프만 디코딩하며, 서드파티 파일의 다른 백슬래시열은 문자 그대로 둡니다
- 같은 경량 XML 리더로 읽는 SVG 텍스트도 백슬래시열을 더는 잃지 않습니다
Version 2.770.140
Fixed
- RenderCacheFolder로 켜는 영구 디스크 렌더 캐시가 이제 LoadFromFile, LoadFromStream, LoadFromRandomAccessSource로 연 문서에서도 동작합니다. 이전에는 일반 로드에서 디스크 캐시를 건너뛰어 페이지가 폴더에 쓰이거나 읽힌 적이 없었습니다
- 파일에서 연 문서는 크기·마지막 쓰기 시각·앞뒤 바이트로 식별하므로, 바뀌지 않은 파일을 다시 열면 전체를 해싱하지 않고 캐시에서 페이지를 읽습니다
- 스트림이나 random-access 소스에서 연 문서는 내용의 SHA-256으로 식별합니다. 이런 문서가 디스크 캐시를 쓰게 하려면 로드 전에 RenderCacheFolder를 설정하세요
- 로드 후 편집된 문서는 그 로드가 끝날 때까지 디스크 항목을 더는 읽거나 쓰지 않으므로, 편집된 페이지가 원본 파일의 캐시 페이지로 제공되거나 저장되는 일이 없습니다
- 디스크 항목은 이제 페이지 렌더 백엔드와 ICC proofing 워크플로에도 의존하므로, 다른 백엔드나 출력 프로파일이 다른 설정으로 렌더링한 페이지를 재사용하지 않습니다. 암호화된 문서는 디스크 캐시에 절대 쓰지 않습니다
Version 2.770.139
Fixed
- 큰 XFDF 파일 가져오기는 파일 크기의 제곱에 비례해 더는 느려지지 않습니다. 필드나 주석이 수천 개인 파일이 이제 수 초·수 분이 아니라 밀리초 안에 파싱됩니다
- 줄바꿈이나 다른 문자 참조가 많은 필드 값은 선형 시간에 디코딩됩니다
- XFDF 파싱 중 최대 메모리는 요소 수 × 파일 크기에 비례해 더는 늘어나지 않습니다
- 같은 경량 XML 리더로 읽는 SVG 입력도 같은 속도 향상을 봅니다
Version 2.770.138
Fixed
DecodeLoadedPageBarcodes가 90도·270도 돌린 페이지를 재시도할 때 디코더에 넘기는 래스터는 이제AttemptRotationDegrees문서대로 시계 방향으로 돕니다- 이런 재시도에서만 발견되는 심벌은 점 대칭 위치가 아니라 페이지의 실제 위치로 보고됩니다
- 이런 심벌에 보고되는 방향은 180도 어긋난 값이 아니라 페이지에서의 읽기 방향과 일치합니다
- 문서화된 시계 방향 회전에 의존하는 커스텀 바코드 디코더도 이제 올바르게 돌려진 래스터를 받습니다
Version 2.770.137
Fixed
- 문서 간 페이지 복사(CopyPageFromDocument, CopyPageByPhysicalIndex, 페이지 임포트·병합 메서드)가 "<<"·">>"나 "["·"]"가 든 텍스트 문자열을 더는 딕셔너리나 배열로 바꾸지 않습니다. "Read <<this>> [now]" 같은 주석 코멘트가 깨진 딕셔너리로 복사되곤 했습니다
- 주석 이름·식별자 같은 16진수 문자열은 16진수 자릿수를 literal 문자열로 쓰는 대신 16진수 형태 그대로 복사됩니다
Version 2.770.136
Fixed
- 새 페이지에서 만드는 주석(AddStampAnnotation, AddTextAnnotation 등 THPDFPage 주석 메서드)은 이제 /Rect를 왼쪽 아래 모서리를 먼저 쓰는 [llx lly urx ury]로 기록합니다. 여러 메서드가 [395 712 575 652]처럼 위 모서리를 먼저 썼는데, 뷰어는 받아들이지만 PDF/A 검증기와 일부 처리 도구는 거부하거나 잘못 읽습니다
Version 2.770.135
Changed
- THotPDF.RenderCacheFolder 속성은 이제 AnsiString이 아니라 string입니다(Delphi 2009 이상과 C++Builder에서 UnicodeString). 영어 Windows의 중국어 사용자 이름처럼 시스템 코드 페이지 밖 문자가 경로에 든 캐시 폴더가 물음표로 바뀌지 않고 주어진 그대로 쓰입니다
- 이 속성에 AnsiString을 대입하는 코드도 계속 컴파일되며, 값은 대입 시점에 Unicode로 변환됩니다
Version 2.770.134
Fixed
- Zoom 카테고리의 SetOptionalContentGroupUsage는 이제 PDF 명세가 정의한 대로 확대 범위를 /min·/max 숫자로 기록합니다. 이전에는 값 전체가 /Min 아래 텍스트 문자열로 기록돼 뷰어가 무시했으므로, 레이어의 확대 범위는 아무 효과가 없었습니다
- Zoom 값은 최소 배율이며 선택적으로 최대 배율이 공백으로 구분돼 붙습니다(예: '0.5 4'). 숫자로 시작하지 않는 값은 이제 예외를 냅니다
Version 2.770.133
Fixed
- 임베드된 CFF/OpenType 폰트 서브셋이 glyph가 아직 쓰는 서브루틴을 더는 버리지 않습니다. 힌트가 8개를 넘는 glyph, hstemhm 힌트나 counter mask가 있는 glyph를 잘못 스캔해 쓰이던 서브루틴이 빈 것으로 교체되고, glyph가 유실되거나 깨진 아웃라인으로 그려질 수 있었습니다
Version 2.770.132
Fixed
- RegisterNChannelColorSpace(스팟 colourant 정의를 받는 오버로드)는 이제 "PANTONE 185 C"처럼 공백이나 구분자가 든 colourant 이름을 /Colorants, /Solidities, /DotGain 딕셔너리 키로 올바르게 기록합니다. 원시 이름은 파일 구문을 깨뜨렸습니다
- AddPDFX6ExternalOutputIntentSpotData도 solidity와 분광 데이터 colourant 키를 같은 방식으로 기록합니다
Version 2.770.131
Fixed
- EnableXMPMetadata로 쓰는 XMP 메타데이터는 Title, Author, Subject, Keywords가 시스템 코드 페이지 텍스트(예: AnsiString으로 대입한 악센트·중국어 문자)를 담을 때 유효한 UTF-8로 담깁니다. 원시 코드 페이지 바이트는 패킷을 invalid XML로 만들어 PDF/A 검증기와 XMP 리더가 거부했습니다
- XML 1.0이 허용하지 않는 제어 문자는 이 XMP 값에서 뺍니다
Version 2.770.130
Fixed
- JBIG2Options.AccumulateGlobalsAcrossPages로 쓴 JBIG2 이미지는 뒤 페이지가 앞 페이지가 쓰지 않은 심벌을 추가할 때 다시 올바르게 디코딩됩니다. 이런 페이지가 새 심벌이 없는 첫 페이지의 globals 스트림을 계속 참조해, 뷰어가 깨져 보이거나 아예 안 보였습니다
- 페이지가 심벌을 추가할 때마다 그 페이지까지의 전체 딕셔너리를 담은 globals 스트림을 기록해 이후부터 쓰며, 심벌을 추가하지 않는 페이지는 계속 최신 것을 공유합니다
Version 2.770.129
Fixed
- 객체 세대 번호가 0이 아닌 불러온 문서를 저장하면 이제 일관된 객체 번호를 기록합니다. 전체 재작성(SaveLoadedDocument와 관련 메서드)은 모든 객체·참조·교차 참조 항목을 세대 0으로 쓰는데, 이전에는 객체 헤더와 trailer가 옛 세대를 유지하는 반면 참조와 교차 참조 테이블은 0을 썼습니다
- 증분 업데이트(SaveIncrementalUpdate와 관련 메서드)는 이제 기존 객체를 실제 세대 번호로 참조합니다. 참조는 항상 세대 0으로 쓰여서, 원본이 다른 세대를 쓰면 존재하지 않는 객체를 가리켰습니다
Version 2.770.128
Fixed
- MaxWidth를 쓰는 THPDFPage.TextOutHTML은 줄바꿈 지점에서 서식을 더는 잃지 않습니다. 스타일이 다른 run 여럿이 함께 다음 줄로 넘어가면 줄바꿈 시점의 스타일 하나로 뭉쳐 그려져 색·굵은/기울임 스타일·폰트·크기·위/아래첨자 오프셋·링크가 사라졌습니다. 이제 각 run은 새 줄에서 자기 서식을 유지합니다
Version 2.770.127
Fixed
- InvalidateRenderedPageCache는 이제 병렬 렌더링이 공유하는 Type 3 glyph·halftone 항목도 버립니다. 문서 전체 무효화 후 다음 병렬 렌더가 이전 내용용으로 캐시된 glyph를 재사용할 수 있었습니다
- PreflightLoadedPAdES는 서명의 PAdES 레벨 검사 부작용으로 공유 렌더링 캐시를 더는 비우지 않으므로, preflight 이후 렌더링도 캐시된 glyph를 유지합니다
Version 2.770.126
Fixed
- 서명된 문서의 리비전·수정 분석은 이름에 괄호가 있거나 괄호로 끝나면, 예컨대 "Total (net)", 이제 필드 이름을 올바르게 보고합니다. 마지막 문자가 잘려나갔습니다
- 8진수 이스케이프나 백슬래시 줄 연결로 쓴 필드 이름도 디코딩합니다
Version 2.770.125
Fixed
- SplitPDFToFiles는 출력 파일을 쓰면서 기본 PDF 뷰어로 더는 열지 않습니다. 내부적으로 만드는 문서는 이제 AutoLaunch가 꺼져 있습니다
Version 2.770.124
Fixed
- GetLoadedTrailerID는 이제 trailer의 /ID 배열에서 문서의 permanent file identifier를 16진수 텍스트로 반환합니다. 이전에는 /ID를 문서 카탈로그에서 찾았는데 거기엔 절대 없으므로, 사실상 모든 파일에서 식별자를 보고하지 못했습니다
Version 2.770.123
Fixed
- SetLoadedOpenActionPage는 이제 요청한 페이지를 이름으로 지정하는 destination을 기록합니다. 페이지 참조가 0 0 R로 쓰여서 뷰어가 그 페이지에서 문서를 열지 못했습니다
- destination은 0 0을 강제해 페이지 왼쪽 아래 모서리로 점프하는 대신 현재 보기 위치(null left·top)를 유지합니다
Version 2.770.122
Fixed
- SetLoadedViewerPreferences는 이제 HideToolbar, HideMenubar, FitWindow, DisplayDocTitle을 boolean 값으로 기록합니다. 이전에는 /true·/false 이름으로 쓰여 뷰어가 boolean으로 취급하지 않았고, 그래서 이 환경 설정들은 아무 효과가 없었습니다
Version 2.770.121
Fixed
- CheckLoadedSignatureSeedValue는 필드의 /Ff 플래그가 필수로 표시하면(비트 4, 값 8) 이제 서명 필드의 /Reasons 시드 값을 강제합니다. 목록에 없는 사유도 그냥 통과하곤 했습니다
- 사유는 PDF 텍스트 문자열처럼 정확히 비교합니다. "Approved"를 나열한 시드 값에 "approved"가 더는 통과하지 않습니다
Version 2.770.120
Fixed
- StampLoadedPageText나 StampLoadedPageShape로 불러온 페이지를 여러 번 스탬핑하면 이제 각 스탬프가 자기 불투명도를, 텍스트 스탬프는 자기 표준 폰트를 가집니다. 두 번째 이후 스탬프가 페이지의 첫 스탬프 투명도·폰트를 재사용하곤 했습니다
- 앞선 스탬프와 불투명도·폰트가 같은 스탬프는 여전히 리소스를 공유하므로, 같은 스탬프를 반복해도 페이지 리소스가 불어나지 않습니다
Version 2.770.119
Fixed
- ExtractLoadedPageStructureText는 이제 /K 항목이 단순 marked-content 번호(/K 3, /K [0 1] 등)인 구조 요소도 따라갑니다. tagged PDF에서 가장 흔한 형태인데도 이런 요소가 무시돼서, 많은 tagged 문서에서 구조 순서를 보고하지 못하거나 텍스트를 그리기 순서로 반환했습니다
- 이 메서드는 문서에 쓸 수 있는 루트 객체가 없을 때 잘못된 카탈로그 항목을 더는 읽지 않습니다
Version 2.770.118
Fixed
- StampLoadedPageText, StampLoadedPageImage, StampLoadedPageShape, StitchLoadedPage, FlattenLoadedAnnotations는 부모 /Pages 노드에서 리소스를 상속하는 페이지를 더는 망가뜨리지 않습니다. 이런 페이지에 새로 빈 /Resources 딕셔너리를 줘서 상속된 폰트와 이미지가 가려지고, 페이지 원본 텍스트와 그림이 더는 표시되지 않았습니다
- 페이지는 이제 새 폰트·이미지·폼을 추가하기 전에 상속 리소스의 자기 사본을 받습니다
Version 2.770.117
Fixed
- ComposeLoadedPagesNUp, ImposeLoadedPagesNUp, ImposeLoadedPagesBooklet과 페이지 스티칭 메서드는 이제 원본 페이지가 부모 /Pages 노드에서 상속한 리소스도 옮깁니다. 이런 페이지가 폰트·이미지 없이 배치돼서, 조판된 용지에서 텍스트와 그림이 빠지거나 잘못 나왔습니다
Version 2.770.116
Fixed
- SaveIncrementalUpdateAuthenticated는 이제 증분 업데이트를 시작한 파일에 되돌려 쓸 수 있습니다. 문서가 소스를 계속 열어 둔 탓에 승인된 업데이트가 대상을 교체하지 못하고, 호출이 항상 액세스 거부 커밋 오류로 실패했습니다
- 제자리 SaveIncrementalUpdate와 마찬가지로 교체 전에 소스를 해제하고 교체가 실패하면 다시 열며, 다음 증분 저장 전에는 BeginIncrementalUpdate를 다시 호출해야 합니다
Version 2.770.115
Fixed
- RepairPDFUA2Structure는 요소를 둘 이상의 부모가 나열하거나(또는 순환을 이루면) 구조 트리에서 지수 시간이 더는 걸리지 않습니다. 언어 상속 복구, 제목 순서 복구, 대체 텍스트 복구 뒤의 marked-content 스캔이 이제 각 구조 요소를 한 번씩만 순회합니다. 다음 요소를 두 번씩 나열하는 24개 요소의 조작된 트리가 이전에는 약 40초 걸렸습니다
Version 2.770.114
Fixed
- HPDFPaginateTable은 분할 불가 행이 반복 헤더 행 아래에 들어가지 않을 때 메모리가 바닥날 때까지 페이지를 더는 추가하지 않습니다. 반복 헤더만 있는 페이지에서는 이제 행을 분할하고(헤더가 페이지를 채우면 배치하고 넘치도록 둡니다)
- HPDFLayoutFootnotes와 HPDFLayoutEndnotes는 구분자가 페이지에 공간을 남기지 않거나 빈 페이지에서 각주의 최소 조각 높이를 못 채울 때 무한히 도는 대신, 이제 그 페이지에 각주를 배치합니다
Version 2.770.113
Fixed
- HPDFBalanceColumns는 분할 가능 항목이 열 높이보다 큰 줄을 가지면 더는 멈추지 않습니다. 이전에는 다음 열로 영원히 넘어갔습니다. 이런 줄은 이제 빈 열 맨 위에 넘치더라도 혼자 놓이고, 레이아웃은 계속됩니다
Version 2.770.112
Fixed
- 표준 security handler 리비전 4(RC4·AES-128 crypt 필터)로 암호화된 문서는 암호화 딕셔너리가 선택적 최상위 /Length 항목을 빠뜨려도 다시 열립니다. "Unsupported legacy Standard security handler V=4 R=4 Length=40"으로 불러오기가 실패했습니다
- 이런 문서는 파일 키가 항상 128비트이므로 최상위 /Length 값을 무엇이든 받아들입니다
Version 2.770.111
Fixed
- ProcessObjectStreamsForDecompression과 ExtractRawObjectFromStream은 객체 스트림이 선언한 /N 개수를 더는 믿지 않습니다. 천만을 넘는 개수는 거부하고, 개수는 스트림 헤더가 실제로 담을 수 있는 객체 번호 쌍 수로 제한되어, 조작된 파일이 수백만 개의 빈 항목을 할당하거나 순회하게 만들 수 없습니다
Version 2.770.110
Fixed
- Direct File API(DADirectEncryptFileAES256, DADirectDecryptFileAES256과 관련 메서드)는 이제 클래식 교차 참조 섹션의 /Root, /Info, /Encrypt, /Prev, /XRefStm을 그 섹션 자신의 trailer 딕셔너리에서만 읽습니다. 증분 업데이트된 파일에서는 나중 리비전의 객체(예: outline 항목)나 trailer에서 /Prev을 주워 읽어 실패하거나 잘못된 리비전을 읽을 수 있었습니다
- 이미 읽은 섹션으로 되돌아가는 /Prev 체인은 같은 섹션을 다시 읽는 대신 이제 멈춥니다
Version 2.770.109
Security
- ApplyLoadedRedactions는 이제 내용이 여러 스트림으로 나뉜 페이지에서 삭제(redaction) 영역 아래의 텍스트도 제거합니다. 한 스트림이 연산자로 끝나고 다음 스트림이 연산자로 시작하면(예: ET 뒤에 BT) 접합부 뒤 텍스트가 잘못된 피연산자에 맞춰져, 영역을 덧칠했는데도 저장된 파일에서 읽힌 채 남았습니다
- 데이터 없는 콘텐츠 스트림은 일관되게 건너뛰어, 나머지 스트림이 페이지에서 찾아낸 텍스트와 정렬됩니다
Version 2.770.108
Changed
- GetLoadedOCGCount, GetLoadedOCGName, GetLoadedOCGVisibility, SetLoadedOCGVisibility가 이제 같은 인덱스, 즉 문서의 /OCProperties /OCGs 배열에서 optional content group의 위치를 씁니다. 이전에는 Count와 name이 기본 구성의 /ON 배열 위치를, visibility가 /OFF 위치를, setter가 /OCGs를 써서 하나의 인덱스가 세 다른 그룹을 가리킬 수 있었습니다. /OCGs가 없는 문서는 여전히 /ON 배열로 폴백합니다
- GetLoadedOCGVisibility는 그룹이 /OFF에 나열돼 있거나, 어느 배열에도 없고 기본 구성의 /BaseState가 /OFF이면 숨겨진 것으로 보고합니다
Fixed
- SetLoadedOCGVisibility는 같은 참조 객체를 /OCGs와 /ON 또는 /OFF 양쪽에 넣지 않고(문서 해제 시 두 번 해제됐습니다), 제거한 항목을 더는 새지 않게 합니다
Version 2.770.107
Fixed
- CopyLoadedPage는 원본·대상 페이지 딕셔너리가 같은 /Contents·/Resources 항목 객체를 공유하게 하지 않습니다. 공유 객체는 문서 해제나 대상 항목 교체 때 두 번 해제되어 메모리를 망가뜨릴 수 있었습니다
- 대상 페이지는 이제 원본 콘텐츠와 리소스에 대한 자기 참조를 받고(직접 값은 복사), 렌더 캐시 항목도 갱신합니다
Version 2.770.106
Fixed
- 손상된 PDF를 불러올 때 읽을 수 없는 스트림 객체마다 메모리가 더는 새지 않습니다. 예컨대 /Length 항목과 endstream 키워드가 모두 없는 스트림, 딕셔너리나 데이터를 불러올 수 없는 스트림입니다. 이런 파일을 반복해서 열면 프로세스가 무한히 커졌습니다
Version 2.770.105
Fixed
- "21."처럼 소수 부분이 빈 수(PDF 명세가 허용)는 더는 불러오기를 실패시키지 않습니다. 이렇게 쓴 indirect 스트림 /Length는 스트림 전체를 버려 페이지를 텅 비게 하곤 했습니다
- 앞에 더하기 부호가 붙거나, ".5"처럼 정수 부분이 빈 수, 32비트 범위를 넘는 정수 부분을 가진 수도 올바르게 읽습니다
Version 2.770.104
Fixed
- PDFmerge 데모: 책갈피를 켜면 소스별 책갈피가 이제 그 소스의 첫 병합 페이지를 엽니다. 이전에는 모든 책갈피가 병합 파일의 첫 페이지를 가리켰습니다
- PDFmerge 데모: 기본 샘플 소스·출력 이름과 폼에 입력한 상대 이름은 데모 폴더 기준으로 해석됩니다. 대화상자에서 파일을 추가하거나 출력을 골라도 현재 디렉터리가 바뀌어 상대 항목이 깨지지 않습니다
Version 2.770.103
Fixed
- TextOut 데모: 생성되는
TextOut.pdf는 이제 데모 주석이 말하듯 실제로 압축된 콘텐츠 스트림을 씁니다. 압축을 제어하지 않는BeginDoc인수에 의존하는 대신Compression을cmFlateDecode로 설정합니다
Version 2.770.102
Fixed
- 향상된 메타파일에서
AlphaBlend로 그린 이미지는THPDFEmfPatcher.RenderEmfDirect로 메타파일을 변환할 때 기록된 불투명도를 이제 유지합니다. 이전에는 불투명도 0으로 블렌딩돼 사라졌습니다 - 기록된 alpha 형식도 존중되어, alpha 채널이 없는 이미지는 실패하는 대신 자기 상수 불투명도로 블렌딩됩니다
- 헤더나 픽셀 데이터가 레코드 밖을 가리키거나 픽셀 데이터가 선언된 비트맵보다 짧은 비트맵 레코드는 레코드를 넘어 읽는 대신 이제 건너뜁니다
- 한 변이 32768 픽셀을 넘거나 총 64 메가픽셀을 넘는 비트맵은 전체를 할당하는 대신 건너뜁니다
Version 2.770.101
Fixed
- StitchLoadedPage, StitchLoadedPageSideBySide, StitchLoadedPageSideBySideEx는 이제 원본 페이지를 페이지 콘텐츠·페이지 박스·리소스를 담은 Form XObject로 그립니다. 페이지 딕셔너리 자체가 XObject로 등록됐는데 뷰어는 이를 그릴 수 없어서, 스티치한 페이지가 보이지 않았습니다
- 같은 대상에 여러 페이지를 스티치하면 모든 스티치 페이지가 유지됩니다. 각각 자기 XObject 이름을 받고, 이전 페이지를 덮어치는 하나의 이름을 모두 공유하지 않습니다
Version 2.770.100
Fixed
- Form XObject는 이제 렌더링될 때 ISO 32000-1이 요구하듯
/BBox로 클립됩니다. 폼이 바운딩 박스 밖에 그리는 콘텐츠는 더는 페이지에 보이지 않습니다 - 4단계보다 깊게 중첩된 Form XObject도 이제 그려집니다. 이전에는 재귀인 양 버렸습니다. 중첩은 최대 32단계까지 허용됩니다
- 직접이든 다른 폼을 통해서든 자기 자신을 그리는 form XObject는 탐지되어 반복 호출을 건너뛰고, 렌더 진단에 재귀 항목을 남깁니다
Version 2.770.99
Fixed
- PDFOptimize 데모: 각 텍스트 페이지의 작은 사각형 행이 이제 스트로크되어 막대가 보이고, 콘텐츠 스트림은 ISO 32000-1 8.5.2가 요구하듯 모든 경로를 painting 연산자로 끝냅니다. 이로써 보고되는 텍스트 PDF 크기가 약간 바뀝니다
Version 2.770.98
Fixed
- /Title (Report (draft) v2)처럼 백슬래시 없이 균형 잡힌 괄호를 담은 literal 문자열은 이제 문서를 불러올 때 전체를 읽습니다. 이전에는 첫 닫는 괄호에서 문자열이 끝나고 딕셔너리 나머지를 잘못 읽었습니다
- 이스케이프된 괄호는 예전처럼 동작합니다
Version 2.770.97
Fixed
- /Title (Livestream) 같은 Info 딕셔너리처럼 문자열이나 name 값이 줄 끝에서 "stream" 글자로 끝나도, 불러오기는 딕셔너리 객체를 스트림으로 더는 착각하지 않습니다. 객체가 스트림으로 읽혀 항목을 잃곤 했습니다
- stream 키워드는 이제 PDF 명세가 스트림 객체를 규정하듯 딕셔너리 닫는 >> 뒤 줄 끝에서 독립 토큰일 때만 인식합니다
Version 2.770.96
Fixed
- Stamp 데모: 이미지 피커가 제공하는 PNG·BMP 파일도 이미지 스탬프로 쓸 수 있습니다. 이전에는 JPEG만 동작하고 다른 파일은 invalid-bitmap 오류로 실패했습니다
- Stamp 데모: 고무 도장 주석은 오른쪽 아래 모서리(오른쪽 아래 이미지 스탬프와 겹치던 자리) 대신 의도대로 각 페이지 오른쪽 위 영역, 꼭짓점 이미지 스탬프 아래에 놓입니다
- Stamp 데모: 기본 입력·출력·이미지 경로는 데모 폴더 기준으로 해석되고, 대화상자에서 파일을 골라도 현재 디렉터리가 바뀌지 않아 상대 이름이 계속 같은 파일을 가리킵니다
Version 2.770.95
Fixed
- policy OID를 담아 만드는 타임스탬프 요청(HPDFRFC3161BuildRequest, 그리고 타임스탬프 인증 기관 policy로 서명할 때)은 이제 요청한 policy를 RFC 3161이 규정한 plain object identifier로 인코딩합니다
- policy는 이전에는 RFC 3161이 요청 확장용으로 예약한 context 태그로 감싸져서, 엄격한 타임스탬프 인증 기관이 요청을 거부하거나 policy를 무시했습니다
- policy OID가 없는 요청은 변함없습니다
Version 2.770.94
Fixed
- ViewerPref 데모: Initial Zoom을 체크하지 않고 두면 이제 진짜 "None (Default)"를 뜻합니다. 데모가 리셋하지 않던 컴포넌트 기본값 때문에 생성된 PDF가 높이 맞춤으로 열리던 일이 없습니다
Version 2.770.93
Fixed
- FileAttach 데모: 시스템 ANSI 코드 페이지 밖 문자가 든 폴더 이름에서 데모를 실행해도 페이지 수준 첨부 주석이 이제 만들어집니다. 첨부 파일은 절대 경로 대신 파일 이름 그대로 전달됩니다
Version 2.770.92
Fixed
- HTMLText 데모: 시스템 ANSI 코드 페이지 밖 문자(예: 그리스어·키릴 문자 폴더 이름)가 든 출력 경로도 실패하는 대신 이제 올바르게 기록됩니다
- HTMLText 데모: 생성된 PDF를 외부 리더로 자동 열지 않아 다른 콘솔 데모와 같아졌습니다
Version 2.770.91
Fixed
- SVG·XPS 경로 임포트는 수백 자리 숫자나 큰 지수와 결합된 긴 숫자에서
EOverflow를 더는 내지 않습니다. 이런 값은 다른 범위 밖 숫자처럼 거부됩니다 - 부동소수점 예외를 마스크하지 않는 컴파일러에서, SVG 임포트 API로 놓는 SVG 이미지와 XPS 경로 지오메트리에 영향을 줍니다
- 음의 지수를 가진 긴 가수를 포함해 평범한 숫자는 예전처럼 읽습니다
Version 2.770.90
Fixed
- EmfDraw 데모: 변환이 실패하면(예: 입력 메타파일 누락) 종료 코드 0 대신 1로 끝나서, 데모를 도는 스크립트와 빌드 단계가 실패를 감지합니다
Version 2.770.89
Fixed
- CJKAnnotations 데모: Arial Unicode MS가 설치돼 있지 않으면 데모가 이제 실제로 Microsoft YaHei로 폴백합니다. 없는 폰트는 애초에 예외를 내지 않으므로 그걸 기다리는 대신 설치된 폰트를 검사해서, CJK 텍스트가 CJK 커버리지 없는 대체 폰트에 담기지 않습니다
Version 2.770.88
Fixed
q연산자를 32개보다 깊게 중첩한 콘텐츠 스트림이 감싸는 그래픽 상태를 더는 잃지 않습니다. 더 깊은 저장은 무시되면서 대응하는Q는 여전히 복원해, 중첩 블록 뒤 텍스트와 그래픽이 바깥q이전 상태를 썼습니다- content device 인터페이스를 통한 텍스트 추출과 이런 페이지의 SVG 내보내기에 영향을 줍니다
- 저장된 상태는 이제 중첩 깊이에 맞게 늘어나며, 아주 깊은 중첩도 여전히 올바르게 짝이 맞습니다
Version 2.770.87
Fixed
- ImageDemo: "Image zoom" 책갈피가 이제 첫 페이지 하단 근처의 한 점 대신 IMAGE ZOOM 제목으로 이동합니다
Version 2.770.86
Security
- 타원 곡선 키(ECDH 키 합의)를 가진 수신자 인증서용으로 암호화된 PDF를 열 때, 원시 공유 시크릿과 중간 키 유도 버퍼를 더는 필요 없는 즉시 지웁니다. 바이트 순서를 바꿔 재시도할 때와 모든 초기 실패 경로에서도 마찬가지입니다
- Windows 인증서 저장소의 인증서로 서명할 때, 필요한 CryptoAPI 함수를 찾지 못하면 crypt32.dll과 advapi32.dll이 로드된 채 남지 않습니다
Version 2.770.85
Security
- charstring이 피연산자가 너무 적은 sbw를 쓰는 Type 1 glyph를 아웃라인할 때 피연산자 스택 앞쪽을 더는 읽지 않습니다. malformed 연산자는 무시됩니다
- 두 바이트 연산자의 escape 바이트로 끝나는 Type 1 charstring이 charstring 끝을 넘어 더는 읽지 않습니다
Version 2.770.84
Fixed
- CMap 코드스페이스 범위에서 문자 코드의 바이트 길이를 이제 ISO 32000-1 9.7.6.2가 규정하듯 16진수 문자열의 길이에서 가져옵니다. <0000> <00FF> 같은 범위는 상한이 한 바이트에 들어가므로 한 바이트로 취급됐고, 렌더링과 텍스트 추출에서 두 바이트 코드가 쪼개졌습니다
- 내장 CMap에서 불러온 코드스페이스 범위도 코드 길이를 함께 가집니다
Version 2.770.83
Fixed
- 설치된 TrueType 폰트의 서브셋을 임베드할 때, 구성 요소가 scale이나 2x2 변환을 담고 있는 복합 glyph(악센트 문자 등)의 모든 구성 요소를 유지합니다. 이런 변환 뒤의 구성 요소가 잘못 읽혀 서브셋에서 사라지거나, glyph 참조가 변환 바이트를 덮어쓸 수 있었습니다
- 구성 요소가 서로 순환 참조하거나, 폰트의 glyph 수를 넘어 참조하거나, 빈 glyph를 가리키는 복합 glyph가 폰트 서브셋팅을 더는 깨뜨리거나 hang시키지 않습니다
- 서브셋에서 다른 복합 glyph 안에 중첩된 복합 glyph는 구성 요소 참조 번호를 두 번이 아니라 한 번만 다시 매깁니다
Version 2.770.82
Fixed
- CFF 폰트 딕셔너리의 실수(FontMatrix, FontBBox, blue 값 등)를 한 바이트에 숫자와 함께 부호, 소수점, 지수가 들어 있어도 올바르게 읽습니다. 같은 바이트의 숫자가 버려져 -2.25가 -0.5가 되곤 했습니다
- 이 값들은 Windows 국가 설정과 무관하게 마침표를 소수점 구분자로 해석합니다. 소수점에 쉼표를 쓰는 시스템에서는 변환 오류로 실패했습니다
Version 2.770.81
Fixed
- 텍스트 추출과 ToUnicode 조회에서, 다중 문자 대상을 가진 배열 항목 뒤에 오는 beginbfrange 배열 항목의 코드에 낡은 다중 문자열을 더는 돌려주지 않습니다. 이런 코드는 이제 자기 단일 문자에 매핑됩니다
Version 2.770.80
Fixed
- TrueType 가변 폰트를 지정한 축 값으로 인스턴스화할 때(SetVariableFontAxis 경유 등), gvar 데이터에서 어떤 튜플 뒤에 sparse 튜플이 오는 glyph를 더는 왜곡하지 않습니다. sparse 튜플이 앞 튜플의 델타에서 출발해 그 점들을 두 번 움직였습니다
- sparse 튜플이 제외한 점은 이제 OpenType gvar 규칙이 요구하듯 그 튜플이 나열한 점들만으로 보간됩니다
Version 2.770.79
Security
- AddTiffFromFile는 이제 가로×세로가 2 GB를 넘는 래스터가 필요한 TIFF 페이지를 거부합니다. 크기가 wrap around된 버퍼를 할당해 디코더가 끝을 넘어 쓰게 두는(힙 오버플로) 대신 예외를 raise합니다
- 가로나 세로가 0인 TIFF 페이지도 같은 방식으로 거부됩니다
- 세로로 긴 TIFF 페이지(1200행 이상)는 nil 버퍼로 디코딩하는 대신 할당 실패를 보고합니다
Version 2.770.78
Fixed
- Type 3 폰트 glyph가 이제 가로 스케일링(
Tz)을 따릅니다. 200% 가로 스케일로 그린 텍스트 run이 자연 폭이 아니라 두 배 폭으로 그려집니다 - Type 3 폰트 glyph가 이제 text rise(
Ts)를 따르므로, Type 3 폰트로 짜인 위첨자와 아래첨자가 베이스라인에 머무르지 않고 올라가거나 내려갑니다 - glyph advance는 이미 스케일되고 있었고, 이제 glyph 모양이 그에 맞춰 정렬됩니다
Version 2.770.77
Fixed
- HPDFRFC3161BuildRequest가 만드는 RFC 3161 타임스탬프 요청은 nonce를 항상 최소 DER INTEGER로 인코딩합니다. 무작위 nonce가 0 바이트로 시작하면 요청이 불필요한 선행 0을 실었고, 엄격한 타임스탬프 서버는 이를 malformed로 거부했습니다
- 반환되는 nonce는 요청된 길이를 유지하므로, 타임스탬프 응답과 비교하는 호출자는 영향받지 않습니다
- 객체 스트림이 빈 콘텐츠로 복호화되는 암호화 PDF 2.0 파일(AES-256-GCM)이 GCM 인증 오류로 로드에 실패하지 않습니다. 유효한 인증 태그를 가진 빈 객체 스트림은 이제 받아들이고, 변조된 태그는 여전히 거부합니다
Version 2.770.76
Fixed
- Hyperlink 데모: 시스템 ANSI 코드 페이지 밖의 문자(그리스 문자, 키릴 문자, 악센트 문자 등)를 담은 링크 캡션과 URL이 더는 물음표로 바뀌지 않습니다. 캡션은 Unicode 텍스트로 그려지고 그 위에 URI 링크가 얹힙니다
- Hyperlink 데모: URL의 non-ASCII 문자는 링크 action에 저장되기 전에 UTF-8로 percent 인코딩되므로, 리더가 의도한 주소를 엽니다
Version 2.770.75
Fixed
- 구성 요소가 0..1을 벗어난 CalRGB 색이 렌더링 중 부동소수점 예외(
EInvalidOp)를 더는 raise하지 않습니다. 구성 요소는 감마를 적용하기 전에 유효 범위로 클립됩니다 - 부동소수점 예외가 마스크된 컴파일러에서도 이런 색은 정의되지 않은 색 대신 범위 안에서 가장 가까운 색으로 렌더링됩니다
Version 2.770.74
Fixed
- 여러 스레드에서 동시에 도는 Direct File API 재작성(예: DADirectEncryptFileAES256, DADirectDecryptFileAES256)이 서로의 출력을 더는 망가뜨리지 않습니다. 이들이 공유하는 byte-range 복사가 프로세스 전역 버퍼 하나를 썼습니다
Version 2.770.73
Fixed
- THPDFSignatureValidationBatch의 공유 해지 캐시가 이제 일련 번호의 최상위 비트가 켜진 서명자 인증서의 OCSP 응답도 찾습니다. 이런 응답은 선행 0 바이트 없는 일련 번호로 저장되고 그대로 조회돼, 이후 모든 서명이 캐시를 놓쳤습니다
- 위임된 responder가 서명했거나 키로 responder를 식별하는 OCSP 응답은 이제 인증서 발급자 아래 저장되어 배치의 이후 서명이 재사용할 수 있습니다. 전에는 responder 이름 아래 저장되거나 아예 저장되지 않았습니다
- 같은 배치에서 이전 서명이 캐시한 증거에 의존하는 서명은 이런 경우 알 수 없는 해지 상태 대신 신뢰 판정에 도달합니다
Version 2.770.72
Fixed
- 이름으로 임베드 파일을 조회할 때(GetLoadedEmbeddedFileSpec, ExtractEmbeddedFileBytes, SaveLoadedEmbeddedFileToDisk 등 관련 메서드), 문서의 /EmbeddedFiles 이름 트리가 서로를 또는 자기 자신을 /Kids로 나열하는 노드를 가지면 스택 오버플로가 나지 않습니다
- 각 이름 트리 노드는 한 번만 검색되므로, 공유 노드를 통해 도달 가능한 이름도 여전히 찾습니다
Version 2.770.71
Fixed
- PageSizes 데모: 중국어 8K·16K 포맷 페이지가 이제 모든 시스템에서 전체 설명을 인쇄합니다. 설명은 CJK glyph가 없는 Arial로 그려지고 non-CJK 코드 페이지에서는 non-ASCII 텍스트가 물음표로 바뀌었기 때문에, 중국어 포맷 이름은 병음으로 표기합니다
Version 2.770.70
Fixed
- Axial(Type 2) 셰이딩이 이제 셰이딩 축이 칠해진 영역에서 멀리 떨어져 있어도 전체 영역을 덮습니다. 예컨대
/Extend [true true]로 페이지 밖에 정의된 그라디언트가 그런데, 이런 영역은 칠해지지 않고 남았습니다 sh연산자와 fill·stroke 색으로 쓰이는 셰이딩 패턴에 적용됩니다
Version 2.770.69
Fixed
- Navigation 데모: named destination
chapter-1과chapter-2가 이제 페이지 하단으로 스크롤하는 대신, 위에서 60포인트 아래인 페이지 상단에 페이지를 엽니다. destination 좌표는 원점이 왼쪽 아래인 PDF 기본 user space입니다
Version 2.770.68
Fixed
- 임베드 TrueType 폰트가 있는 PDF의 텍스트 추출이, 폰트의 cmap이 잘려 있으면서 수천 개의 segment나 group을 주장할 때 몇 분씩 멈추지 않습니다. 이제 segment와 group을 읽기 전에 테이블 길이를 검사합니다
- 임베드 TrueType 폰트의 glyph-Unicode 맵을 만들 때 65,535개 BMP 코드 포인트를 하나씩 조회하는 대신 각 cmap 서브테이블을 segment나 group 단위로 한 번씩 훑습니다. 큰 CJK 폰트의 추출도 빨라집니다
- 잘린 format 4나 format 12 cmap 서브테이블을 통한 glyph 조회는 존재하지 않는 segment를 훑는 대신 폰트 데이터 끝에서 멈춥니다
Version 2.770.67
Fixed
- Exponential(Type 2)과 stitching(Type 3) 함수가 이제 입력 하나짜리
/Domain(예:[0 0.5])을 존중합니다. 전에는 무시하고[0 1]로 대체해 입력이 잘못된 구간으로 클립됐습니다 /C1이 없는 exponential 함수는 이제 기본값[1.0]을 씁니다. 이렇게 정의된 Separation 색과 셰이딩은 검게 나왔습니다- Exponential 함수는 이제 입력을 0..1로 재스케일하지 않고 입력 그대로
C0 + x^N (C1 - C0)을 계산해,[0 1]이 아닌 도메인에서 ISO 32000-1과 일치합니다 - Exponential 함수 출력은
/Range가 있을 때만 클립합니다. Lab 대체 색 공간(L*이 100까지)을 가진 spot 색이 0..1로 클립돼 거의 검게 나왔습니다 - 정의역 밖의 입력을 받은 exponential 함수는 부동소수점 예외를 raise하는 대신 거부됩니다
Version 2.770.66
Fixed
- 길이 0 패스워드에서 키를 유도하는 도구가 패스워드 없이 내보낸 PKCS#12 / PFX 파일이 이제 HPDFParsePFX, HPDFParsePFXByLocalKeyID, HPDFEnumeratePFXIdentities와 PFX 서명 메서드에서 빈 패스워드로 열립니다. 전에는 인증 오류로 실패했습니다
- 빈 패스워드에서는 무결성 검사와 키 복호화 모두 RFC 7292 표준 인코딩을 먼저 시도하고 길이 0 형식을 그다음에 시도하므로, 지금까지 열리던 파일은 같은 방식으로 계속 열립니다
Version 2.770.65
Fixed
- C++Builder DBTable 데모의 페이지 헤더가 이제 "Page1"이 아니라 "Page 1"로 표시됩니다
- C++Builder DBTable 데모가 테이블을 쓰다 오류가 나면 이제 반쯤 만든 문서를 닫으므로, 다음 클릭은 깨끗한 상태에서 시작합니다
Version 2.770.64
Fixed
- C++Builder 콘솔 데모 AnnotationInteraction, FormFields, CanvasDraw, EmfDraw, FormXObject, GraphicDraw, ImageDemo, ImageMask, LineGraphicsState, RtLTextOut는 인자 없이 시작하면 Delphi 데모처럼 실행 파일 폴더로 이동하므로, 다른 디렉터리에서 실행해도 입력 파일을 찾고 PDF도 그곳에 씁니다
- C++Builder Graphic 데모가 출력 PDF 이름을 제목에 담은 모든 창에 close 메시지를 보내 관련 없는 창을 닫을 수 있던 일이 없어집니다
- C++Builder ImageMask 데모가 이제 Delphi 버전처럼 동작합니다. Mask.bmp와 Image.jpg의 존재를 검사하고, 출력을 압축하고, 뷰어를 열지 않고, 처리되지 않은 예외로 끝나는 대신 오류를 보고합니다
- C++Builder EmfDraw 데모는 Sample.emf 누락 같은 오류를 보고하고 0이 아닌 종료 코드를 반환하며, 처리되지 않은 예외로 끝나지 않습니다
- C++Builder AddDelPages 데모는 상대 입력·출력 파일 이름을 실행 파일 폴더 기준으로 해석합니다. Delphi 버전과 같습니다
Version 2.770.63
Fixed
- C++Builder FileAttach 데모는 작업 디렉터리의 Output.pdf 대신 실행 파일 옆에 FileAttach.pdf(Delphi 버전과 readme가 쓰는 이름)를 쓰고, FileAttach.txt 첨부 파일도 같은 폴더에 둡니다
Version 2.770.62
Fixed
- Direct File API(DADirectEncryptFileAES256, DADirectDecryptFileAES256 등 직접 재작성 메서드)가 이제 2 GiB를 넘는 교차 참조 스트림 offset을 올바르게 읽습니다. 이런 offset은 잘려 음수가 돼, 큰 파일의 상단부 객체를 찾지 못했습니다
- trailer나 교차 참조 스트림의 2 GiB 넘는 /Prev, /XRefStm offset이 0으로 읽히는 대신 따라가므로, 큰 파일의 이전 리비전과 하이브리드 교차 참조 섹션이 더는 건너뛰어지지 않습니다
- 큰 파일을 로드할 때와 리비전을 검사할 때도 마찬가지입니다
- 새 HPDFDirectReadUIntBE64와 HPDFFindNameInt64 헬퍼가 전체 64비트 값을 반환합니다
Version 2.770.61
Fixed
- /W 필드 폭이 음수이거나 8바이트를 넘는 교차 참조 스트림은 이제 디코딩하는 대신 거부됩니다. 로드는 파일을 훑어 객체를 찾는 방식으로 폴백합니다
- Direct File API 메서드(예: DADirectEncryptFileAES256)는 이런 파일에서 디코딩된 테이블 밖 메모리를 더는 읽지 않고 크래시할 수도 없습니다. 파일을 거부합니다
Version 2.770.60
Fixed
- 텍스트 추출, 검색, glyph 위치가 이제
"텍스트 연산자를 올바르게 읽습니다. 첫 피연산자가 word spacing, 둘이 character spacing인데, 둘이 뒤바뀌어 있었습니다 "와 0이 아닌 word·character spacing으로 쓴 줄이 어긋난 glyph 위치를 더는 보고하지 않습니다. 이로써 추출된 페이지 텍스트에서 단어가 뭉치거나 갈라지고 검색 히트가 엉뚱한 곳을 찍던 일이 없어집니다- 페이지 렌더링은 영향받지 않았습니다
Version 2.770.59
Fixed
- Table 데모: "Group A" rowspan이 덮는 행이 이제 Item·Notes 열에 자기 항목과 노트를 보여줍니다. 전에는 노트 텍스트가 한 열 밀려 나가고 버려졌습니다
- Table 데모: 생성된 PDF를 다른 콘솔 데모와 마찬가지로 외부 리더에서 자동으로 열지 않고, 시스템 ANSI 코드 페이지 밖 문자를 담은 출력 경로도 그대로 유지합니다
Version 2.770.58
Fixed
- Flate 데이터를 스트림으로 압축 해제할 때, 소스나 대상 스트림이 도중에 예외를 raise해도(쓰기 실패, 스트림이 크기 한도에 도달 등) 디코더 상태가(한 번에 약 40 KB) 더는 새지 않습니다
- 문자열을 압축할 때 압축이 예외를 raise해도 임시 버퍼가 더는 새지 않습니다
- 성공한 압축과 압축 해제는 정확히 예전처럼 동작합니다
Version 2.770.57
Fixed
- name constraints 확장이 critical로 표시되지 않은 인증서가 서명 인증서 검증에서 읽을 수 없다는 이유로 더는 거부되지 않습니다. 이런 CA 인증서가 있으면 그걸 지나는 모든 체인이 만들어지지 못했습니다
- 이런 인증서의 제약은 이제 critical인 것처럼 체인의 나머지에 적용되므로, 허용된 서브트리 밖의 서명자 이름은 여전히 name constraint 위반으로 보고됩니다
Version 2.770.56
Fixed
- 깊게 중첩된
if나ifelse프로시저를 가진 PostScript calculator(Type 4) 함수가 렌더링 중 스택 오버플로를 내지 않습니다. 이런 함수는 쓸 수 없는 것으로 취급되고, 색은 다른 유효하지 않은 함수와 마찬가지로 폴백합니다 - 중첩은 64단계로 제한되는데 실제 calculator 프로그램이 쓰는 깊이보다 훨씬 큽니다. 평범한 Type 4 tint 변환과 셰이딩은 예전처럼 렌더링됩니다
- calculator 함수 평가가 중첩 단계당 더 적은 스택을 씁니다
Version 2.770.55
Fixed
- E-Invoice 데모: 추출한 Factur-X / ZUGFeRD XML을 UTF-8로 디코딩하므로, 이름과 주소의 악센트 문자 등 non-ASCII 문자가 XML 창에서 깨져 보이지 않습니다
- E-Invoice 데모: Delphi XE2 이상에서 통합 e-invoice 판정이 비즈니스 규칙 단계를 결정하므로, 규칙 파일이나 엔진 실패가 조용히 통과하는 대신 검증 실패가 됩니다
- E-Invoice 데모: 휴리스틱 정합성 검사의 표시 텍스트 vs XML 불일치는 경고로 보고되며, 그것 하나로 전체 검증이 실패하지 않습니다
Version 2.770.54
Security
- CMS 서명 검증(HPDFVerifyCMSSignature, HPDFVerifyCMSSignatureEx, 불러온 PDF 서명)은 이제 RFC 5652가 요구하듯, signed attributes에 content-type attribute가 없거나 서명된 콘텐츠와 다른 콘텐츠 타입을 이름으로 지정하면 malformed 서명으로 보고합니다. 이런 서명은 유효한 것으로 검증됐고, 한 콘텐츠 타입용으로 만든 signed attributes가 다른 콘텐츠의 서명으로 둔갑할 수 있었습니다
- content-type attribute가 반복된 서명은 예전처럼 거부됩니다
- 정의상 content-type attribute를 담지 않는 카운터서명과 RFC 3161 타임스탬프 토큰은 예전처럼 계속 검증됩니다
Version 2.770.53
Fixed
- C++Builder Annotations 데모 버튼을 두 번째 클릭하면 새 문서를 시작하기 전에 이전 문서를 다시 써 내지 않습니다
- C++Builder Annotations 데모가 PDF를 만들다 오류가 나면 이제 반쯤 만든 문서를 닫으므로, 다음 클릭은 깨끗한 상태에서 시작합니다
Version 2.770.52
Fixed
- 같은 프로세스에서 같은 디스크 렌더 캐시 폴더를 쓰는 여러 문서나
THotPDF인스턴스가 이제 캐시 인덱스 하나를 공유합니다. 전에는 각 인스턴스가 자기 인덱스를 가지고 저장할 때마다 남의 것을 덮어써, 최근 사용 순서가 사라졌습니다 - 디스크 렌더 캐시의 문서 수·전체 크기 한도는 폴더를 공유하는 모든 인스턴스에 걸쳐 강제되므로, 여러 뷰어나 렌더 스레드가 동시에 써도 폴더가 예산을 넘어 자라지 않습니다
- 같은 폴더는 대소문자나 뒤에 붙은 경로 구분자와 무관하게 동일하게 인식됩니다
Version 2.770.51
Fixed
- bicubic이나 Lanczos3 커널로 비트맵을 리샘플링할 때 모든 소스 픽셀 포맷에서 동작합니다. 32비트, 8비트, 1비트 소스가 3바이트 픽셀을 담은 것처럼 읽혀 색 채널이 뒤섞이거나 행 끝을 넘어 읽었습니다
- 이런 소스는 먼저 24비트로 변환되므로 리샘플된 이미지가 소스와 같은 색을 가집니다. 결과는 예전처럼 24비트 비트맵으로 유지됩니다
- 24비트 소스와 하프톤 커널은 영향받지 않습니다
Version 2.770.50
Fixed
- PreflightCLI 데모: PDF 하나에
-d를 쓰면 파일이 preflight에 실패해도 대시보드 인덱스를 씁니다 - PreflightCLI 데모: preflight 중 오류를 낸 파일은 대시보드 인덱스에 실패로 나열되고, 종료 코드에 모든 실패 파일이 반영됩니다
- PreflightCLI 데모:
-r을 쓰면 다른 하위 디렉터리의 같은 이름 PDF 보고가 서로 덮어쓰지 않고 대응하는 하위 폴더에 쓰입니다.-o를 쓸 때와 대시보드에서 모두 그렇습니다 - PreflightCLI 데모:
-f json과-f csv는--profile/--preset/--aggregate여부와 무관하게 CSV spec 열을 포함해 같은 스키마를 냅니다 - PreflightReport 데모: 프로파일을 넣어 생성한 CSV 보고가 프로파일 없는 보고처럼 spec 열을 채웁니다
Version 2.770.49
Fixed
- C++Builder LargeFile 데모가 이제 readme가 묘사한 벤치마크 입력 세트를 Delphi 버전처럼 생성합니다. 실행 파일 옆 BenchmarkInputs 폴더에 LargeFile-Text.pdf, LargeFile-Image.pdf, LargeFile-Mixed.pdf, AES-256으로 암호화된 LargeFile-Encrypted.pdf를 만듭니다. 전에는 200페이지짜리 LargeFile.pdf 하나만 썼습니다
- C++Builder LargeFile 데모는
--output-dir,--scale(small, default, large, huge),--pages옵션을 받고, 생성된 폴더에 대한 HugeFileBenchmark 명령을 출력합니다
Version 2.770.48
Fixed
- C++Builder Outlines 데모는 작업 디렉터리의 Output.pdf 대신 readme가 가리키는 파일인 Outlines.pdf를 실행 파일 옆에 쓰고, 뷰어를 여는 대신 저장 위치를 보고합니다
- C++Builder Outlines 데모가 이제 Delphi 버전과 같은, Arial 페이지 라벨을 담은 10페이지 문서를 만듭니다. y = 830의 페이지 하단 라벨이 페이지 가장자리에서 잘렸고 마지막 페이지의 "Bottom" 책갈피는 그 아래를 가리켰습니다
- C++Builder Outlines 데모가 PDF를 쓰다 오류가 나도 더는 다음 문서를 만들 수 없는 상태로 남지 않습니다
Version 2.770.47
Fixed
- 영구 디스크 렌더 캐시가 이제 이름에 시스템 ANSI 코드 페이지 밖 문자를 담은 폴더(라틴 문자가 아닌 문자가 들어간 사용자 프로필 폴더 등) 아래에서도 동작합니다. 전에는 거기서 모든 페이지 쓰기가 실패해 캐시 히트가 한 번도 나지 않았습니다
THPDFDiskPageCache는 루트 폴더를 Unicode 문자열로 받고, 페이지 파일과 캐시 인덱스의 원자적 교체를 포함해 모든 캐시 경로를 Unicode로 유지합니다
Version 2.770.46
Fixed
- 영역·타일 렌더링(
RenderLoadedPageRegionToBitmap,RenderLoadedPageTiles, 프로그레시브 영역 렌더링)이 유일한 콘텐츠가 원점에서 떨어진 곳에 놓인 form XObject에서 나오는 타일을 더는 빈 칸으로 남기지 않습니다. form은 이제/BBox를/Matrix와 현재 변환이 놓은 위치 기준으로 덮는 것으로 간주됩니다 TD,T*,',"로 놓인 텍스트가 이제 어느 타일에 담기는지 판정할 때 올바른 줄에 착지하므로, 단락의 뒷줄이 자기가 나타나는 타일에서 잘려 나가지 않습니다Tdoffset은 텍스트 매트릭스로 스케일되고 줄 시작부터 측정돼, 텍스트가 실제로 그려지는 방식과 일치합니다- 텍스트 run이 끝나는 위치를 추정할 때 character spacing, word spacing, 가로 스케일링, text rise가 반영되고, glyph가 1em보다 좁다고 가정하지 않습니다
Version 2.770.45
Fixed
- C++Builder MemStream 데모는 작업 디렉터리의 Memory.pdf 대신 Delphi 버전이 쓰는 이름인 MemStream.pdf를 실행 파일 옆에 씁니다
- C++Builder MemStream 데모가 이제 메모리 상의 PDF를 LoadFromStream으로 다시 읽고 저장 전에 한 페이지를 가졌는지 검사합니다
- C++Builder MemStream 데모가 PDF를 쓰다 오류가 나도 더는 다음 문서를 만들 수 없는 상태로 남지 않습니다
Version 2.770.44
Fixed
- C++Builder HelloWorld 데모가 시작할 때 제목에 HelloWorld.pdf를 담은 모든 창에 close 메시지를 보내 편집기나 파일 관리자 같은 관련 없는 창을 닫을 수 있던 일이 없어집니다
- C++Builder HelloWorld 데모는 HelloWorld.pdf를 실행 파일 옆에 쓰고
--open이 주어졌을 때만 엽니다. Delphi 버전처럼 출력 파일 이름이나--output <file>을 받습니다
Version 2.770.43
Fixed
- 페이지 트리에 중간 /Pages 노드를 가진 PDF를 로드할 때 그 노드 아래 페이지가 더는 빠지지 않습니다. 이런 문서는 전에 트리 루트 바로 아래에 나열된 페이지만 보고했습니다
- 페이지는 페이지 트리 순서를 유지하므로, 페이지 인덱스·페이지 박스·콘텐츠가 다른 뷰어가 보여주는 것과 일치합니다
- /Type가 indirect 객체로 저장된 페이지도 이 정렬 단계에서 페이지로 인식됩니다
Version 2.770.42
Fixed
- 페이지 트리가 자기 자신을 다시 참조하는 PDF(/Pages 노드가 자기 /Kids에 나열되거나 두 노드가 서로를 나열)를 로드할 때 스택 오버플로로 크래시하지 않습니다. 각 페이지 트리 노드는 한 번만 걸어지고 터무니없이 깊은 트리는 잘립니다
- /Kids 배열이나 /Type 이름이 indirect 객체로 저장된 페이지 트리 노드가 실패하거나 잘못된 메모리를 읽는 대신 자기 페이지를 로드합니다
Version 2.770.41
Fixed
- THPDFPage.LastAnnotation가 이제 AddGoToLink, AddURILink, AddNamedDestinationLink, AddGoToRLink, AddLaunchLink, AddStructureDestinationLink, AddGoToRStructureDestinationLink가 만든 링크를 반환합니다
- 링크를 추가한 직후 LastAnnotation으로 SetAnnotationFlags, SetAnnotationBorderStyle, AddPopupAnnotationFor를 호출하면 조용히 아무것도 하지 않거나 그 전에 만든 주석을 바꾸지 않습니다
Version 2.770.40
Fixed
THPDFJobProcessor.Execute,HPDFDocRunJob,HPDFDocRunJobWithCallbacks에 넘기는 Job JSON을 이제 전 과정에서 UTF-8로 읽습니다.\uXXXXescape가 ANSI 코드 페이지로 뭉개지지 않고,😀같은 escaped surrogate pair가 깨진 두 문자가 아니라 의도한 문자를 냅니다- merge, split, optimise, encrypt, validate job의 입력·출력 파일 이름은 raw UTF-8로 썼든
\uescape로 썼든 시스템 코드 페이지 밖 문자를 유지하므로, 이런 파일이 실제 이름으로 찾아지고 쓰입니다 - 16진수가 네 자리보다 적은 malformed
\uescape는 뒤 문자나 닫는 따옴표를 삼키지 않고 버려집니다 - job 텍스트 시작의 UTF-8 byte order mark은 무시됩니다
Version 2.770.39
Fixed
- 서명과 타임스탬프 요청을 만들 때 호출자가 넣는 객체 식별자(signature policy, commitment type, claimed role, timestamp policy 등 비슷한 OID)는 첫 arc가 2이고 둘째 arc가 48 이상일 때 이제 올바르게 인코딩됩니다. 합쳐진 첫 값이 한 바이트로 잘려 다른 엉뚱한 식별자가 나오곤 했습니다
- 표현할 수 없을 만큼 큰 객체 식별자 arc는 조용히 다른 값으로 wrap around하는 대신 오류로 거부됩니다
Version 2.770.38
Fixed
- HugeFileBenchmark 데모:
--recursive --keep-output를 쓰면 다른 하위 디렉터리에서 같은 파일 이름을 공유하는 PDF가 서로의 생성 파일을 덮어쓰지 않습니다. 작업 디렉터리가 이제 입력 폴더 트리를 미러링합니다
Version 2.770.37
Security
- 복합 glyph가 수많은 구성 요소를 나열하고 그 각각이 다시 복합인 임베드 TrueType 폰트를 담은 PDF를 렌더링할 때 렌더러나 text-to-path 내보내기가 더는 hang하지 않습니다. 하나의 glyph는 이제 모든 중첩 단계를 합쳐 최대 1024개 구성 요소로 확장됩니다
- 자기 glyph를 다시 참조하는 복합 glyph 구성 요소는 중첩 한도까지 확장되는 대신 건너뛰어집니다
Version 2.770.36
Fixed
- 직접이든 다른 함수를 통해서든 자기 자신을 다시 참조하는 stitching(Type 3) 함수가 스택 오버플로까지 재귀하지 않습니다. 쓸 수 없는 함수로 취급됩니다
RenderLoadedPageToBitmap등 렌더 경로로 그리는 malformed하거나 적대적인 PDF의 Separation·DeviceN tint 변환, 셰이딩 함수, 전송 함수에 영향을 줍니다- 함수 중첩은 16단계로 제한됩니다. 정상 문서의 중첩은 훨씬 얕습니다
Version 2.770.35
Fixed
- C++Builder PageOperations 데모가 이제 Delphi 버전과 같은 워크플로를 돌립니다. InsertLoadedBlankPage로 사용자 지정 크기의 빈 페이지를 끼워 넣고 ExtractLoadedPagesText로 1-3페이지 텍스트를 출력합니다
- C++Builder PageOperations 데모의 재정렬·추출 파일이 이제 Delphi 버전과 같은 페이지를 담습니다. 마지막 페이지를 2페이지로 옮기고 2·5페이지를 추출합니다
Version 2.770.34
Fixed
- C++Builder Hyperlink 데모는 링크 목록이 한 페이지에 들어가지 않으면 새 페이지에서 계속합니다. 첫 페이지 하단을 넘은 링크가 페이지 밖에 쓰였습니다
- C++Builder Hyperlink 데모의 Add·Remove·Make PDF는 PDF를 쓰는 동안 비활성화되므로, 생성 도중에 링크 목록이 바뀌거나 문서가 두 번 시작될 수 없습니다
Version 2.770.33
Fixed
- C++Builder Stamp 데모가 이제 텍스트 워터마크와 고무도장 주석을 각 페이지 크기 기준으로 놓습니다. 가로 방향 등 A4가 아닌 페이지에서 스탬프 주석이 페이지 밖으로 나가고 워터마크가 중앙을 벗어났습니다
Version 2.770.32
Fixed
- C++Builder ViewerPref 데모의 각 버튼이 이제 새 문서에서 시작합니다. 이전 클릭의 읽기 방향, 초기 줌 등 뷰어 기본 설정이 계속 유효해, 예컨대 Test Direction 뒤의 Create PDF가 더는 선택되지 않은 오른쪽에서 왼쪽 텍스트와 기본 설정을 그대로 썼습니다
- C++Builder PDF_INFO 데모가 이제 Delphi 버전과 readme가 쓰는 파일 이름인 PDFInfo.pdf를 실행 파일 옆에 씁니다
Version 2.770.30
Security
- 인증서 경로 검증(HPDFValidateCMSCertificatePath, 온라인 변형, 서명 배치)이 더는 같은 이름과 키를 공유하는 인증서를 수없이 임베드한 서명에 붙잡히지 않습니다. 이런 세트는 경로 탐색이 모든 가능한 순서를 시도하게 만들었고, 계승으로 자라 검증이 몇 시간씩 붙잡혀 있을 수 있었습니다
- 후보 체인의 각 발급자 서명은 검증당 한 번만 검증되고 결과가 재사용됩니다. 그걸 지나는 모든 경로마다 다시 검증되지 않습니다
- 경로 탐색은 고정된 작업량으로 제한됩니다. 한도에 도달하면 검증이 유효한 경로가 신뢰 앵커에 닿지 않는다고 보고하며, 평범한 체인은 한도에 훨씬 못 미칩니다
Version 2.770.29
Fixed
ImportLoadedInterchangeFromFDF가 주석과 FDF 상태를 읽을 때 이제 키 이름 전체를 맞춥니다./T가/Type이나/Text에서,/F가/FreeText에서,/Status가 같은 방식으로 시작하는 더 긴 키에서 멈추지 않으므로, 불러온 주석이 자기 저자와 플래그를 유지합니다- 불러온 주석 안에 중첩된 딕셔너리의 키와 문자열 안의 키 같은 텍스트가 더는 주석 자체 항목으로 취급되지 않습니다
- 불러온 FDF 주석과 상태의 literal 문자열은 ISO 32000-1이 정의한 모든 escape를 디코딩합니다.
\t,\b,\f, 8진수\ddd, 백슬래시 줄 이어쓰기에 더해\n,\r, escaped 괄호가 해당됩니다
Version 2.770.28
Fixed
- 번들 PNG 리더를 쓰는 XE2 이전 Delphi 버전으로 만든 빌드에서, 압축 텍스트(zTXt) 청크를 담은 PNG 파일을 로드할 때 내부 버퍼를 넘어 더는 읽지 않습니다. 256바이트를 넘는 텍스트가 깨지고 터무니없이 길게 나왔고, 큰 청크는 크래시할 수 있었습니다
- 압축 텍스트 청크의 압축 메서드를 이제 올바른 바이트에서 읽으므로, 지원하지 않는 메서드의 청크가 deflate 데이터인 것처럼 디코딩되는 대신 무시됩니다
- 잘렸거나 malformed인 압축 텍스트가 무한 디코딩 루프에 빠질 위험을 더는 갖지 않습니다
- Delphi XE2 이상 빌드는 시스템 PNG 리더를 쓰며 영향받지 않습니다
Version 2.770.27
Changed
- C++Builder SearchAndSelect 데모가 이제 Delphi 버전처럼 동작합니다. 샘플 PDF를 만들고 로드한 뒤, SearchLoadedDocumentText로 검색어를 찾고 AddLoadedHighlightAnnotation으로 모든 매치 위에 highlight 주석을 얹습니다
- C++Builder SearchAndSelect 데모는 입력 PDF, 검색어, 출력 파일과 --case-sensitive, --whole-word 옵션을 받고, 저장된 사본에서 새 주석을 검사합니다
Fixed
- C++Builder SearchAndSelect 데모의 highlight가 이제 매치된 단어를 덮습니다. 텍스트 위치를 텍스트 상단이 아닌 베이스라인으로 잡아 한 줄 높게 놓였습니다
Version 2.770.26
Fixed
- C++Builder DigiPrint 데모가 이제 소수점 구분자가 마침표인 시스템에서 시작합니다. demo.xml의 쉼표 소수가 시스템 로캘로 파싱돼 폼을 만들다 오류를 냈습니다
- DigiPrint 데모는 demo.xml과 두 JPEG 아이콘을 실행 파일 폴더에서 읽고 demo.pdf를 그곳에 쓰며, 프로젝트는 이제 실행 파일을 데모 폴더의 그 파일들 옆에 놓습니다
- DigiPrint 데모의 푸터 페이지 아이콘이 페이지 하단 선 아래가 아니라 푸터 행 안에 그려지고, 제목·연도·푸터 텍스트는 리포트 스타일의 폰트 크기를 씁니다
- DigiPrint 버튼을 여러 번 클릭해도 클릭마다 왼쪽 여백이 오른쪽으로 더 밀리지 않습니다
- 이미지 파일 누락 같은 오류로 DigiPrint 데모가 PDF를 만들다 실패해도 더는 다음 문서를 만들 수 없는 상태로 남지 않습니다
Version 2.770.25
Fixed
- Showcase 데모: 헤더 밴드, 표지 배경, 그라디언트 견본, 뒷면 포인트 컬러가 이제 자기가 채우는 도형과 나란합니다. 그라디언트 좌표는 PDF 기본 user space(원점 왼쪽 아래)로 주어지므로, 색이 더는 밀리거나 뒤집히지 않습니다
- Showcase 데모: Save Copy가 더는 작업 파일을 바꾸지 않으므로, Regenerate와 Open External이 마지막으로 쓴 사본 대신 메인 갤러리를 계속 씁니다
- Showcase 데모: 갤러리 생성이 실패하면 뷰어가 다시 바인딩되어 빈 화면에 머무르는 대신 마지막으로 로드된 갤러리를 계속 보여줍니다
- Showcase 데모: 시스템 ANSI 코드 페이지 밖 문자를 담은 출력 경로가 그대로 통과합니다
Version 2.770.24
Fixed
- 네 구성 요소를 가진 JPEG 2000 이미지(RGB+알파 또는 YCC+알파)를
TJpeg2000Bitmap으로 로드할 때 red, green, blue, alpha가 이제 32비트 비트맵의 올바른 바이트에 들어갑니다. 전에는 색 채널이 한 바이트 밀리고 알파 채널이 그중 하나를 덮어썼습니다 - 이로써 32비트
TJpeg2000Bitmap을SaveToStream과LoadFromStream으로 왕복할 때 색이 뒤섞여 돌아오던 문제도 고쳐집니다 - 세 구성 요소 컬러 이미지, grayscale 이미지, 네 구성 요소 CMYK 이미지는 예전처럼 로드됩니다
Version 2.770.23
Security
- 값이 <<로 시작해 >>로 끝나는 텍스트 문자열(예: 제목, 저자, 폼 필드 값, "<<URGENT>>" 같은 주석 텍스트)은 이제 항상 문자열로 저장됩니다. 전에는 있는 그대로 쓰여 파일 문법을 깨뜨렸고, 조작된 텍스트가 action 같은 딕셔너리를 저장된 문서에 주입할 수 있었습니다
- 새 문서와, SaveLoadedDocument 등 관련 메서드로 저장하는 불러온 문서에 적용됩니다
Version 2.770.22
Fixed
- C++Builder Barcodes 데모는 현재 작업 디렉터리 대신 실행 파일 옆에 Barcodes.pdf를 쓰고, 선택적 출력 파일 이름을 유일한 인자로 받습니다
- C++Builder Barcodes 데모는 실행을 마친 뒤 PDF 뷰어를 열지 않으며, Delphi 버전처럼 페이지 콘텐츠를 압축하고 fit-height 줌으로 엽니다
- C++Builder Barcodes 데모의 오류는 메시지 텍스트로 보고됩니다. 콘솔에는 메모리 주소가 표시됐습니다
Version 2.770.21
Fixed
- 안정 C ABI에서 같은 핸들에 대한 다른 호출이 아직 도는 동안(다른 스레드에서, 또는 읽기·쓰기·progress·취소 콜백 안에서)
hpdf_document_destroy를 호출해도 그 호출 아래의 문서가 더는 해제되지 않습니다 - 핸들은
hpdf_document_destroy가 반환하자마자 무효가 됩니다. 문서 자체는 그 위에서 도는 마지막 호출이 끝날 때 해제됩니다 - 핸들이 파괴되는 것과 동시에 핸들을 조회하는 호출은 해제된 메모리를 만지는 대신
HPDF_STATUS_INVALID_HANDLE을 받습니다
Version 2.770.20
Security
- GSUB contextual lookup이 자기 자신을 참조하는 TrueType/OpenType 폰트로 텍스트를 셰이핑할 때 스택 오버플로로 크래시하지 않습니다. 중첩 깊이가 이제 단계를 넘어 실제로 누적됩니다
- 수많은 중첩 lookup을 발화하는 contextual 규칙이 그것들을 거의 무한한 루프로 증식시키지 않습니다. 최상위 매치 하나는 최대 1024개의 중첩 lookup을 돌립니다
Fixed
- 다른 contextual lookup에서 도달하는 chaining contextual 치환(GSUB lookup type 6)이 이제 적용됩니다. 전에는 단순 contextual 레이아웃으로 읽혀 매치되지 않아, 일부 합자와 contextual 형태가 빠졌습니다
- contextual 규칙이 참조하는 reverse chaining 치환(GSUB lookup type 8)은 contextual 서브테이블로 잘못 읽히는 대신 OpenType 명세가 요구하듯 건너뛰어집니다
Version 2.770.19
Fixed
RenderLoadedPageToDC가 페이지에 image XObject나 inline 이미지가 있어도 access violation을 더는 raise하지 않습니다. 이미지는 호출자의 디바이스 컨텍스트에 그려집니다GetLoadedPageMetafile가 이미지가 있는 페이지에서 더는 실패하지 않고, 이미지가 반환된 메타파일에 기록됩니다- 보이는 표면에 대한 이미지 클리핑은 디바이스 컨텍스트에 clip 영역이 없을 때
RenderLoadedPageToDC에 넘긴 크기를 씁니다
Version 2.770.18
Fixed
- grid skipping이 켜진 JBIG2 하프톤 영역이 영역의 왼쪽이나 위에서 시작해도 여전히 겹치는 grid 셀을 더는 버리지 않습니다. 이런 셀은 멀리 밖에 있는 것으로 취급돼 gray 값이 건너뛰어졌고, 영역의 나머지 셀은 어긋난 채 디코딩됐습니다
- 온전한 픽셀이 아닌 음수 grid 좌표는 이제 JBIG2 명세가 요구하듯 마이너스 무한대 방향으로 반올림되므로, 일부만 보이는 셀이 올바른 픽셀에 자리합니다
- grid가 전부 음이 아닌 좌표에 있는 하프톤 영역은 영향받지 않습니다
Version 2.770.17
Fixed
- responder가 표준 RFC 6960 형식(키 해시 주위의 명시적 [2] 태그)으로 키 해시로 식별되는 OCSP 응답을 다시 받아들입니다. 인증서 경로 검증이 이런 응답을 버려, 키로 자기 자신을 이름 짓는 모든 responder의 해지 상태가 알 수 없는 채로 남았습니다
- 키로 식별되는 직접 responder(발급 CA)와 위임 OCSP 서명 인증서가 모두 맞춰지고, 더 오래된 암시적 태그 형식도 계속 동작합니다
- HPDFDescribeValidationEvidence는 이제 OCSP descriptor를 responder DN이 아니라 응답의 issuer name hash에서 풀어낸, 각 응답이 이름 짓는 인증서 발급자의 DN으로 키잉합니다. 위임 responder의 응답과 키로 식별되는 응답이 이제 인증서 발급자로 조회하면 찾는 descriptor를 냅니다
- CMS 서명과 추가 발급자 인증서를 받는 HPDFDescribeValidationEvidence 오버로드가 추가됐습니다. 키로 responder를 식별하고 인증서를 임베드하지 않는 응답용입니다
Version 2.770.16
Fixed
- Viewer 데모: 폼이 시작할 때 access violation을 더는 raise하지 않습니다. 상태 표시줄이 이제 뷰어가 문서에 바인딩되기 전에 존재하며 페이지 변경 보고를 시작합니다
- Viewer 데모: 검색 상자에서 Enter를 누르면 이제 두 번째 매치로 곧장 건너뛰는 대신 첫 매치를 활성화합니다
- Viewer 데모: destination 페이지를 풀 수 없는 책갈피는 가짜 "(p0)" 접미사 없이 나열되고, 클릭해도 range 오류가 나지 않습니다
Version 2.770.15
Fixed
- C++Builder Security 데모의 복호화 단계가 이제 사용자 패스워드 "user"로 암호화 샘플을 실제로 엽니다. 패스워드 인자가 자동 복호화 플래그로 취급돼 샘플이 패스워드 없이 로드됐고, Security-Decrypted.pdf는 복호화된 사본이 아니었습니다
Version 2.770.14
Fixed
W나W*로 설정한 클리핑 패스가 이제 패스를 칠하기 전이 아니라 칠한 뒤에 효과를 냅니다. ISO 32000-1이 요구하는 방식입니다- 클립도 함께 설정하는 패스를 stroke할 때(
re W S) 이제 선 전체 폭을 칠합니다. stroke의 바깥쪽 절반이 패스 자체 클립에 잘려 나갔습니다 - even-odd 클립과 함께 fill-and-stroke할 때(
W* B) 이제 칠하는 연산자 자체의 winding 규칙으로 채웁니다. even-odd 클립이 fill에 구멍을 뚫었습니다 B*와b*는 이제 이전 연산이 남긴 fill 규칙과 무관하게 항상 even-odd 규칙으로 채웁니다
Version 2.770.13
Fixed
- gray 플레인이 MMR로 인코딩된 JBIG2 하프톤 영역이 이제 디코딩됩니다. 전에는 플레인이 뒤집혀 나오고 여덟 번째 열마다 하나씩만 읽혔으며 각 플레인의 끝이 잘못된 바이트에 위치해, 뒤따르는 플레인이 엉뚱한 위치에서 디코딩됐습니다
- 각 MMR 플레인 뒤의 end-of-block 마커는 마지막 행 바로 뒤에 오든 byte padding 뒤에 오든 인식되고, 모든 플레인은 이제 그다음 바이트 경계에서 시작합니다
- Arithmetic으로 인코딩된 하프톤 영역은 영향받지 않습니다
- 내장 디코더로 로드·추출·렌더링되는 JBIG2Decode 필터의 PDF 이미지에 적용됩니다
Version 2.770.12
Fixed
- job 프로세서(
THPDFJobProcessor.Execute,HPDFDocRunJob,HPDFDocRunJobWithCallbacks)와 문서 비교가 내는 JSON은 이제 따옴표와 백슬래시를\"와\로 escape합니다. 이전의\x22/\x5C형식은 유효한 JSON이 아니어서, 표준 파서가 따옴표나 Windows 경로를 담은 결과를 거부했습니다 - 제어 문자는
\uXXXXescape로 쓰이고 출력은 항상 well-formed UTF-8입니다. 유효한 UTF-8이 아닌 바이트는 결과에 복사되는 대신 U+FFFD로 대체됩니다 - job 결과와 비교 오류 객체의 오류 메시지는 UTF-8로 인코딩되므로, 비영어 예외 텍스트와 파일 이름이 더는 ANSI 코드 페이지로 전달되지 않습니다
Version 2.770.11
Fixed
- RedactLoadedRect, StampLoadedPageText, StampLoadedPageImage, StampLoadedPageShape, StitchLoadedPage, FlattenLoadedAnnotations가 /Contents가 스트림 배열인 페이지의 기존 콘텐츠를 더는 버리지 않습니다. 새 연산자는 배열 끝에 스트림 하나를 더해 추가되고, underlay는 앞에 추가됩니다
- 콘텐츠가 여러 스트림에 걸쳐 나뉜 페이지의 underlay 스탬프는 모든 원본 스트림을 유지합니다
- 단일 콘텐츠 스트림이 plain FlateDecode가 아닌 필터(ASCIIHex, ASCII85, LZW, RunLength, 필터 체인, predictor가 붙은 Flate)를 쓰는 페이지는 새 연산자를 붙이기 전에 이제 먼저 디코딩되므로, 스탬프·redaction 박스·평탄화된 appearance가 실제로 칠해지고 원본 콘텐츠도 읽힌 상태로 유지됩니다
- 페이지 콘텐츠 스트림을 전혀 디코딩할 수 없으면 그대로 두고, 새 연산자는 인코딩된 바이트에 붙이는 대신 별도 스트림에 쓰입니다
Version 2.770.10
Security
- 임베드 CFF 폰트(FontFile3, Type1C, CIDFontType0C)가 0x80000000 이상의 INDEX offset을 담은 PDF를 렌더링할 때 폰트 데이터 밖 메모리를 더는 읽지 않습니다. 이런 offset은 음수로 취급돼 bounds 검사를 통과했습니다
- 임베드 TrueType 폰트는 0x80000000 이상의 glyph 위치와 테이블 길이에 같은 처리를 받습니다. glyph나 폰트가 엉뚱한 곳에서 읽히는 대신 건너뛰어집니다
- subroutine이 서로를 여러 겹 호출하는 CFF glyph가 렌더링이나 text-to-path 내보내기를 더는 hang시키지 않습니다. 각 glyph는 이제 실제 폰트가 쓰는 양보다 훨씬 큰 고정 charstring 연산 예산을 가집니다
Version 2.770.9
Fixed
- 텍스트 영역이 13픽셀 템플릿의 symbol refinement와 함께 Huffman 코딩을 쓰는 JBIG2 이미지가 이제 디코딩됩니다. 영역 헤더의 refinement adaptive-pixel 바이트가 건너뛰어져 instance 개수와 뒤 필드들이 잘못된 offset에서 읽혀 이미지가 거부됐습니다
- Arithmetic 코딩을 쓰거나 10픽셀 refinement 템플릿을 쓰는 텍스트 영역은 영향받지 않고 정확히 예전처럼 디코딩됩니다
- 내장 디코더로 로드·추출·렌더링되는 JBIG2Decode 필터의 PDF 이미지에 적용됩니다
Version 2.770.8
Security
- codec isolation이 켜져 있을 때, 격리된 codec 워커가 돌려주는 디코딩된 이미지의 크기를 이제 워커 스스로 덮어쓸 수 있는 capacity 필드가 아니라 설정된 출력 한도와 호스트 프로세스가 할당한 공유 메모리에 대해 검사합니다
- 침해되었거나 결함 있는 워커가 호스트가 공유 메모리 블록 끝을 넘어 복사하게 만들 수 없습니다. 이런 응답은 프로토콜 오류로 거부되고 이미지는 그리지 않습니다
- 워커의 응답은 한 번 복사된 뒤 그 사본으로 검증되므로, 검사와 픽셀 복사 사이에 헤더가 바뀔 수 없습니다
Version 2.770.7
Fixed
- 실시간 해지 검사용(HPDFCollectCMSRevocationRequests와 온라인 인증서 경로 검증) OCSP 요청이 이제 CertID의 SHA-256 알고리즘 식별자를 올바르게 인코딩합니다. 전에는 처음 두 객체 식별자 arc가 별도 바이트로 쓰여 해시 알고리즘이 무효였습니다
- malformed 요청을 거부하는 OCSP responder가 이런 요청에 오류 대신 정상 상태로 답하므로, 온라인 해지 검사가 요청 인코딩 때문에 오프라인 증거로 폴백하지 않습니다
Version 2.770.6
Fixed
- Type 3 폰트 렌더링이 이제 glyph의 모든 출현을 칠합니다. 전에는 같은 텍스트 run 안에서, 또는 같은 크기와 방향으로 페이지의 다른 곳에서 반복된 glyph가 처음에만 칠해지고 뒤에는 빈 칸으로 남았습니다
RenderLoadedPageToBitmap,RenderLoadedPageToDC, 페이지 메타파일, 이미지 내보내기 경로에 적용됩니다. 공유 렌더 캐시의 유무와 무관합니다- 반복된 Type 3 glyph는 계속 glyph 캐시를 쓰므로, 이 수정이 출현마다 glyph 프로시저를 다시 읽지 않습니다
Version 2.770.5
Fixed
- 안정 C ABI에서 문서를 파싱하던 중
hpdf_document_load_from_io가 실패하면(읽기 콜백이 오류를 보고하거나 작업이 도중 취소되는 등) 입력 소스를 두 번 해제하지 않습니다. 이런 로드는 힙을 망가뜨리거나 호스트 프로세스를 크래시시킬 수 있었습니다 - 실패한 로드는 내부 오류 대신 콜백이나 취소 상태를 반환하고, 같은 문서 핸들은 그 뒤에 다시 로드할 수 있습니다
- 기존 핸들에 새 문서를 로드할 때는 새 로드가 인수를 마친 뒤에야 이전 입력 소스를 해제합니다
Version 2.770.4
Fixed
DecodeLoadedPageBarcodes가/Rotate 90이나/Rotate 270페이지에서 내는 바코드 결과가 이제 페이지를 대칭으로 접은 위치 대신 심볼의 실제 위치에 bounds를 보고합니다- 그런 페이지에서 보고되는 바코드 orientation이 이제 심볼이 페이지 공간에서 실제로 읽히는 방향과 일치합니다
- 90도 돌아간 페이지에서
ApplyLoadedOCRTextLayer가 놓는 보이지 않는 텍스트가 이제 인식된 단어 위에 놓이므로, 선택과 검색이 올바른 곳을 하이라이트합니다 - 90도 돌아간 페이지의 redaction 탐지가 내는 얼굴 발견 사항도 올바른 페이지 영역으로 되돌아 매핑됩니다
- 돌리지 않은 페이지와 거꾸로 된 페이지는 영향받지 않습니다
Version 2.770.3
Fixed
- 32비트 빌드에서 PixarLog로 압축한 TIFF 이미지를 로드하거나 쓸 때 스택 오버플로로 크래시하지 않습니다. codec을 선택하면 companding 테이블을 만드는데, 이게 끝없이 재귀하는 지수 헬퍼에 부딪혔습니다
- 32비트 빌드의 SGILog(LogLuv) TIFF 이미지도 같은 고쳐진 수학 헬퍼를 거칩니다
- TIFF codec이 쓰는 32비트 내림 헬퍼가 이제 음수를 마이너스 무한대 방향으로 반올림하고 오류 없이 큰 크기를 받아, 64비트 빌드와 일치합니다
Version 2.770.2
Changed
- 렌더링할 때 픽셀 크기의 절반 이하로 그리는 이미지는 디코딩 직후 area averaging으로 그린 크기에 딱 맞게 줄어듭니다. 전에는 풀 크기로 유지되다 그리면서 늘어났습니다
- 줄어든 이미지는 decoded-image 캐시에 들어갑니다. 알파를 되찾으려고 검정과 흰색에 두 번 그리는 투명도 그룹이 이런 이미지를 패스마다 한 번이 아니라 한 번만 디코딩하고, 같은 페이지를 다시 렌더링할 때도 마찬가지입니다
- 소프트 마스크를 가진 이미지는 그려진 크기에서, 마스크도 줄어든 채, 픽셀 단위로 마스크와 합쳐집니다. 큰 이미지와 그 마스크의 풀 크기 사본을 만들고 premultiply하는 일을 피하고, 마스크 가장자리가 nearest neighbour로 샘플링되지 않습니다
- 이런 그룹 안에서 4229 x 4629 마스크 이미지를 약 1/4 크기로 그리는 샘플 페이지에서, 렌더링이 4.5초 대신 약 1.8초 걸렸습니다
- 스텐실 이미지 마스크는 풀 해상도를 유지하고, 공개 region 디코딩 메서드는 문서화된 크기를 계속 반환합니다
Version 2.770.1
Fixed
- 64비트 빌드에서 투명도 그룹이 자기 소프트 마스크를 설정하지 않은 페이지를 렌더링하면 list index 오류로 실패했습니다. 2.769.3의 regression입니다. 이런 페이지는 이제 다시 렌더링됩니다
Version 2.770.0
Added
- 새
RenderColorimetricLuminosityMasks프로퍼티가 그룹이 CIE 기반 블렌딩 색 공간(CalGray,CalRGB,Lab,ICCBased)을 가질 때 휘도 소프트 마스크가 색을 마스크 값으로 바꾸는 방식을 고릅니다 true로 두면 ISO 32000-1 11.5.3이 묘사하듯 CIE Y를 씁니다. 두 설정 아래에서 렌더링된 비트맵은 따로 캐시됩니다
Changed
- 기본적으로 휘도 마스크는 이제 블렌딩 색 공간과 무관하게 흔한 PDF 뷰어처럼 그룹의 resolved 색을 DeviceRGB처럼 가중합니다. CIE Y는 선형 스케일로 측정되므로, ICC나 calibrated 그룹의 미드 그레이는 5분의 1 정도만 마스크됐고 드롭 섀도우와 페이드가 다른 뷰어보다 훨씬 옅게 나왔습니다
- 마스크의
/BCbackdrop 색은 마스크 그룹 안의 칠과 같은 설정을 따릅니다 - 그룹이 device 색 공간을 쓰는 마스크는 예전처럼 렌더링됩니다
Version 2.769.3
Fixed
- Normal이 아닌 블렌드 모드로 칠해진 투명도 그룹 — 디자인 도구가 내보내는 Multiply 드롭 섀도우가 대표적 — 은 이제 자기 색과 알파를 backdrop과 블렌드합니다(ISO 32000-1 11.3.6, 11.4.8). 그룹이 부분적으로 투명한 곳에서는 픽셀이 이미 backdrop을 담고 있었고 그것이 자기 자신과 블렌드됐습니다. Multiply 섀도우는 너무 어둡고 backdrop의 색조로 나왔습니다
- 투명도 그룹의 콘텐츠는 Normal 블렌드 모드에서 시작합니다. 블렌드 모드는 그룹 전체에 적용되기 때문입니다(11.6.6). 전에는 그룹이 칠해진 모드를 그대로 유지해, isolated 그룹이 빈 시작 상태에 자기 콘텐츠를 multiply해 검게 칠해졌습니다
- 블렌드 모드와 같은 graphics state에 설정된 소프트 마스크는 마스크 그룹을 Normal 블렌딩으로 그립니다(11.6.5.2). 블렌드 모드가 흰 마스크 그룹을 검게 만들어 마스크가 보여줘야 할 것을 가렸습니다
- isolated가 아닌 그룹의 알파를 구하려고, 그룹 자체 graphics state가 정상적으로 블렌드할 때는 그룹을 검정과 흰색에 두 번 그립니다. 이런 페이지는 다소 느리게 렌더링됩니다
Version 2.769.2
Changed
- 소프트 마스크를 가진 이미지는 마스크 없는 이미지가 그러하듯 그려지는 크기로 디코딩되고, 마스크도 그 크기로 디코딩됩니다. JPEG 마스크는 풀 크기로 디코딩되는 대신 축소 JPEG 디코더를 거칩니다
- 이미지와 마스크는 항상 통째로 디코딩되므로 마스크가 이미지에 대해 밀릴 수 없고, 클리핑은 그려진 것을 보이는 부분으로 유지합니다
- 4229 x 4629 섀도우 이미지와 약 1000픽셀 폭으로 그린 2114 x 2314 JPEG 마스크가 있는 페이지에서, 72 dpi 렌더링이 3.7초 대신 1.6초 걸렸습니다
DecodeLoadedImageRegionAtResolution은 region 디코더가 없는 포맷의 통짜 이미지를 한 번 더 복사하지 않고 디코딩된 채로 반환합니다
Version 2.769.1
Changed
- 소프트 마스크가 더 빨리 만들어집니다. 마스크를 만들 때 비교용 페이지 전체 사본을 더는 유지하지 않습니다. 디자인 도구가 내보내는 그라디언트와 드롭 섀도우 같이 마스크가 많은 페이지가 마스크마다 한 번씩 치렀습니다
- calibrated 또는 ICC 기반 블렌딩 색 공간 위의 휘도 마스크는 모든 픽셀의 모든 채널마다 계산하는 대신 sRGB 곡선을 찾아보고, 흔한 경우인 gray 마스크 콘텐츠는 단일 테이블로 변환됩니다
- 소프트 마스크 20개쯤 있는 1125 x 1600 페이지가 대략 5분의 1 빨리 렌더링됩니다. 렌더링된 픽셀은 같습니다
Version 2.769.0
Changed
- 페이지의 Width나 Height를 설정할 때 오류를 더는 숨기지 않습니다. 실패하면 크기를 조용히 적용하지 않은 채 두는 대신 예외를 raise하고, canvas가 이미 닫힌 페이지의 크기를 설정하면 이유를 알려주는 메시지를 담은 새 EHPDFPageClosedError를 raise합니다
- 이런 실패 뒤에 페이지가 뒤따르는 크기 변경이 MediaBox만 갱신하고 그리기에 쓰이는 페이지 크기는 갱신하지 않는 상태로 더는 남지 않습니다
Fixed
- 불러온 PDF의 페이지 크기를 바꿀 때 다른 객체를 더는 덮어쓰지 않습니다. 숫자가 별도 객체인 MediaBox나 여러 페이지가 공유하는 MediaBox 배열은 크기를 바꾸는 페이지용으로 복사되므로, 다른 페이지는 자기 크기를 유지합니다
- MediaBox가 네 개 미만의 숫자를 가진 불러온 페이지의 크기를 바꾸면 이제 새 크기의 완전한 MediaBox를 씁니다. 전에는 새 크기가 무시됐습니다
Version 2.768.20
Fixed
- 텍스트 추출이 직접이든 다른 form을 통해서든 자기 자신을 칠하는 Form XObject에 더는 들어가지 않습니다. 이런 form은 중첩 단계마다 다시 읽혀 텍스트가 열두 번까지 반복됐고, 자기 자신을 두 번 칠하는 form은 4,096패스를 잡아먹었습니다
- form의 바운딩 박스(form을 클립하는 것) 밖에 떨어지는 Form XObject의 텍스트는 더는 페이지 텍스트의 일부가 아닙니다
Version 2.768.19
Changed
- 큰 문서가 다시 빨리 로드됩니다. 페이지 트리를 훑을 때 페이지마다 로드된 모든 객체를 검색하지 않고, AutoDecrypt를 쓰는 LoadFromFile의 암호화 검사가 로드와 같은 버퍼로 파일을 읽습니다. 56 MB짜리 PDF Reference 1.7가 이제 22초 대신 약 8초에 로드됩니다
Version 2.768.18
Fixed
- 페이지 렌더링이 이제 Windows가 지역화된 이름으로 보고하는 설치 폰트를 찾습니다. 중국어 Windows의 Microsoft YaHei, 일본어 Windows의 Yu Mincho가 예입니다. 이런 폰트의 텍스트는 PDF가 임베드하지 않으면 대체 폰트로 그려졌습니다
- 공백 없이 쓴 폰트 이름이 이제 일부 단어를 붙여 쓰는 Windows 패밀리와 맞습니다. Microsoft YaHei의 MicrosoftYaHei, Microsoft JhengHei의 MicrosoftJhengHei, MS PGothic의 MSPGothic이 예입니다. 전에는 대문자마다 앞에 공백을 넣어 조회했고 한 번도 찾지 못했습니다
- 렌더러는 어느 폰트 이름이 설치됐는지 기억하므로, 설치되지 않은 폰트가 많은 문서가 페이지마다 각 이름으로 Windows를 더는 탐색하지 않습니다
Version 2.768.17
Changed
- 큰 문서가 훨씬 빨리 로드됩니다. operation telemetry가 이제 파서가 읽는 객체마다가 아니라 operation 안에서 10 ms에 최대 한 번 메모리를 샘플링합니다. 그 샘플은 메모리 매니저의 모든 블록을 걸었습니다. 1,236페이지짜리 PDF Reference 1.6은 30초 대신 약 2.5초에, 56 MB짜리 PDF Reference 1.7은 4분 넘게 대신 약 22초에 로드됩니다
- 느려짐은 애플리케이션 자체 힙 크기에 비례해 자랐으므로, 메모리를 많이 쥔 애플리케이션이 가장 큰 이득을 봅니다
- UpdateOperationTelemetrySample에 간격과 무관하게 샘플을 받는 선택적 Force 파라미터가 생깁니다. 모든 operation의 끝은 여전히 샘플을 하나 받습니다
Version 2.768.16
Fixed
- 빈 파일을 로드할 때 더는 hang하지 않습니다. LoadFromFile은 전에 파일 시작부터 뒤로 읽으며 영원히 루프를 돌았습니다
- 빈 파일, plain text, 무작위 바이트처럼 페이지를 찾을 수 없는 파일이 더는 크기로 추측한 한 세 개의 빈 페이지로 로드되지 않습니다. LoadFromFile은 이제 다른 읽을 수 없는 파일과 마찬가지로 0을 반환하거나 예외를 raise합니다
- 페이지가 암호화된 객체 스트림 안에 있는 암호화 파일은 패스워드 없이 로드하면 빈 페이지로 로드되는 대신 패스워드가 필요하다는 예외를 raise합니다. 패스워드 오버로드로 로드하세요
Version 2.768.15
Fixed
- 페이지 텍스트에 이제 같은 자리에 다시 칠해진 문자가 중복돼 나오지 않습니다. 오버프린트 로고와, 텍스트를 살짝 어긋나게 두 번 겹쳐 그려 흉내 낸 볼드가 대표적인 경우인데, 이런 텍스트는 "Bold wordsBold words"처럼 두 번 추출됐고 검색이 실패하기도 했습니다
- 텍스트·column·layout·semantic 텍스트 추출은 모두 이런 문자를 한 번만 읽습니다. glyph 목록은 여전히 칠해진 모든 glyph를 보고합니다
Version 2.768.14
Fixed
- 전체 Adobe Glyph List의 glyph 이름이 이제 텍스트 추출과 렌더링에서 resolve됩니다. 합자 fi, fl, ff, ffi, ffl과 구형 키릴·히브리·아랍어 폰트가 쓰는 afii 이름도 포함입니다. 이런 glyph 이름을 쓰는 폰트 인코딩은 엉뚱한 문자를 냈고, 예를 들어 "defined"가 "deÞned"로 추출됐습니다
Version 2.768.13
Changed
- LoadFromFile은 LocalFileMappingThreshold(기본 8 MB) 미만 파일을, 매핑이 꺼져 있거나 쓸 수 없을 때는 모든 파일을 64 KB 읽기 버퍼로 읽습니다. 객체가 많고 클래식 교차 참조 테이블을 쓰는 파일이 훨씬 빨리 열려, 912쪽짜리 PostScript Language Reference Manual이 3분 가까이 걸리던 것이 약 1초 만에 로드됩니다
Version 2.768.12
Fixed
- 이제 텍스트 추출이 /W 폭 배열이 CID 순으로 정렬되지 않은 CID-keyed(Type 0) 폰트의 glyph도 제 위치에 놓습니다. 대부분의 glyph가 기본 전각(em) 폭을 받아 줄이 페이지 경계를 넘어 흘러갔고, 줄 끝이 추출 텍스트와 검색에서 잘려 나갔습니다
Version 2.768.11
Fixed
- 베이스 문자에 악센트를 얹어 만든 임베드 CFF(Type 1C) 폰트의 악센트 문자 — Type 1에서 변환된 폰트에 흔한 구성입니다 — 가 이제 렌더링됩니다. ü나 é 같은 문자가 빈 칸으로 남아 "München"에 구멍이 뚫린 것처럼 보였습니다
- 폰트를 임베드한 SVG 내보내기에서도 같은 문자가 이제 온전합니다
Version 2.768.10
Fixed
- 임베드 TrueType 폰트의 복합 glyph가 이제 각 구성 요소를 제 offset에 놓습니다. é, Å 같은 악센트 문자는 악센트를 잃었고, 곡선 큰따옴표는 작은따옴표 뒤에 빈 칸이 붙은 모양으로 그려졌습니다
- 폰트를 임베드한 SVG 내보내기에서도 같은 glyph가 이제 온전합니다
Version 2.768.9
Fixed
/Interpolate false로 표시된 이미지는 자기 해상도보다 작게 그릴 때 이제 평균을 냅니다. 이전에는 여러 픽셀에 하나씩 샘플링했으므로, 이미지로 넣은 차트는 축 레이블이 울퉁불퉁하고 어둡게 나오고 가는 선이 끊겼는데, 다른 뷰어는 부드럽게 보여주는 부분까지 그랬습니다/Interpolate false인 이미지를 확대할 때는 딱딱한 픽셀 경계가 예전 그대로 유지됩니다
Version 2.768.8
Fixed
- 픽셀보다 가는 stroke로 그린 텍스트 — 문서들이 가짜 볼드에 쓰는 수법입니다 — 가 이제 그 폭 그대로 렌더링됩니다. stroke는 늘 한 픽셀 통째로 그려졌고, 그래서 이런 제목은 번져 보이고 다른 뷰어보다 훨씬 굵었습니다
- 임베드·설치 폰트의 작은 glyph는 텍스트 렌더링 모드 1과 2에서 fill 뒤에 stroke 색으로 앤티앨리어싱을 걸어 stroke합니다
Version 2.768.7
Fixed
- 로드한 문서에
ProcessObjectStreamsForDecompression을 호출해도 로드 때 읽은 객체 스트림을 이제 버리지 않습니다. 압축 객체는 그 뒤에도ExtractRawObjectFromStream과ExtractObjectFromStream에서 계속 읽히는데, 이전에는 하나도 읽을 수 없었습니다 - 메서드가 파일을 직접 훑는 경우, 클래식 교차 참조 테이블을 쓰는 문서가 그렇듯, 이제 다른 스트림 바로 뒤에 붙은 객체 스트림도 찾고 그 자체 dictionary에서 객체 수와 offset을 읽습니다
ExtractRawObjectFromStream은 객체 스트림 캐시가 내려놓은 객체 스트림을 빈 결과를 돌려주는 대신 다시 디코딩합니다
Version 2.768.6
Fixed
- Stamp demo가 이제 Win64로도 빌드됩니다
Version 2.768.5
Fixed
- 중국어·일본어·한국어 Windows에서, 첨부 파일 체크섬 같은 이진 문자열을 dictionary에 담은 교차 참조 스트림 문서가 이제 1초도 안 걸려 열립니다. PDF 아홉 개를 첨부한 4 MB portfolio는 열리는 데 2분이 걸렸습니다
- 파서가 이제 Windows 코드 페이지로 변환한 텍스트가 아니라 파일의 raw byte에서 키워드를 찾습니다. 키워드 옆의 이진 데이터가 키워드를 가리거나 위치를 밀어내는 일이 더 이상 없습니다
Version 2.768.4
Fixed
- Form XObject 안의 콘텐츠는 이제 폼이 스스로 설정한 opacity, soft mask, blend mode로 렌더링됩니다. 이전에는 폼 안의 모든 것이 full opacity로 칠해져, 반투명 워터마크와 스탬프가 불투명하게 나왔습니다
- 자체 opacity로 칠하는 폼은 여전히 예전처럼 통째로 한 번 합성됩니다
Version 2.768.3
Fixed
- 페이지 텍스트에 이제 페이지가 Form XObject를 통해 그리는 텍스트도 들어갑니다. 페이지 머리글·바닥글, 워터마크, 스탬프가 그렇습니다. 이전에는 페이지 자체 콘텐츠의 텍스트만 돌아왔습니다
- 폼 텍스트는 폼이 칠해지는 자리에 나타나고, 폼의 matrix로 배치되며 폼 자신의 폰트로 읽습니다. 폼 안에 중첩된 폼도 따라갑니다
- plain, layout, column, semantic 페이지 텍스트가 모두 해당합니다. glyph 단위 추출은 여전히 페이지 자체 콘텐츠의 glyph만 돌려주는데, 그 위치가 그 콘텐츠 안을 가리키기 때문입니다
Version 2.768.2
Fixed
- AES-256
EncryptFile과DecryptFile은 dictionary가/Length보다/Length1을 먼저 적은 임베드 폰트 파일 — Ghostscript 등이 그렇게 씁니다 — 을 더 이상 망가뜨리지 않습니다. 이런 폰트는 1바이트로 통째로 암호화돼 출력을 읽을 수 없었습니다 - 길이를 압축 객체 스트림 안에 저장한 스트림은 AES-256 암호화와 복호화를 데이터 그대로 통과합니다. 이전에는 그런 스트림의 마지막 바이트가 사라질 수 있었습니다
Version 2.768.1
Fixed
- 스트림 길이를 압축 객체 스트림 안에 저장한 문서 — Ghostscript가 쓰는 형태입니다 — 가 이제 온전히 로드됩니다. 이전에는 그런 파일의 페이지 콘텐츠 스트림이 모두 버려져 페이지가 하얗게 나오고 텍스트도 없었습니다
- 길이가 존재하지 않는 객체를 가리키거나 아예 길이가 없는 스트림은 이제 버려지는 대신 끝 마커까지 읽습니다
Version 2.768.0
Added
BuildLoadedPageSVG와SaveLoadedPageAsSVG에 선택적EmbedFonts파라미터가 생겼습니다. 기본값은 꺼져 있고, 기존 호출은 예전과 정확히 같게 내보냅니다EmbedFonts를True로 두면, TrueType이나 CFF 프로그램을 PDF에 임베드한 폰트의 텍스트를 폰트 자신의 glyph 아웃라인으로 그립니다. 그 폰트가 설치되지 않은 시스템에서도 SVG가 똑같이 보입니다- glyph 아웃라인은 한 번만 쓰고 문자가 나타나는 곳마다 재사용하므로, 텍스트 많은 페이지에서도 파일 크기가 작게 유지됩니다
- 텍스트는 아웃라인 위의 투명 텍스트로 SVG에 남아, 여전히 선택·검색이 되고 스크린 리더도 읽습니다
- fill·stroke·fill-and-stroke 텍스트, 선 폭, 회전·확충된 텍스트, clipping path로 쓰인 텍스트가 렌더링된 페이지와 똑같이 나옵니다
- 임베드하지 않은 폰트, Type 1 폰트 프로그램, 세로 CJK 텍스트는 보통 SVG 텍스트로 남습니다
Version 2.767.4
Fixed
- 임베드하지 않은 폰트의 외곽선·외곽선+fill 텍스트(텍스트 렌더링 모드 1과 2)가 이제 렌더링될 때 선 폭을 존중합니다. 이전에는 선 폭과 무관하게 모든 외곽선이 1픽셀로 나왔습니다
- 이런 외곽선은 이제 채움 텍스트와 마찬가지로 설치된 폰트의 정확한 glyph 모양을 정확한 위치에 그립니다
- 설치 폰트에 없어 Windows가 폴백 폰트에서 가져오는 문자도 외곽선일 때 선 폭을 유지합니다
Version 2.767.3
Fixed
- 임베드하지 않은 폰트의 텍스트가 이제 인코딩이 이름 붙인 문자로 그려집니다. 이전에는 문자 코드가 그대로 설치 폰트에 넘어가고 설치 폰트는 자기 문자셋으로 읽었으므로,
/Differences항목과 StandardEncoding·MacRomanEncoding이 Windows 문자셋과 어긋나는 코드가 전부 엉뚱한 문자를 그렸습니다. 인코딩 없는 Type 1 폰트에서 곡선 따옴표가 곧은 따옴표로 나온 식입니다 - 중국어·일본어·한국어 Windows에서는 2.766.83부터 임베드하지 않은 폰트의 악센트 문자, 곡선 따옴표, 저작권 기호 등 코드 127을 넘는 문자가 물음표로 그려졌는데, 이제 설치 폰트의 문자셋으로 다시 읽습니다
- Symbol 폰트는 자기 코드 매핑을 그대로 씁니다
Version 2.767.2
Fixed
- 임베드 폰트의 큰 glyph도 이제 앤티앨리어싱으로 렌더링됩니다. 인쇄 해상도의 제목·타이틀처럼 64픽셀을 넘는 glyph는 앤티앨리어싱 없이 채워져 가장자리가 계단처럼 보였습니다. 이제 256픽셀까지는 앤티앨리어싱되고, 설치 폰트의 더 큰 텍스트는 시스템의 앤티앨리어싱 텍스트 출력을 그대로 씁니다
Version 2.767.1
Fixed
- layout·column·semantic 텍스트 추출이 이제 페이지를 페이지 단위로 잽니다. 이전에는
Tf에 준 폰트 크기와 텍스트 공간의 이동량으로 위치를 비교했는데, 텍스트 matrix로 글자 크기를 정하는 수많은 문서에서 이는 실제 거리의 일부에 불과했습니다. 그래서 layout 텍스트는 글자 하나를 여러 컬럼에 흩뿌리고, column 텍스트는 단어 간격을 모두 잃고, semantic 텍스트는 거의 모든 단어를 자기 줄에 세웠습니다 - 셋 모두 이제 보이는 상자 안의 텍스트만 돌려주고, 텍스트 위치를 옮겨가며 단어를 띄운 문서도 plain 페이지 텍스트처럼 단어를 나눕니다
- layout 텍스트는 한 단어의 글자를 묶어 둡니다. 이전에는 m, W 같은 넓은 글자가 단어 한가운데에 공백을 밀어넣었습니다
- semantic 텍스트는 단일 컬럼 페이지의 매 줄 뒤에 빈 줄을 두지 않습니다. 전체 폭 줄이 이어지면 하나의 구간이 되고, 구간이 바뀌어도 줄 간격보다 크게 벌어졌을 때만 줄을 나눕니다
- 이 메서드들의 도움말 페이지가 반환 내용을 설명하고, column 메서드는 전체 문법을 보여줍니다
Version 2.767.0
Added
LoadFromFile과LoadFromStream에AutoDecrypt파라미터를 받는 overload가 생겼습니다.AutoDecryptTrue에서는 빈 사용자 암호로 암호화된 문서 — 인쇄·복사·편집만 제한하는 문서가 그렇습니다 — 를 뷰어가 열듯 메모리에서 복호화해 열므로, 암호를 넣지 않고도 텍스트를 추출하고 페이지를 렌더링·내보낼 수 있습니다- 암호가 필요한 문서와 암호화되지 않은 문서는 평범한 overload가 로드하던 그대로 로드되고, 빈 암호로 문서가 열리는지는 로드 전에 파일의 작은 범위 몇 개로 확인합니다
- 암호 overload와 마찬가지로 이렇게 연 문서는 메모리에서 암호화 상태가 아니며, 저장하면 암호화되지 않은 사본을 씁니다
Version 2.766.83
Changed
- 표준 14 폰트와 설치된 Office·중국어 폰트처럼 임베드하지 않은 폰트의 작은 텍스트를 이제 unhinted glyph 아웃라인에서 정확한 위치에, 임베드 폰트와 같은 앤티앨리어싱으로 렌더링합니다. 이전의 시스템 텍스트 출력은 glyph마다 통째 픽셀에 올려놓고 모양을 픽셀 격자에 맞췄으므로 작은 텍스트는 간격이 들쭉날쭉하고 얼룩져 보였습니다. 이제 렌더링된 페이지가 다른 뷰어의 모양과 간격에 훨씬 가깝습니다
- 설치 폰트에 없는 glyph과 큰 glyph는 여전히 시스템 텍스트 출력으로 그리는데, 이 출력은 빠진 문자를 연결된 폰트에서 가져올 수 있습니다
Fixed
- 임베드 폰트의 작은 glyph가 더 빨리 그려집니다. 앤티앨리어싱 뒤의 비트맵을 glyph마다 새로 만들지 않고 재사용하기 때문입니다
Version 2.766.82
Fixed
- 렌더링된 페이지에서 설치 폰트로 그리는 텍스트가 이제 그레이스케일 앤티앨리어싱을 씁니다. 이전에는 시스템 ClearType 설정을 따랐으므로, 렌더링 비트맵의 검은 텍스트에 기계마다 다른 붉은·푸른 테가 생겨 저장·인쇄·확충한 이미지에도 남았습니다
Version 2.766.81
Fixed
- 임베드 CFF와 OpenType CFF 폰트의 작은 텍스트가 이제 TrueType 텍스트처럼 앤티앨리어싱으로 렌더링됩니다. 이 glyph들은 앤티앨리어싱 없이 채워졌으므로, 작은 크기와 일반 화면 해상도에서 픽셀보다 가는 획이 사라지고 본문 텍스트가 조각나 보였습니다. Helvetica Neue 같은 폰트로 짜인 양식과 문서가 이제 72 DPI에서도 읽힙니다
Version 2.766.80
Changed
- 페이지 텍스트 추출은 이제 페이지가 보여주는 텍스트만 돌려줍니다. 보이는 영역 — media box 안의 crop box — 밖의 glyph는 제외되므로, 재단된 페이지 밖의 printer's marks, slug line 같은 내용이 추출 텍스트에 더 이상 나오지 않습니다. glyph 단위 추출은 여전히 모든 glyph를 위치와 함께 돌려줍니다
Version 2.766.79
Fixed
- 텍스트 matrix로 크기를 정하는 텍스트에서, 페이지 텍스트 추출이 더 이상 위로 솟은 윗첨자나 살짝 어긋난 baseline에서 줄을 끊지 않습니다. 이전에는 텍스트가
Tf에 준 폰트 크기의 절반 — 이런 문서에서는 흔히 1입니다 — 을 넘어 위아래로 움직일 때마다 새 줄을 시작했으므로, 반 포인트 이동이면 충분했습니다 - 페이지 옆면을 따라 오르는 레이블이나 대각선 워터마크 같은 회전 텍스트도 더 이상 글자마다 줄을 세우지 않습니다. 이제는 텍스트가 흐르는 방향을 가로지르는 이동을 페이지에서의 텍스트 높이의 절반과 비교해 줄을 구분합니다
Version 2.766.78
Fixed
- 설치되지 않은 폰트에 SVG 내보내기가 일반 폰트 패밀리로 폴백할 때, 이제 그 종류의 흔한 face를 먼저 이름 붙입니다.
serif앞에 Times New Roman,sans-serif앞에 Arial,monospace앞에 Courier New입니다. 브라우저는 맨패밀리의 face를 자기 언어 설정에서 고르므로, 중국어·일본어 브라우저는 폭 넓은 라틴 문자가 PDF에서 가져온 위치에서 겹치는 CJK 폰트를 골랐습니다
Version 2.766.77
Fixed
- SVG 내보내기가
KaiTi_GB2312나 그 한자 표기 같은 구식 GB2312 이름으로 알려진 폰트를, 설치된 중국어 폰트 패밀리 이름으로 적습니다. Windows 응용 프로그램은 시스템의 font substitute로 이 폰트에 닿지만 브라우저는 그렇지 못해, 이런 텍스트는 브라우저 기본 폰트로 보였습니다 - 한 언어로만 이름 붙은 폰트도 설치 패밀리의 다른 이름, 예컨대 SimHei와 그 한자 이름을 함께 얻고, 스타일에 맞는 일반 패밀리도 얻습니다
Version 2.766.76
Added
THPDFGlyphRecord에GlyphEndX와GlyphEndY가 생겼습니다. baseline을 따른 glyph 자체 폭의 페이지 공간 끝이며, 문자·단어 간격은 빼고 잽니다
Fixed
- 페이지 텍스트 추출이 이제 공백 문자 대신 텍스트 위치를 옮겨 단어를 띄운 문서의 단어도 나눕니다. 여러 생성기가
[(PDF)-240(Reference)]처럼 쓰거나 단어마다 자리 매김 연산자를 두는데, 이런 단어는PDFReference로 붙어 버렸습니다 - glyph 자체 폭 뒤의 간격이 텍스트 높이의 0.15를 넘으면 공백을 넣습니다. 페이지 단위로 재므로 텍스트 matrix로 크기를 정한 텍스트도 폰트 크기로 정한 텍스트와 똑같이 처리됩니다
- 커닝, 살짝 풀린 간격, 자리 매김이 도로 돌려주는 좁아진 문자 간격, overprint 텍스트, 진짜 공백 문자는 그대로 둡니다. 중국어·일본어·한국어 문자 사이에는 justification이 얼마나 벌려 놓았든 공백을 넣지 않습니다
Version 2.766.75
Fixed
- 텍스트 추출, SVG 내보내기, 렌더링이 이제 Symbol 폰트의 glyph 이름을 알아봅니다.
copyrightsans,registerserif,trademarksans와 큰 괄호의 조각들(parenlefttp,braceex,integralex, ...)이 그렇습니다. 서브셋 Symbol 폰트는 흔히 이 이름들을 재인코딩하고, 문자들이 raw 제어 코드로 나왔습니다 - ITC Zapf Dingbats glyph 이름(
a1부터a206까지)도 모두 알아봅니다. 양식 필드와 불릿 목록이 흔히 그렇듯 폰트가 이 이름들로 고르는 체크 표, 십자, 화살표, 원 안의 숫자가 유니코드 문자로 추출됩니다 - 문자에서 glyph 이름을 찾을 때는 여전히 ZapfDingbats 이름보다
arrowright나spade같은 흔한 이름을 먼저 고릅니다
Version 2.766.74
Fixed
HPDFExtractGlyphsViaDevice가 잘못된 포인터 연산으로 실패하지 않습니다. 만드는 텍스트 추출 디바이스는 참조 카운트로 관리되는데 함수가 명시적으로도 해제했으므로, 모든 호출이 디바이스를 두 번 해제하며 끝났습니다
Version 2.766.73
Fixed
- 텍스트 추출이 이제 명세가 요구하는 대로(ISO 32000-1 9.3.1)
Q에서 텍스트 상태를 복원합니다. 이전에는 transformation만 복원했으므로q...Q안에서 정한 폰트, 문자 간격, leading이 뒤의 텍스트에 그대로 남았습니다 q...Q안에서 고른 폰트가 2바이트 코드를 쓰고 밖의 폰트가 1바이트 코드를 쓰면,Q뒤의 텍스트는 2바이트 코드로 디코딩되다 잃었습니다. Word 같은 생성기가 페이지를 이렇게 쓰며, 목차 leader와 중국어 구간 사이의 라틴 단어가 사라지기 쉬웠습니다- 이 수정은 페이지 텍스트 API와 디바이스 기반 텍스트 추출 인터페이스를 모두 포괄합니다
Version 2.766.72
Fixed
RestoreState뒤에 그리는 텍스트가 이제 언제나 자기 폰트가 선택된 상태입니다. 페이지는 마지막에 쓴 것과 같은 폰트 선택은 건너뛰는데,RestoreState(Q연산자)가SaveState이전의 폰트로 돌려놓는 사실을 반영하지 않았습니다. 그 쌍 안에서 고른 폰트로RestoreState뒤에 나오는 텍스트는 폰트가 없거나 엉뚱한 폰트로 나와 뷰어가 버리거나 텍스트 추출이 읽지 못했습니다- 문자 간격, 단어 간격, 가로 스케일링, leading도 같은 방식으로
SaveState와RestoreState를 따르므로,RestoreState뒤에 다시 정한 값은 읽는 쪽이 이미 옛값으로 돌아간 사이에 건너뛰어지지 않고 기록됩니다 - Type 3 폰트를 선택해도 다음에 이전 폰트를 다시 선택하는 것이 건너뛰어지지 않습니다
- PDF로 변환된 XPS 문서가 영향을 받았었습니다. glyph run마다 자기 저장된 graphics state 안에서 그려지기 때문입니다
Version 2.766.71
Fixed
/ToUnicodeCMap이 2바이트 codespace를 선언하면, 텍스트 추출과 SVG 내보내기가 simple 폰트(Type 1, TrueType, Type 3)의 코드를 2바이트로 읽었습니다. 모든 폰트에 그렇게 쓰는 생성기도 있습니다. simple 폰트의 코드는 언제나 1바이트(ISO 32000-1 9.6.6)이므로 문자 둘이 하나의 알 수 없는 코드로 묶여 대부분의 텍스트가 사라지고 한 글자짜리 문자열만 남었습니다
Version 2.766.70
Fixed
- SVG 내보내기가
Td,TD,T*,',"의 피연산자를 텍스트 공간(ISO 32000-1 9.4.2)이 아니라 페이지 단위로 적용해 텍스트를 옮겼습니다. 워드 프로세서가 흔히 쓰듯1 Tf와 확충된Tm으로 크기가 나오는 텍스트는 줄이 첫 baseline 근처에 겹쳐 쌓였습니다. 이제 PDF에서처럼 배치됩니다 - 콘텐츠 디바이스 텍스트 추출기
THPDFTextExtractDevice에도 같은 수정이 적용됩니다
Version 2.766.69
Fixed
- 페이지 렌더러가
#xx이스케이프를 쓰는 폰트 이름을 이스케이프 채로 Windows에 넘겼습니다. 그렇게 이름 붙은 비임베드 폰트 — 한자로 쓴 KaiTi_GB2312 같은 CJK 폰트에 흔합니다 — 는 설치된 어떤 폰트와도 맞지 않아 대체 face로 그려졌습니다. 이제 이스케이프를 디코딩합니다. UTF-8 이름은 문자를 유지하고 다른 바이트는 시스템 코드 페이지로 읽습니다
Version 2.766.68
Fixed
- SVG 내보내기가
#xx이스케이프를 쓰는 폰트 이름을 이스케이프 그대로 적었습니다. UTF-8 바이트로 저장된 CJK 폰트 이름(한자 표기의 KaiTi_GB2312 이름 같은)은font-family에#e6#a5#b7...로 닿아 설치된 폰트와 맞지 않았습니다. 이제 이스케이프를 디코딩합니다. 올바른 UTF-8인 이름은 유지하고, 다른 인코딩의 바이트는 예전처럼 버립니다
Version 2.766.67
Fixed
- SVG 내보내기가
Q에서 텍스트 상태를 복원하지 않았습니다.q...Q안에서 정한 폰트, 크기, 간격, 스케일링, leading, rise, render mode가 뒤의 텍스트로 넘어갔습니다. 저장된 상태 안에서2 Tr로 제목을 굵게 만드는 페이지는 그 뒤의 본문 텍스트를 전부 stroke 걸어 묵직하게 그렸습니다. 이제 텍스트 상태는 나머지 graphics state와 함께 저장·복원됩니다(ISO 32000-1 9.3.1)
Version 2.766.66
Fixed
- SVG 내보내기가 stroke 렌더링 모드(1, 2, 5, 6)의 텍스트를 stroke 폭 없이 그렸으므로 SVG의 기본값인 텍스트 공간 1단위가 적용됐습니다. PDF 생성기가 얇은 stroke로 굵게 만드는 텍스트,
2 Tr 0.25 w같은 것이 훨씬 굵게 나왔습니다. 이제 선 폭을 user space에서 텍스트 요소의 공간으로 변환하고, 폭 0은 1픽셀 선을 내며, line join도 유지합니다
Version 2.766.65
Fixed
- trailer가
/Encrypt를 참조가 아니라 직접 dictionary로 주는 문서 — 일부 PDF 작성기가 그렇게 냅니다 — 는 암호화되지 않은 것으로 로드됐습니다. 올바른 암호를 줘도 페이지가 하얗게 나오고 텍스트 추출과 SVG 내보내기는 아무것도 돌려주지 않았으며,SaveLoadedDocument는/Encrypt를 빼고 암호화된 스트림은 남겨둔 망가진 파일을 썼습니다. 이제 간접 encryption dictionary를 가진 문서처럼 열고, 복호화하고, 저장합니다 - 교차 참조 로더가 trailer를 첫
>>에서 잘랐으므로 trailer 안의 중첩 dictionary 뒤 항목이 사라졌습니다. 이제 맞는 닫는 구분자까지 읽습니다
Version 2.766.64
Fixed
- 렌더링, SVG 내보내기, 뷰어, 인쇄가 로드한 페이지의
/MediaBox전체를 보여줬습니다. 페이지는/CropBox로 표시·인쇄되고/MediaBox로 잘리는데(ISO 32000-1 14.11.2), crop box가 있는 페이지는 너무 크게, 어긋나게, 숨기려던 내용까지 그려서 나왔습니다 RenderLoadedPageToBitmap, 타일·band·metafile·디바이스 컨텍스트 렌더러,BuildLoadedPageSVG, 뷰어의 페이지 지오메트리·하이라이트·영역 스냅샷, 인쇄가 이제 보이는 상자를 따릅니다./CropBox없는 페이지는 그대로입니다
Added
THotPDF.GetLoadedPageVisibleBox는 로드한 페이지의 보이는 상자, 즉/CropBox를/MediaBox로 잘린 값을 돌려줍니다THPDFPageDisplayList.CropBox는 컴파일된 display list에 대해 같은 상자를 줍니다
Version 2.766.63
Fixed
- 내장 glyph 목록을 테이블보다 13개 모자란 개수까지만 검색했으므로, 정렬에서 마지막에 오는 glyph 이름들(
y,z,zero,zeta,yen,ydieresis,zcaron등)은 영영 못 찾았습니다. 텍스트 추출은 이 이름을 가리키는 폰트의/Differences항목을 무시했고, 페이지 렌더러는WinAnsiEncoding이나MacRomanEncoding인 임베드 CFF 폰트의 y, z, 0을 대체 시스템 폰트로 그렸습니다 - U+0060 같은 악센트의 glyph 이름을 찾으면
grave대신 MacExpertEncoding의 소형 대문자 이름(Gravesmall)이 돌아왔으므로, 그 악센트들도 임베드 CFF 폰트에서 놓쳤습니다
Version 2.766.62
Fixed
- 페이지 렌더러가 선 폭과 대시 길이를 user space 단위(ISO 32000-1 8.4.3.2, 8.4.3.6)가 아니라 디바이스 픽셀로 취했습니다. 해상도를 막론하고 선이 같은 픽셀 폭을 유지했고
cm의 스케일링도 무시했습니다. macOS Quartz로 내보낸 슬라이드 — 1/12700 스케일 아래 EMU 폭으로 모양을 stroke합니다 — 는 stroke 색에 통째로 덮였습니다 - 이제 stroke 폭과 대시는 경로를 stroke할 때 유효한 CTM의 스케일을 따릅니다. stroke 렌더링 모드로 그린 텍스트도 마찬가지입니다
Version 2.766.61
Fixed
- SVG 내보내기가 Type 1 function-based shading(ISO 32000-1 8.7.4.5.2)을 빼먹었습니다.
sh로 칠이든 shading pattern에서의 사용이든 마찬가지였습니다. 이제 shading 함수를/Domain위에서 샘플링해 임베드 PNG 이미지로 만들고, shading의/Matrix로 놓이고/BBox로 잘리며, 그 밑에 pattern의 배경색이 깔립니다
Version 2.766.60
Fixed
- 페이지 렌더러가
sh연산자로 보여지는 mesh shading의/Background색을 칠했습니다. PDF는 이를 무시하는데(ISO 32000-1 8.7.4.5.1), 그래서 mesh 주변의 클리핑 영역 전체가 그 색을 뒤집어썼습니다 - function-based, axial, radial shading pattern의 배경색은 페이지 렌더러가 칠하지 않았습니다. 이제 shading 전에 pattern 영역을 채우므로 shading이 닿지 않는 곳에서 배경색이 보입니다
- SVG 내보내기도 shading pattern의 배경색을 같은 방식으로 칠하고, 렌더러처럼
sh에서는 무시합니다
Version 2.766.59
Fixed
- 페이지 렌더러가 function-based, axial, radial shading의
/BBox(ISO 32000-1 8.7.4.5.1)를 무시했습니다.sh로 칠하거나 shading pattern에 쓴 넓어진 shading은 자기 상자에서 멈추지 않고 클리핑 영역 전체를 뒤덮었습니다. mesh shading은 이미 지키고 있었습니다
Version 2.766.58
Fixed
- SVG 내보내기가 Type 3 폰트의 텍스트를 설치된 폰트의 SVG 텍스트로 적었습니다. glyph procedure로 텍스트나 기호를 그리는 페이지는 엉뚱한 모양을 보였습니다. 이제 glyph procedure 각각을 폰트의
/FontMatrix, 폰트 크기, 텍스트 matrix로 놓아 그립니다(ISO 32000-1 9.6.5) d1으로 시작하는 Type 3 glyph는 현재 fill 색으로 칠해지고, 자기 색을 정하는 glyph는 그 색을 유지합니다
Version 2.766.57
Fixed
- 텍스트 추출과 SVG 내보내기가 Type 3 폰트의
/Widths를 em의 1/1000으로 취급했습니다. 실제로는 glyph 공간의 값이고 폰트의/FontMatrix로 확충됩니다(ISO 32000-1 9.6.5).[0.01 0 0 0.01 0 0]matrix를 가진 폰트의 glyph는 이동 폭의 1/10 간격으로 놓였고, 추출 텍스트에서 단어가 붙는 결과도 낳았습니다
Version 2.766.56
Fixed
- 로드 페이지 렌더링이 모든 Type 0 폰트를
Identity-H를 쓰는 것으로 읽었습니다. 코드당 2바이트, 코드마다 자기 CID입니다. 중국어·일본어·한국어 컬렉션의 미리 정의된 UCS2·UTF16 CMap(UniGB-UCS2-H같은)이나 임베드 CMap으로 인코딩된 폰트는 이제 코드를 CID에 사상하므로,/W폭과 임베드 glyph를 올바른 CID에서 찾습니다. 이전에는 예컨대STSong-Light텍스트의 소문자 라틴 문자가 전각 간격으로 벌어졌습니다 - 코드는 CMap의 codespace 범위로 읽습니다. 1바이트와 4바이트(surrogate pair) 코드가 통째로 읽히고,
-V로 끝나는 이름은 세로쓰기를 고릅니다
Version 2.766.55
Fixed
- 로드 페이지 렌더링은 이름에 스타일 부분이나 PostScript 표기를 지닌 비임베드 폰트,
TimesNewRoman,Bold,TimesNewRomanPS-BoldMT,Arial,BoldItalic,SegoeUI-Semibold같은 것을 대체 face로 그렸습니다. 이제 이름의 패밀리 부분을 설치된 폰트에서 찾습니다. 단어 사이에 공백을 넣은 형태(Times New Roman, Segoe UI)로도 찾고, 스타일은 이름과 font descriptor에서 옵니다
Version 2.766.54
Fixed
/Widths배열이 없는 표준 폰트 — ISO 32000-1 9.6.2.2가 표준 14 폰트에 허용합니다 — 는 로드 페이지 렌더링, SVG 내보내기, 텍스트 추출에서 고정 반각(em의 절반) 이동으로 배치됐고 글자가 좁게 뭉쳤습니다. Helvetica, Times, Courier 패밀리는 Arial, TimesNewRoman, CourierNew라는 이름일 때도 포함해, 이제 메트릭을 공유하는 설치된 Arial, Times New Roman, Courier New에서 폭을 가져옵니다/Encoding없는 표준 Type 1 폰트가 이제 암묵적인 StandardEncoding으로 디코딩됩니다. 코드 39가 오른쪽 작은따옴표로 읽히는 식입니다
Version 2.766.53
Fixed
- 로드 페이지 렌더링이 폰트의
/Widths배열을 간접 객체로 둔 경우 — 여러 생성기가 그렇게 씁니다 — 는 무시하고 고정 반각 이동으로 배치했습니다. 이제 그런 텍스트도 자기 폭으로 간격이 정해집니다 - 간접 객체로 주어진 font descriptor도 렌더링 때 읽으므로, 비임베드 폰트의
ForceBold,Italic플래그와 italic angle이 적용됩니다 SmallCap플래그가 텍스트를 굵게 만들지 않습니다. 굵기는 이제ForceBold플래그를 따릅니다(ISO 32000-1 Table 123)
Version 2.766.52
Fixed
- 로드 페이지 렌더링이 이제 렌더링 모드 4~7(ISO 32000-1 9.3.6)의 텍스트를 클리핑에 씁니다. text object가 끝날 때 glyph가 클리핑 경로에 합류하고, graphics state가 복원될 때까지 유지됩니다. 이전에는 모드 7 텍스트가 무시되어 글자를 통해 보이려던 shading이나 이미지가 영역 전체를 뒤덮었고, 모드 4~6은 클리핑 없이 텍스트를 칠했습니다
- 클립 텍스트는 칠해지는 텍스트와 같은 glyph 아웃라인에서 가져옵니다. 임베드 폰트와 Type 3 glyph도 포함입니다
Version 2.766.51
Fixed
- SVG 내보내기가 이제 렌더링 모드 4~7(ISO 32000-1 9.3.6)의 텍스트를 클리핑에 씁니다. text object의 끝부터 graphics state의 끝까지 glyph가 SVG 클리핑 경로가 되므로, 텍스트를 통해 그리는 shading이나 이미지가 글자 안에만 나타납니다
- 모드 7의 텍스트가 클리핑도 없이 사라지지 않고, 모드 4~6은 모드 0~2처럼 텍스트를 채우거나 stroke합니다
Version 2.766.50
Fixed
/Function이 색 성분마다 하나의 출력 함수를 내는 함수의 배열인 axial, radial, function-based shading(ISO 32000-1 8.7.4.5.1)은 로드 페이지 렌더링에서 그려지지 않았습니다. 이제 그려지고, 배열의 함수는 직접이든 간접 객체든 받습니다- SVG 내보내기는 그런 axial·radial shading을 gradient로 적습니다. shading pattern으로 경로를 채울 때도 마찬가지입니다
Version 2.766.49
Fixed
- SVG 내보내기가 볼드·이탤릭 텍스트를 정체 스타일로 적었습니다. 이제 텍스트가 폰트 이름의 스타일 부분(
Arial-BoldMT,Helvetica-Oblique,MinionPro-It같은)과 font descriptor의 weight, 플래그, italic angle에서font-weight="bold"와font-style="italic"을 얻습니다 - 표준 14 패밀리 밖의 폰트는 패밀리 이름에 스타일 부분을 붙여(
SegoeUI-Semibold) 설치된 어떤 폰트와도 맞지 않았습니다. 이제 패밀리를 홀로, 단어 사이에 공백을 넣은 형태로도(SegoeUI, Segoe UI) 적고, descriptor 플래그나 이름에서 일반 패밀리를 하나 붙입니다
Version 2.766.48
Fixed
- SVG 내보내기가 Form XObject의 콘텐츠를, 폼이 칠해지는 자리에서 유효한 fill·stroke 색 대신 검은색으로 그렸습니다(ISO 32000-1 8.10.1). 이제 폼 안의
Q가 그 색들도 복원합니다 - 콘텐츠 디바이스는 새
IHPDFContentInheritedColorDevice인터페이스로 중첩 콘텐츠를 호출자의 색에서 시작할 수 있습니다
Version 2.766.47
Added
- SVG 내보내기가 tiling pattern을 쓰는 경로를 이제 SVG
<pattern>으로 채웁니다. pattern cell을XStep,YStep간격으로 반복하고 cell의/BBox로 잘립니다. 이전에는 그런 경로가 검은색으로 채워지거나 이전 색을 그대로 유지했습니다 - 무색(uncolored) tiling pattern(
PaintType2)은 pattern과 함께 준 색으로 cell을 칠합니다./CS0 cs 0 0 1 /P1 scn의 성분들 같은 색입니다 - shading pattern으로 채운 경로는 pattern의 axial, radial, mesh shading을 경로로 잘려 받습니다
- pattern matrix는 pattern을 쓰는 페이지나 폼의 공간에서 적용됩니다(ISO 32000-1 8.7.2). 그래서 pattern이 현재 transformation matrix를 따라 확충되거나 움직이지 않고,
Q는q로 저장한 pattern을 되돌려줍니다 - 콘텐츠 디바이스는 새
IHPDFContentPatternDevice인터페이스로 pattern 선택을 받을 수 있습니다
Version 2.766.46
Added
- color-key
/Mask배열(ISO 32000-1 8.9.6.4)을 가진 이미지는 로드 페이지 렌더링에서 이제 mask됩니다. 성분이 모두 key 범위 안에 드는 픽셀은 칠하지 않고 남아 페이지가 비쳐 보입니다 - SVG 내보내기도 같은 color-key mask를 적용하고 그런 이미지를 알파 채널을 가진 PNG 이미지로 적습니다
- key는 저장된 그대로의 샘플과 비교합니다. Indexed 이미지는 두 항목이 같은 색을 공유해도 팔레트 인덱스로 mask되고, 성분당 1, 2, 4비트 이미지도 다룹니다
- 새
DecodeLoadedImageColorKeyMask메서드는 로드한 이미지의 mask를 흑백 비트맵으로 돌려줍니다. Flate, LZW, 무필터 이미지를 다룹니다. 손실 코덱은 정확한 샘플 값을 보존하지 않기 때문입니다
Version 2.766.45
Changed
CompressDocument와CompressLoadedDocument는 객체 스트림 하나에 100개 대신 최대 250개의 객체를 담게 합니다. 더 크고 드문 컨테이너가 더 잘 압축되고 dictionary도 덜 필요합니다- 이미 객체 스트림으로 컴팩트하게 쓰여 있던 로드 PDF는 이제 원본과 비슷한 크기, 대부분은 살짝 더 작게 나옵니다. 이전에는 살짝 더 커졌습니다
ConfigureAdaptiveObjectStreamPacking으로 정한 한도는 유지되고,CompressDocument는EndDoc에서 한도를 복원하며, 평범한 객체 스트림 저장은 컨테이너당 100개를 유지합니다
Version 2.766.44
Changed
- 객체 스트림으로 쓴 파일의 교차 참조 스트림은 열마다 필요한 최소 필드 폭을 씁니다. 그래서 16MB 미만 파일의 offset은 4바이트 대신 3바이트를 차지하고(ISO 32000-1 7.5.8.2), dictionary도 간결하게 기록됩니다
- 교차 참조 스트림은 쓰지만 객체 스트림은 쓰지 않는 파일은 그대로입니다
Version 2.766.43
Changed
- 객체 스트림으로 쓰는 암호화하지 않은 파일은 이제 document catalog와 document information dictionary도 객체 스트림에 넣어 압축합니다. ISO 32000-1 7.5.7이 객체 스트림에서 빼 놓는 것은 encryption dictionary뿐입니다
- 암호화한 파일은 예전처럼 두 dictionary를 모두 최상위에 유지합니다
Version 2.766.42
Changed
CompressDocument와CompressLoadedDocument결과를 포함해 객체 스트림으로 쓰는 파일은 dictionary와 배열을 간결하게 적어서, PDF 문법이 요구하지 않는 공백과 줄바꿈을 뺍니다(ISO 32000-1 7.2.2). 객체 스트림에 넣을 수 없어 비압축으로 남는 stream dictionary가 가장 큰 폭으로 줄어듭니다- signature dictionary와 encryption dictionary는 공백 있는 레이아웃을 유지하므로, 객체 스트림으로 쓴 문서도 예전과 똑같이 서명할 수 있습니다
- 객체 스트림 없이 쓴 파일은 바이트 단위로 동일하게 유지됩니다
Version 2.766.41
Fixed
- 객체 스트림으로 쓴 PDF 파일이 더 이상
%PDF-헤더와 binary comment 줄로 두 번 시작하지 않습니다.UseObjectStreams,CompressDocument,CompressLoadedDocument를 쓰는 모든 저장이 해당됐습니다 - 뷰어는 반복된 헤더를 그냥 넘겼지만 엄격한 validator는 지적할 수 있었고, 파일마다 15바이트가 들었습니다
Version 2.766.40
Fixed
- 많은 생산 도구가 stream length를 저장하듯 객체 스트림 안에 맨 숫자 하나로 담아 둔 PDF를 이제 편집해 저장할 수 있습니다. 이전에는 조금만 바꿔도 "Cannot rewrite compressed object N: the source member could not be loaded" 오류로 저장이 중단됐습니다
- 이런 숫자는 이제 숫자로 읽힙니다. 이전에는 파서가 member 끝 너머에서 indirect reference를 찾다가 포기해서 member를 아예 로드할 수 없었습니다
- 내용을 바꾸지 않고 저장하는 것은 영향이 없었습니다. 변경되지 않은 파일은 그대로 복사되기 때문입니다
Version 2.766.39
Fixed
- PDF/A-2 이상과 PDF/X-6 문서의 stamp 주석이 도형 틀만 보이고 APPROVED나 CONFIDENTIAL 같은 stamp 이름이 보이지 않았습니다
- 이제 이름은 페이지의 현재 폰트(페이지 텍스트와 함께 임베드됨)로, 주석 색상의 대문자로 그려지고 사각형 안에서 가운데에 놓입니다
- NOTFORPUBLICRELEASE처럼 긴 이름은 사각형 폭에 맞도록 더 작게 설정됩니다
- 문서는 여전히 PDF/A 검증을 통과하며, 다른 문서의 stamp는 예전 그대로 기록됩니다
Version 2.766.38
Added
- 옵션을 받는 새
CompressLoadedDocumentoverload는 로드한 PDF를 보이는 그대로 유지하면서 최대한 작게 만듭니다. 쓰이지 않는 페이지 리소스를 버리고, 동일한 폰트와 폼을 병합하고, 임베드된 폰트를 서브셋하고, 스트림을 Flate로 다시 압축하고, 다음 저장부터 객체 스트림으로 씁니다 - 모든 단계가 무손실이고 이미지는 리샘플링·재압축되지 않습니다. Arial과 SimSun 전체 폰트를 임베드한 3페이지 문서가 약 10MB에서 약 20KB로 줄었고, 다른 샘플 PDF 세 개도 15-50% 줄어들었습니다
- signature 필드가 있는 문서는 모든 단계가 서명된 바이트를 다시 쓰기 때문에 기본적으로 거부되어 그대로 남고,
AllowSignatureInvalidation을 쓰면 그래도 압축합니다 SubsetLoadedFonts에 기본값이 꺼진CompactTrueTypeSubsets옵션이 생겼습니다. identity CID mapping을 쓰는 CIDFontType2 폰트로 쓰이는 TrueType 폰트의 compact 서브셋을 만듭니다. color 폰트와/CIDSet이 있는 폰트는 보통 서브셋을 유지합니다- 인자 없는
CompressLoadedDocument는 필터 없는 스트림만 재압축하던 기존 동작을 그대로 유지합니다
Version 2.766.37
Added
- 기본값이 꺼진 새
CompressDocument속성: 스위치 하나만 켜면 다음 문서를 보이는 그대로 유지하면서 최대한 작게 씁니다 - 해당 문서에는 최대 레벨의 Flate 압축, 객체 스트림이 있는 교차 참조 스트림(ISO 32000-1 7.5.7, 7.5.8), 폰트 subsetting, compact 폰트 서브셋이 켜집니다. 영문과 중국어가 섞인 3페이지 문서가 약 10MB에서 약 20KB로 줄어듭니다
- 객체 스트림에는 PDF 1.5가 필요하므로, 버전이 고정돼 있지 않다면 낮은
Version은 1.5로 올라갑니다. PDF/A-1 출력은 기존 방식의 교차 참조 테이블을 유지합니다 - 직접 설정한 값은 그대로입니다.
EndDoc이후에Compression,CompressionLevel,UseXRefStream,UseObjectStreams, 폰트 subsetting 옵션, 버전을 설정한 대로 다시 읽습니다 - 이미지는 리샘플링·재압축되지 않습니다
Version 2.766.36
Added
- 기본값이 꺼진 새
CompactFontSubsetting속성: 폰트 서브셋이 남기는 glyph 번호를 다시 매겨서, 임베드된 폰트가 원본 폰트의 모든 glyph 항목을 더 이상 갖고 다니지 않습니다. 명시적인/CIDToGIDMap스트림이 페이지의 glyph 코드를 다시 매겨진 glyph로 연결합니다(ISO 32000-1 9.7.4.2) - CJK 폰트가 가장 크게 줄어듭니다. SimSun의 한자 두 글자가 폰트 데이터 약 25KB 대신 약 3KB를 쓰고, Microsoft YaHei 문서는 114KB에서 6KB로 줄어듭니다
EnableFontSubsetting이 켜져 있을 때 Type 0 폰트로 기록되는 TrueType 폰트와,RegisterUnicodeTTF로 등록한 폰트에 적용됩니다. 후자는 지금까지 PDF/A에서만 compact 서브셋을 받았습니다- 페이지 콘텐츠, glyph 폭, 텍스트 추출은 그대로입니다. OpenType-CFF 폰트는 보통 서브셋을 유지하고, compact 형태로 만들 수 없는 폰트도 보통 서브셋으로 폴백합니다
Version 2.766.35
Fixed
- 등록한 Unicode 폰트가 커버하는 음악 기호나 emoji 같은 Basic Multilingual Plane 바깥 문자 뒤에서, 문자마다 명시적 advance를 주어 그린 텍스트가 더 이상 밀리지 않습니다. 이전에는 뒤따르는 모든 문자가 이웃 문자의 advance를 가져갔는데, 이제 해당 문자는 자기 두 항목의 합만큼 전진합니다
- 이런 문자가 들어간 양쪽 맞춤 Unicode 텍스트 상자는 상자 가장자리에 맞춰지고, 그 텍스트의 밑줄·취소선도 텍스트와 같은 길이가 됩니다
Version 2.766.34
Added
- SVG 내보내기가 이제 image mask(
/ImageMask)를 inline 것까지 포함해 현재 fill 색상의 스텐실로 그립니다. 칠해지지 않는 부분은 흑백 그림으로 그려지는 대신 투명해집니다 /SMasksoft mask나 명시적인/Mask스텐실이 있는 이미지는 alpha 채널이 있는 PNG 이미지로 내보내지므로, mask로 가려진 부분이 뒤쪽 내용을 더 이상 덮지 않습니다- mask나 image mask의
/Decode [1 0]도 따르고, 이미지보다 촘촘한 mask는 디테일을 유지합니다
Version 2.766.33
Fixed
- 페이지 렌더링이 이제 이미지의 명시적인
/Mask스텐실을 따릅니다. 이미지가 회전·미러링된 경우를 포함해, 전체 이미지를 그리는 대신 mask가 덮는 부분은 칠하지 않고 남깁니다 - mask의
/Decode [1 0]배열은 남기는 영역을 뒤집습니다 - soft mask와 이미지보다 촘촘한 mask는 mask의 해상도로 적용되므로, 저해상도 사진 위의 촘촘한 1비트 mask도 가장자리를 유지합니다
Version 2.766.32
Fixed
- 페이지 렌더링이 이제 이미지를 전체 transformation matrix로 그립니다. 90도 회전이든 다른 각도든 돌아간 이미지, 미러링된 이미지,
/Rotate가 있는 페이지의 모든 이미지가 더 이상 bounding box 안에 회전·미러링 없이 곧게 그려지지 않습니다 - image mask(
/ImageMask true)는 회색 그림으로 그려지는 대신 현재 fill 색상의 스텐실로 칠해지고, 축소할 때는 가장자리가 anti-aliasing됩니다 /Decode [1 0]이 있는 image mask는 PDF 명세대로 sample 값 1을 칠합니다- inline image mask(
BI /IM true)가 다시 그려지고/D배열도 따릅니다 - soft mask가 적용된 이미지는 회전·미러링돼도 mask를 유지합니다
Version 2.766.31
Added
- SVG 내보내기가 이제
k/K(DeviceCMYK)와 이름 있는 color space에서cs/sc/scn으로 설정한 색을 변환합니다. ICCBased, calibrated, Lab, Indexed, Separation, DeviceN 색이 검은색 대신 페이지 렌더러가 보여주는 대로 나옵니다 cs/CS로 color space를 선택하면 이제 그 초기 색이 함께 설정됩니다(예: spot color의 full tint).Q로 graphics state를 복원하면 이렇게 설정한 색이 돌아옵니다- ICC profile, lookup table, tint 함수를 참조로 가리키는 color space는 SVG 내보내기 중에 내보내는 문서를 통해 resolve합니다
- path 열거가 이전 색을 유지하는 대신 CMYK fill·stroke 색을 보고합니다
Version 2.766.30
Fixed
- THPDFEmfPatcher.RenderEmfDirect가 enhanced metafile의 bitmap을 어떤 Resolution에서도 같은 크기와 위치에 그립니다. Resolution이 72가 아니면 72/Resolution 배율로 잘못 나왔습니다
Version 2.766.29
Added
- SVG 내보내기가 이제
W와W*clipping path를 적용합니다. 각각이 SVG clip path가 되어 graphics state가 복원될 때까지 그 뒤에 그리는 내용을 잘라내므로, PDF가 크롭하는 이미지·shading·path가 더 이상 통째로 그려지지 않습니다 - SVG 내보내기에서 Form XObject는 자기
/BBox로 클리핑되고, axial·radial shading도/BBox로 클리핑됩니다 - even-odd 클리핑(
W*)은 fill rule을 유지하고,W와 함께 칠해지는 path는 PDF 명세대로 새 클립이 적용되기 전에 그려집니다
Version 2.766.28
Fixed
- DrawChart로 그린 차트는 어떤 Resolution에서도 레이아웃을 유지합니다. 차트의 여백·제목·축 레이블·선 폭은 point 값이라 Resolution에 따라 함께 줄어들었습니다
- 새 페이지와 다시 current가 된 페이지의 기본 폰트는 12 drawing unit이 아니라 어떤 Resolution에서도 12 point입니다
- layout diagnostic overlay는 어떤 Resolution에서도 선 폭과 레이블 크기를 유지합니다
Version 2.766.27
Fixed
- DrawInlineImage와 DrawFormXObject는 위치와 마찬가지로 이미지·폼 크기를 drawing unit으로 다룹니다. Resolution이 72가 아니면 폭과 높이를 point로 잘못 해석해 객체가 지나치게 크게 나왔습니다
Version 2.766.26
Fixed
- CurrentPageNumber로 다시 current가 된 페이지는 처음 레이아웃할 때 쓰던 단위로 계속 그립니다. Resolution이 72가 아니면 point로 바뀌어, 이후에 그린 모든 것이 잘못된 크기와 위치로 나왔습니다
- 페이지를 다시 방문할 때 자기 page Resolution도 유지합니다
Version 2.766.25
Fixed
- 문서 Resolution이 72가 아니어도 ShowImage로 배치한 이미지는 Width와 Height로 크기를 정한 페이지에서 크기를 유지합니다. Resolution 144에서는 절반 크기에 위치도 밀려 나왔습니다
- 그런 페이지에서 ExtTextOut은 각 문자를 지정된 advance 값 그대로의 위치에 놓습니다. 이전에는 절반 간격에 놓았습니다
- 임베드된 glyph run도 그런 페이지에서 glyph offset과 advance를 유지합니다
Version 2.766.24
Added
- SVG 내보내기가 이제 axial·radial shading의
/Extend항목을 따릅니다. 기본값인 extend하지 않는 끝은 PDF와 마찬가지로 칠하지 않고 남고, 끝 색이 클립 전체로 퍼지지 않습니다 - radial shading에서는 시작 원을 extend하지 않았다면 원 안쪽도 비워 둡니다
Version 2.766.23
Fixed
- 페이지 회전 평탄화가 이제 주석 appearance stream을 페이지와 함께 돌립니다. 구워 넣거나 평탄화된 주석이 돌아간 사각형에 옆으로 눌린 채로 있지 않고 회전된 페이지에서와 똑같이 보입니다
- 위젯 회전(
/MK /R)도 페이지 회전만큼 보정되므로, 평탄화 후 다시 만든 form field appearance가 방향을 유지합니다 - NoRotate 플래그가 있는 주석은 평탄화 후에도 곧게 서 있고 크기도 유지합니다. 뷰어가 회전된 페이지에서 보여주듯 왼쪽 위 모서리에 고정됩니다
Version 2.766.22
Fixed
- tagged PDF에서 페이지 트리보다 structure tree를 먼저 방문할 때 페이지 회전 평탄화가 주석 사각형을 두 번 돌리지 않습니다
- 페이지 회전 평탄화가 페이지에서 쓰이는 Form XObject의 bounding box를 더 이상 회전하지 않습니다. 이들의 geometry는 form space에 있고, 페이지 회전은 이미 content transform을 통해 적용됩니다
- 한 페이지를 평탄화할 때 다른 페이지에 속한 structure element의 layout bounding box가 더 이상 바뀌지 않습니다
Version 2.766.21
Fixed
- 로드한 페이지의 bleed·trim·art box를 읽을 때 부모
/Pages노드에 놓인/BleedBox,/TrimBox,/ArtBox를 더 이상 가져오지 않습니다. 이 box들은 PDF에서 상속되지 않으므로, 자기 항목이 없는 페이지는 명세가 요구하는 대로 crop box를 보고합니다 - 페이지 회전 평탄화가 그런 상위 레벨의 bleed·trim·art box를 페이지로 복사하지 않습니다
Version 2.766.20
Fixed
- 문서 Resolution이 72가 아니어도 페이지 Canvas에 그리거나 ShowMetafile로 배치한 metafile 안의 텍스트는 크기를 유지합니다. Resolution 144에서는 그림의 나머지가 올바른 동안 텍스트만 절반 크기로 나왔습니다
- 페이지 Canvas와 ShowMetafile은 point로 그리는, Width와 Height로 크기를 정한 페이지에서 올바른 크기로 그립니다. Resolution 144에서는 그림이 두 배로 나왔습니다
- 페이지 Canvas와 ShowMetafile은 페이지 자체에 설정된 page Resolution도 따릅니다. 더 이상 그 값만큼 그림을 줄이지 않습니다
Version 2.766.19
Fixed
- 문자 간격이 설정된 양쪽 맞춤 Unicode 텍스트 상자가 이제 상자 가장자리에서 끝납니다. 이전에는 모든 문자가 양쪽 맞춤 위치에 간격까지 더해져 각 줄이 문자 수 × 간격만큼 오른쪽 가장자리를 넘었습니다
- 가로 스케일링이 적용된 양쪽 맞춤 Unicode 텍스트 상자는 스케일 팩터만큼 모자라게 끝나는 대신 상자 폭 전체를 다시 채웁니다
- 단어 간격이 이제 양쪽 맞춤 줄의 자연 폭, 즉 줄바꿈을 결정할 때 쓰던 그 폭 계산에 반영됩니다
- 문자마다 명시적 advance를 주어 그린 텍스트는 문자 간격이나 가로 스케일링이 켜져 있어도 지정된 위치에 놓입니다
Version 2.766.18
Fixed
- 페이지 회전 평탄화가 이제
/Rotate 90과/Rotate 270페이지를 시계 방향으로 돌립니다. 평탄화된 페이지가 회전된 원본과 정확히 같아지고, 원본 대비 거꾸로 놓이지 않습니다 - 주석, link destination, structure geometry도 같은 방식으로 페이지와 함께 움직입니다
- CropBox가 없는 페이지를 평탄화할 때 페이지를 정사각형으로 잘라 버리는 CropBox를 더 이상 추가하지 않습니다. 페이지가 실제로 가진 page box만 회전됩니다
Version 2.766.17
Fixed
- 폰트 폴백 체인이 이제 지역화된 이름으로 보고하는 Windows 시스템에서도 SimSun, Microsoft YaHei 같은 폰트를 찾습니다.
WideTextOutBox,WideTextOutBoxEx,TextOutWithFallback의 CJK 혼합 텍스트가 빈 상자 대신 폴백 폰트로 그려집니다 - 자체 폰트가 이런 폰트 중 하나인 텍스트는 더 이상 폴백 run으로 쪼개지지 않고, 미해결 glyph 진단에서도 미해결로 보고되지 않습니다
- 폰트는 자신이 가진 어떤 family 이름으로도, 어떤 언어로든 체인에 넣을 수 있습니다. Windows가 다른 폰트로만 대체하는 폰트는 여전히 건너뜁니다
Version 2.766.16
Fixed
- N-up 구성이 이제
/Rotate 90과/Rotate 270페이지를 시계 방향으로 돌려 셀 안에 놓습니다. 이전에는 반대 방향으로 돌려 셀 밖으로 밀려나 종종 용지 밖까지 벗어났습니다 /Rotate 180페이지는 이제 용지 위에서 돌려지고, 똑바로 세운 채로 구성되지 않습니다- N-up 구성이 이제 페이지 트리에서 상속된 page box와
/Rotate를 따르므로, 그런 페이지가 건너불지거나 회전 없이 구성되지 않습니다 - 구성된 N-up 용지를 포함해 로드한 문서에 넣는 빈 페이지가 페이지 트리에서 상속된
/Rotate나/CropBox로 회전·크롭되지 않습니다
Version 2.766.15
Fixed
HPDFTokenizeContentStreamAppend는 이제 count를 0으로 되돌린 뒤 token 배열을 재사용할 수 있습니다. 이전 실행의 token을 먼저 해제하므로 문자열이 새지 않고, 이전 배열 항목이나 inline 이미지 데이터가 새 token에 나타나지도 않습니다- 하나의 token 배열에 작은 content stream을 많이 이어 붙일 때 배열을 최소 두 배씩 키웁니다. append 때마다 재할당하고 옮기던 이전 방식은 수천 개의 작은 스트림으로 만든 페이지를 느리게 컴파일하게 만들었습니다
Version 2.766.14
Fixed
/Rotate 90이나/Rotate 270페이지가 이제 PDF 명세가 정의한 대로 시계 방향으로 돌아간 채 렌더링되고, 대각선 대칭으로 뒤집히지 않습니다. 이전에는 90도 페이지의 왼쪽 위 모서리가 오른쪽 아래에 놓였습니다- 이 수정은 페이지·영역 렌더링, bitmap·metafile·banded PNG·TIFF 내보내기, SIMD 렌더링 백엔드를 모두 포괄합니다
- 뷰어의 페이지↔뷰, 뷰↔페이지 좌표 변환과 검색·하이라이트 overlay도 같은 시계 방향 회전을 따르므로, 검색 결과와 hit-testing이 렌더링된 페이지와 일치합니다
Version 2.766.13
Fixed
- SVG 페이지 내보내기가 이제 문서가 선언한 대로 텍스트를 UTF-8로 씁니다. 악센트 문자와 CJK 문자가 물음표나 파일을 깨뜨리는 바이트로 변하지 않고, XML이 허용하지 않는 제어 코드는 U+FFFD가 됩니다
- 줄의 첫 run 뒤 텍스트와
TJ커닝 조정 뒤 텍스트는 text matrix가 텍스트를 스케일하거나 회전할 때도 올바른 위치에 놓입니다. 많은 PDF 생산 도구가 이 방식으로 폰트 크기를 정합니다 - text rise와 가로 스케일링이 스케일·회전된 text matrix를 따르고,
TJ조정도 가로 스케일링을 반영합니다 - render mode 4-6(칠하고 클립)으로 그린 텍스트가 버려지지 않고 내보내지고, 보이지 않는 텍스트는 여전히 텍스트 위치를 전진시키며, stroked 텍스트는 stroke 불투명도를 유지합니다
- 단어 간격이 우연히 32가 되는 두 바이트 코드에는 적용되지 않고, 연속된 공백이 유지돼 각 문자가 제자리에 머뭅니다
- ligature glyph가 대표하는 모든 문자를 내보내고, 한 바이트·두 바이트 코드가 섞인 폰트는 코드 단위로 읽습니다
/MediaBox가 원점에서 시작하지 않는 페이지가 캔버스 밖으로 밀려나지 않고 SVG 캔버스 위에 놓입니다
Version 2.766.12
Fixed
THPDFPage.Canvas에 그리는 내용과,ShowMetafile로 위치·스케일을 지정해 vector graphics로 재생하는 metafile은 clip region을 설정할 때 왼쪽·위 가장자리 일부를 더 이상 잃지 않습니다. 이전에는 각 clip region이 이 두 변 쪽으로 한 단위씩 안으로 밀려, 왼쪽이나 위 가장자리를 따라 그린 테두리·채움이 오른쪽·아래의 같은 것보다 얇게 나왔습니다- clip region이 채워질 때는 같은 영역에 맞아떨어지고, 어떤
THotPDF.Resolution에서도 같은 영역을 덮습니다
Version 2.766.11
Fixed
TextOut,UnicodeTextOut,RtLTextOut,ExtTextOut으로 그린 Unicode 텍스트의 밑줄·취소선이 이제 텍스트에 정확히 걸립니다. 이전에는 system code page로 변환한 텍스트를 기준으로 측정해서, 키릴·히브리·그리스·CJK처럼 code page 밖 문자가 들어간 구간은 텍스트에 닿지 않거나 넘쳤습니다- 이 선들은 문자 간격, 단어 간격, 가로 스케일링,
ExtTextOut에 넘긴 displacement도 따릅니다
Version 2.766.10
Fixed
- 리포트·그리드 export add-on(FastReport, QuickReport, ReportBuilder, DevExpress, DBGrid)이 여러 export가 동시에 돌 때, 예컨대 서버에서, 서로의 출력을 더 이상 덮어쓰지 않습니다. 임시 파일 이름이 10-16ms마다만 바뀌는 타이머에서 나왔기에 함께 시작한 export들이 같은 파일에 썼습니다
Version 2.766.9
Fixed
TextWidth가 이제 문자 간격·단어 간격·가로 스케일링이 설정됐을 때 실제로 그려지는 방식대로 텍스트를 측정합니다. 이전에는 간격에 가로 스케일링이 곱해지지 않고, 음수 단어 간격은 무시됐으며, 끝 공백에 단어 간격이 붙지 않아 단락 이어쓰기, link 사각형, 가운데·오른쪽 맞춤 텍스트가 그려진 텍스트에서 어긋났습니다TextWidth와GetWideTextWidth가 같은 텍스트에 같은 폭을 돌려줍니다
Version 2.766.8
Fixed
- ReportBuilder 디바이스(
TppHotPDFDevice)가 이제 native 텍스트를 자기 text box 안에 그립니다. 이전에는 위치를 baseline인 것처럼 잡아 모든 text object가 한 줄만큼 낮게 시작했고 마지막 줄은 상자 밖으로 나갔습니다 - 가운데·오른쪽 맞춤 native 텍스트는 실제 그릴 때 쓰는 Unicode 폭으로 측정되므로, 서양 시스템의 중국어처럼 system code page 밖 문자가 섞인 텍스트도 올바르게 정렬됩니다
Version 2.766.7
Fixed
- FastReport export가 이제 memo 텍스트를 memo 안에 배치합니다. 이전에는 위치를 baseline인 것처럼 잡아 memo 텍스트가 폰트 높이 하나만큼 낮게 시작했고, 아래 맞춤 텍스트는 memo 아래에 그려져 클리핑에 가려졌습니다
- 위·가운데·아래 세로 정렬 모두 첫 줄 위부터 측정합니다. plain memo든 HTML 태그 memo든 마찬가지입니다
Version 2.766.6
Fixed
- FastReport export 필터(
TfrxHotPDFExport)가 다시 컴파일됩니다.NotEmbeddedFonts속성이 다른 타입의 필드를 읽었고, native 그림 export는TfrxPictureView에 없는Clipped속성을 썼습니다 - native 그림 export가 이제 FastReport처럼 모든 그림을 자기 view로 클리핑하므로, view보다 큰 그림이 옆 객체로 흘러넘치지 않습니다
- 가운데 정렬한 그림은 frame과 clip을 view 경계에 두고 이미지 자체만 가운데에 옵니다. 이전에는 frame이 이미지와 함께 움직였습니다
Version 2.766.5
Fixed
- DBGrid add-on이 이제 열 폭에 맞춰 자르기 전에 실제 그릴 때 쓰는 Unicode 텍스트 폭으로 셀 텍스트를 측정합니다. 이전에는 서양 시스템의 중국어처럼 system code page 밖 문자가 섞인 텍스트가 물음표로 측정돼 셀을 넘어갔고, 중국어·일본어·한국어 시스템의 double-byte 텍스트는 셀이 다 차기 한참 전에 잘렸습니다
- 자른 결과가
...앞에 surrogate pair의 절반을 남기는 일은 없습니다
Version 2.766.4
Fixed
- DBGrid add-on(
TDBGridHotPDFExport과DBGridHotPDFExportToFile/ToStream)이 이제 셀 텍스트를 셀 안에 그립니다. 이전에는 위치를 baseline인 것처럼 잡아 각 행의 텍스트가 셀 아래 테두리에 붙고 다음 행의 grid line에 잘렸습니다 - 헤더 텍스트는 헤더 행에서 가운데 정렬되고, 제목이 표 윗면에 더 이상 붙지 않습니다
Version 2.766.3
Fixed
GetLoadedPDFVersionString이 이제 소수점을 쉼표로 쓰는 locale의 시스템에서도%PDF-1.7따위를 돌려줍니다. 그런 시스템에서는%PDF-1,7을 돌려줬었습니다GetLoadedDocumentReport의pdfVersion필드도 같은 방식으로 고쳐졌습니다
Version 2.766.2
Fixed
- HTML 가져오기(
RenderHTML과RenderHTML5)가 어떤THotPDF.Resolution에서도 같은 페이지를 만듭니다. CSS 길이와 importer의Margin,BaseFontSize,ListIndent,BlockSpacing은 point인데, Resolution 144에서는 텍스트·여백·목록·표가 절반 크기로 나왔습니다 - 가져오기 전후에 직접 그리는 텍스트와 그래픽은 여전히 1/Resolution 인치를 씁니다
- 기본 Resolution 72로 만든 문서는 예전과 완전히 같게 나옵니다
Version 2.766.1
Fixed
ApplyXFAAsAcroForm이나FlattenLoadedXFA로 평탄화한 XFA 폼은 어떤THotPDF.Resolution에서도 템플릿의 위치·크기·폰트 크기를 유지합니다. Resolution 144에서는 폼 전체가 페이지 왼쪽 위 구석에 절반 크기로 나왔습니다- 평탄화 전후에 직접 그리는 텍스트와 그래픽은 여전히 1/Resolution 인치를 씁니다
- 기본 Resolution 72로 만든 문서는 예전과 완전히 같게 나옵니다
Version 2.766.0
Added
THPDFPage.UserWidth와THPDFPage.UserHeight는 페이지 크기를 그리기 단위, 즉 1/Resolution인치로 돌려주므로 layout 코드가 어떤THotPDF.Resolution에서도 좌표·여백·TextWidth와 비교할 수 있습니다.Width와Height는 여전히 point를 돌려주고, 기존 코드는 예전과 같은 값을 읽습니다
Fixed
THotPDF.Resolution을 72 이외의 값으로 두면 단락이 이제 여백 사이의 실제 공간에서 줄바꿈하고 아래 여백에서 다음 페이지로 넘어갑니다. 이전에는 페이지를 point로 측정해서, 144에서는 여백이 넓은 단락이 문자마다 줄바꿈되어 페이지 수가 크게 불어났습니다- 새 페이지로 이어지는 단락은 어떤 Resolution에서도 같은 페이지 크기·좌표·폰트 크기를 유지합니다. 144에서는 이어지는 페이지가 point 좌표로 바뀌어 그 위의 텍스트가 절반 크기로 나왔습니다
THPDFTable은 행이 아래 여백에 닿을 때만 새 페이지를 시작합니다. 144에서는 페이지 아래쪽 절반에 놓인 표가 행마다 별도의 페이지를 만들었습니다- HTML 가져오기가 어떤 Resolution에서도 페이지 왼쪽 절반이 아니라 전체 폭에 텍스트를 배치합니다
- 페이지 중앙에 그리는 metafile과 페이지 전체를 덮는 metafile clip region은 어떤 Resolution에서도 페이지 전체를 씁니다
- page layer와 flush된 페이지의 layout diagnostics가 페이지 크기를 drawing unit으로 보고합니다
- 기본 Resolution 72로 만든 문서는 예전과 완전히 같게 나옵니다
Version 2.765.52
Fixed
- non-ASCII 문자가 들어간 AES-256 암호가 이제 다른 PDF 리더에서도 동작합니다. HotPDF는 암호를 system code page로 해시했지만 ISO 32000-2는 UTF-8로 정의하므로, 다른 리더는 중국어나 악센트가 들어간 암호를 거부했습니다. revision 5와 revision 6 모두 고쳐졌습니다
- 127바이트가 넘는 AES-256 암호는 표준이 정의한 대로 127바이트로 잘라 주므로 표준을 따르는 리더가 받아들입니다
- HotPDF가 이제 non-ASCII 문자가 들어간 암호를 쓰는 다른 생산 도구의 AES-256 파일도 엽니다
- 이전 버전이 그런 암호로 암호화한 파일도 같은 암호로 HotPDF에서 계속 열립니다
Version 2.765.51
Fixed
- 같은 폰트에서 Unicode 텍스트 뒤에 쓴 ANSI 텍스트가 더 이상 빈 상자로 보이지 않습니다. 페이지가
TextOut으로 Unicode 텍스트를 그린 뒤 같은 폰트(예: 다른 크기의 Arial)로TextBox나TextOutBoxEx를 쓰면 ANSI 텍스트가 Unicode 폰트에 기록되어 뷰어가 glyph를 찾지 못했습니다. 이제 자기 폰트 리소스를 받아 올바르게 표시·추출됩니다 - ANSI 텍스트만 쓰거나 Unicode 텍스트만 쓰는 페이지는 예전과 같은 출력을 냅니다
Version 2.765.50
Fixed
- AES-256 revision 6(
UseAES256R6, 그리고 PDF 2.0 AES-256)로 암호화한 문서가 이제 다른 PDF 리더에서 열립니다. 암호 해시를 매 라운드마다 salt를 넣어 계산하고 owner 쪽에는 user 항목을 넣지 않았기에, qpdf와 MuPDF 등 다른 리더가 두 암호 모두 거부했고 HotPDF는 자기 파일만 받아들였습니다 - HotPDF가 이제 다른 생산 도구가 만든 revision 6 파일을 user·owner 암호로 열고, 잘못된 암호라고 보고하지 않습니다
- Security 데모의 AES-256 R6 샘플이 다른 리더에서 열립니다
Version 2.765.49
Fixed
- 양쪽 맞춤 Unicode 텍스트 상자가 더 이상 글자를 벌려놓고 상자 오른쪽 가장자리를 넘지 않습니다. Arial처럼 이름으로 고른 폰트에서는 각 줄이 상자 폭의 약 두 배로 나와 옆에 놓인 내용과 겹쳤는데, 이제 모든 양쪽 맞춤 줄이 상자 가장자리에서 끝납니다
- 문자마다 명시적 advance를 주어 그린 텍스트도 같은 상황에서 요청한 위치에 놓입니다. 이전에는 문자마다 한 문자 폭씩 오른쪽으로 밀렸습니다
Version 2.765.48
Changed
- Delphi와 C++Builder용 HelloWorld, CJKAnnotations, TextOut, RtLTextOut 데모가 이제 실제로 쓰는 glyph만 임베드합니다. Arial Unicode MS 같은 시스템 폰트를 통째로 임베드해서 한 페이지 hello world가 약 15MB, right-to-left 샘플은 약 30MB로 나왔는데, 같은 페이지가 이제 80KB-650KB 수준이고 보이는 모양도 같습니다
Version 2.765.47
Fixed
- right-to-left 텍스트가 일부 폰트에서 글자 순서가 틀리게 나오지 않습니다. Arial Unicode MS의 히브리어는 많은 단어에서 이웃 글자가 뒤바뀌었고, Microsoft Sans Serif의 아랍어는 아예 뒤집히지 않았습니다. 줄을 시각적 순서로 재배열할 때 이 폰트들의 glyph 번호를 발음 기호로 착각했기 때문입니다
- RtLTextOut 데모의 히브리어 줄이 이제 올바르게 읽힙니다
Version 2.765.46
Fixed
GetWideTextWidth가 이제TextWidth처럼 텍스트를 그릴 때 적용되는 문자 간격·단어 간격을 포함해 측정합니다. 간격이 설정된 줄바꿈·가운데 맞춤 Unicode 텍스트가 지나치게 좁게 측정됐었습니다TextOutHTML이 이제SetWordSpacing으로 설정한 단어 간격을 반영합니다. 이전에는 각 run을 측정 폭에 놓을 때 간격이 빠졌습니다. HTML 가져오기의 CSSword-spacing과letter-spacing도 같은 layout을 거칩니다
Version 2.765.45
Fixed
SetWordSpacing이 이제 임베드된 폰트에서도 동작합니다. 임베드된 폰트의 텍스트는 두 바이트 문자 코드로 기록되는데 PDF는 단어 간격을 한 바이트 공백 코드에만 적용하므로,FontEmbedding이 켜져 있거나 텍스트가 Unicode 폰트를 필요로 하면 간격이 조용히 무시됐습니다- 간격은 모든 공백 뒤에 text positioning 조정으로 추가되며 어떤 PDF 뷰어도 이를 따릅니다. 단어 간격이 없는 텍스트는 예전과 정확히 같게 기록됩니다
- TextOut 데모의 word-spacing 행이 이제 추가된 간격을 보여줍니다
Version 2.765.44
Fixed
- Delphi와 C++Builder용 AnnotationInteraction 데모가 이제 각 link 캡션을 link 사각형 안에 맞춥니다. 텍스트가 너무 낮게 시작해 사각형 테두리가 텍스트를 가로지르고, 폭도 사각형을 넘었습니다
Version 2.765.43
Fixed
- 취소선 텍스트(
fsStrikeOut)가 이제 소문자 가운데를 관통합니다. 이전에는 선이 baseline에서 반 줄 아래, 밑줄 아래에 그려져 취소선 텍스트가 이중 밑줄처럼 보였습니다.TextOutHTML의<s>도 같은 영향을 받았습니다 - 회전된 텍스트의 밑줄은 글자 위를 따르는 대신 baseline 아래에 그려지고, 취소선은 글자를 관통합니다
- 취소선은 모든 text path에서 밑줄과 같은 굵기입니다. 이전에는 Unicode와 plain Latin path가 훨씬 얇은 선을 그렸습니다
Version 2.765.42
Fixed
- HTMLText 데모가 이제 다섯 샘플을 모두 담은 한 페이지를 만듭니다. 이전에는 문서가 이미 갖고 시작하는 페이지 뒤에 두 번째 페이지를 추가해 첫 페이지를 비워 두고, 페이지 아래쪽 근처부터 쓰기 시작해서 entity 샘플과 줄바꿈 단락이 페이지 밖으로 나갔습니다
Version 2.765.41
Fixed
- Delphi와 C++Builder용 Layer 데모가 이제 layer의 텍스트를 보여줍니다. 보이는 layer의 텍스트가 뒤쪽 사각형 색으로 그려져 보이지 않았고, 숨긴 layer의 텍스트는 거의 흰색이었습니다
- Patterns 데모의 캡션은 tiling pattern으로 채워 패턴 조각으로 부서지는 대신 검은색으로 그려집니다
- AlphaTransparency 데모의 캡션이 더 이상 Multiply blend mode의 반투명 초록으로 그려지지 않습니다. 투명 도형의 투명도가 이제 자기 도형에만 적용됩니다
Version 2.765.40
Fixed
- Delphi와 C++Builder용 GraphicDraw 데모가 이제 곡선 예제의 접선을 올바르게 그립니다. 왼쪽 곡선의 첫 control point 선이 레이블이 붙은 점에 닿지 않았고, 오른쪽 곡선은 시작점에서 control point를 지나 끝점으로 이어지는 선 대신 짧은 가로 획을 보여줬습니다
- 사각형·타원 페이지의 절 제목이 마지막으로 그린 도형의 색을 이어받는 대신 다시 검은색입니다
Version 2.765.39
Fixed
PrintHyperlink뒤에 그리는 텍스트와 도형이 그 앞에 설정한 색을 유지합니다. 이전에는 회색이 다른 색으로 돌아오고(흰색이 파란색으로 바뀜), CMYK나 color space로 설정한 색이 한참 전의 RGB 색으로 돌아왔습니다- hyperlink 색은 이제 페이지가 어떤 color space를 쓰고 있든 link 텍스트에만 적용됩니다
Version 2.765.38
Fixed
TextOutOutline이 이제 어떤Resolution에서도 폰트 크기에 맞게 glyph outline을 그립니다.Resolution이 72가 아니면 outline이 한 번 더 축소돼, 예컨대 144에서는 절반 크기가 됐습니다- SimHei처럼 em당 단위 수가 1000보다 작은 폰트의 outline이 여러 배로 크게 그려지지 않습니다
Version 2.765.37
Fixed
- Delphi와 C++Builder용 CJKUnicode 데모가 Arial Unicode MS가 없는 시스템에서도 한국어 줄을 보여줍니다. 이전에는 처음 발견한 중국어 폰트(한글이 없음)로 그려서 줄이 비어 있었는데, 이제 선택한 폰트가 한국어를 표시할 수 없으면 Malgun Gothic을 씁니다
Version 2.765.36
Fixed
- SimHei 같은 폰트로 쓴 중국어·일본어 텍스트가 글자를 겹쳐 쌓지 않습니다. 같은 폰트를 두 번째 text run에 쓰면 많은 한자에 전각 em이 아니라 몇 unit짜리 폭이 부여됐습니다
- 영향을 받은 폰트는 glyph 수보다 적은 advance 폭을 저장합니다. 마지막 저장된 폭 이후의 glyph는 TrueType 형식이 요구하는 대로 그 폭을 씁니다
Version 2.765.35
Fixed
- SimHei와 256인 SimSun처럼 design grid의 em당 단위 수가 1000보다 작은 폰트의 Unicode 텍스트가 이제 올바른 간격으로 배치됩니다. PDF에 기록된 glyph 폭이 약 네 배 커서 뷰어가 공백과 새로 쓰인 문자 뒤에 넓은 간격을 남겼습니다
Version 2.765.34
Fixed
- PDFOptimize 데모의 scanned-image 시나리오가 이제 실제 텍스트 페이지를 압축합니다. 1비트 테스트 이미지가 완전히 검게 나와서 CCITT G4와 JBIG2를 단색 사각형으로 비교했었습니다
- PDFOptimize 데모의 이미지 시나리오가 이제 페이지 레이블의 glyph만 임베드하므로, 보고되는 크기가 폰트 통째로 임베드한 영향에 묻히는 대신 이미지 압축 방식 간 차이를 보여줍니다
Version 2.765.33
Fixed
- E-Invoice 데모가 이제 보이는 invoice 페이지를 위에서부터 배치합니다. 제목이 페이지 맨 위에 오고 invoice, 거래 당사자, 금액이 그 아래 이어집니다. 이전에는 페이지가 순서가 거꾸로 그려져 제목이 아래 가장자리 근처에, footer note가 맨 위에 놓였습니다
Version 2.765.32
Fixed
- 완전한 무손실(
Lossless에LossyLevel = 0)로 인코딩한 JBIG2 이미지가 이제 모든 픽셀을 유지합니다. 작은 검은 점을 scan 노이즈로 지우는 기본 동작이 이 설정을 무시해서, 무손실이어야 할 이미지에서 작은 텍스트의 마침표와 i·j의 점이 사라졌습니다 - scan 친화적 기본값(
RemoveIsolatedBlackPixels이 있는LossyLevel = 5)은 예전처럼 잡점을 계속 제거합니다
Version 2.765.31
Fixed
- 로드한 페이지를 PNG나 TIFF로 내보낼 때 render band가 point 수로 떨어지지 않는 해상도, 예컨대 Letter 페이지의
SaveLoadedPagesAsImages기본 150 DPI에서 "received too many rows" 오류로 실패하지 않습니다. 반올림 때문에 매 band가 계획보다 한 픽셀 행씩 높아져 band의 행수 합이 이미지보다 커졌습니다
Version 2.765.30
Fixed
TextWidth,TextHeight,GetWideTextWidth,GetWideCharAdvances가 이제 텍스트를 그리는 단위인Resolution의 페이지 단위로 답합니다.Resolution이 72가 아니면 point로 답해 왔으므로, 측정값이 텍스트를 놓은 좌표와 맞지 않았습니다Resolution이 72가 아니어도TextOut으로 그린 텍스트가 지나치게 높은 위치 대신 자기 Y에서 시작하고, 밑줄·취소선이 텍스트의 일부가 아니라 전체를 올바른 거리와 굵기로 덮습니다- 어떤
Resolution에서든TextBox,TextOutBoxEx,WideTextOutBoxEx가 실제 텍스트 폭 기준으로 줄을 가운데·오른쪽 맞춤하고, 표 셀과 단락이 그 폭으로 줄바꿈하며,TextOutHTML의 스타일 run이 더 이상 겹치지 않습니다 WideTextOutBoxEx안의 폰트 폴백 run은 어떤Resolution에서도 줄어들지 않고 폰트 크기를 유지합니다Resolution72 출력은 그대로입니다
Version 2.765.29
Fixed
- Windows가 EMF metafile의 world transform을 직접 적용하지 못할 때 HotPDF가 transform을 자체적으로 합성합니다. 합성된 transform의 세로 offset이 잘못된 항을 써서, 이런 metafile의 내용이 위아래로 밀릴 수 있었습니다
Version 2.765.28
Fixed
- EMF metafile을 표시할 때 콘솔 애플리케이션의 표준 출력에
[WMF_DEBUG] EMR_POLYGON16 record found같은 진단 줄이 더 이상 찍히지 않습니다. metafile trace가 release 빌드에 켜진 채 방치돼 있었습니다
Version 2.765.27
Fixed
ShowMetafile로 보여주는 EMF metafile의 텍스트가 이제 Windows가 그리는 높이에 놓입니다.TCanvas.TextOut의 기본값인 위 맞춤 텍스트가 한 줄 높이만큼 높게 그려졌고, 아래 맞춤 텍스트 역시 너무 높았습니다- baseline 맞춤과 회전된 metafile 텍스트는 그대로입니다
Version 2.765.26
Fixed
- 위치·스케일을 받는
ShowMetafile이 이제 metafile의 왼쪽 위 모서리를 지정된 점에 놓고 요청한 배율로 그립니다. 이전에는 이 인자들을 무시하고 항상 metafile을 자연 크기로 페이지 왼쪽 위에 그렸습니다 - 위치 인자 없는
ShowMetafile은 그대로입니다
Version 2.765.25
Fixed
AngleArc드로잉이ShowMetafile로 보여주는 EMF metafile에서 이제 어느 방향이든 실제로 기술하는 호를 그리고, 그 뒤에 호 끝에서 이어지는 선을 붙입니다. 이전에는 대신 완전한 원이 그려졌고, metafile에 offset이 있으면 크기도 틀렸습니다
Version 2.765.24
Fixed
- PDF/A와 PDF/X에서 plain ASCII 내용의 free text 주석이 이제 텍스트를 보여줍니다. 이전에는 주석 default appearance가 지명하는 Helvetica를 임베드하지 않고 쓸 수 없었기에 appearance가 프레임과 채움만 그렸습니다
- 텍스트는 페이지의 현재 폰트(페이지 텍스트와 함께 임베드됨)로 12pt에 그려지고, 주석 상자에 맞춰 줄바꿈되며 선택한 정렬을 따릅니다. non-ASCII 내용에 이미 하던 방식입니다
- PDF/A와 PDF/X 밖에서는 ASCII 전용 free text 주석이 예전과 정확히 같게 기록됩니다
Version 2.765.23
Fixed
AutoShapeArabic를 켜면TextOut과UnicodeTextOut이 이제RtLTextOut이 이미 그러하듯 아랍어·페르시아어·우르두어 글자를 어두·중간·말 형태와 ligature로 연결합니다. 이전에는 모든 글자가 독립형으로 표시됐습니다AutoShapeSyriac,AutoShapeNko,AutoShapeAdlam,AutoShapeHanifiRohingya와 히브리어 점 기호 재배열(ShapingFeatures의sfHebrewReorder)에도 같은 적용입니다- 이 옵션을 켠 상태에서 glyph 번호가 우연히 아랍어·히브리어 문자 범위에 들어간 텍스트가 잘못된 glyph로 표시될 수 있었는데, 이제는 그렇지 않습니다
- 페이지 폰트로 그리는 free text 주석도 페이지 텍스트와 같은 방식으로 shaping됩니다
- 이 옵션을 끈 출력은 그대로입니다
Version 2.765.22
Fixed
- 곡선 도형이 이제 72가 아닌
Resolution값도 따릅니다. 이전에는Ellipse,Circle,Arc,DrawArc,Pie,DrawPie,Chord,ArcTo가 잘못된 위치와 크기로 그려졌는데, 직선·사각형·둥근 사각형은 올바랐습니다 - 기본 resolution 72 출력은 그대로입니다
Version 2.765.21
Fixed
Pie나DrawPie로 그린 부채꼴이 이제 하나의 닫힌 도형이라, outline이 떨어진 선 두 끝 대신 직선 변이 호와 만나는 자리에 제대로 된 모서리를 갖습니다ShowMetafile로 보여주는 EMF metafile의 chord가 이제 호의 양 끝을 잇는 직선을 따라 닫힙니다. 이전에는 이 선이 도형에서 한참 떨어진 점으로 향했습니다
Version 2.765.20
Fixed
DrawArc와DrawPie가 이제 문서가 설명하는 타원 부분을 그립니다. Windows GDIArc·Pie호출처럼 시작점에서 끝점까지 반시계 방향입니다. 이전에는 반대쪽 부분을 그려서 1/4 호가 3/4로 나왔습니다ShowMetafile로 보여주는 EMF metafile의 부채꼴·chord·ArcTo호가 어느 호 방향에서든 Windows가 그리는 그림과 일치합니다. 이전에는 타원의 반대쪽 부분을 보여줬고, 단순 호는 이미 올바랐습니다- 각도 기반
Arc,Pie,Chord,ArcTo메서드는 그대로입니다
Version 2.765.19
Fixed
RectangleRotate로 그린 회전 사각형이 이제Rectangle로 그린 것처럼 닫힌 도형입니다. 이전에는 stroke할 때 네 번째 변이 빠져서 outline 전용 회전 사각형이 세 변만 보여줬습니다- 채운 회전 사각형과 회전 텍스트의 밑줄·취소선 막대는 예전과 같게 보입니다
Version 2.765.18
Fixed
- 생성된 PDF에 기록되는 음수가 이제 올바르게 반올림됩니다. -50 같은 값이 -49.99로 기록되곤 했으므로, 페이지 콘텐츠·주석 사각형 같은 곳의 음수 좌표·offset·위치가 최대 0.01 unit만큼 어긋날 수 있었습니다
- 음수는 이제 0에서 멀어지는 쪽으로 반올림해 양수와 정확히 대칭입니다. 0으로 반올림되는 음수는 0으로 기록됩니다
- 0과 양수 출력은 그대로입니다
Version 2.765.17
Fixed
- 중국어·일본어·한국어·아랍어·키릴 문자 등 non-ASCII 내용의 free text 주석이 이제 모든 뷰어에서 텍스트를 보여줍니다. 이전에는 뷰어가 Helvetica(서양 문자만 표현할 수 있음)로 텍스트를 그려 주기만을 기다렸기에 Poppler 같은 뷰어는 ASCII 문장 부호만 보여줬습니다
- 이 주석은 이제 자체 appearance를 갖습니다(ISO 32000-1 12.5.5). 텍스트는 페이지의 현재 폰트로 그려지고 페이지 텍스트와 함께 임베드·서브셋되며, 주석 상자에 맞춰 줄바꿈되고(단어 사이, 공백 없는 텍스트는 문자 사이), 선택한 정렬을 따르며, 예전과 같은 프레임·채움 위에 놓입니다
- appearance는 PDF/A에서도 기록됩니다. 임베드된 폰트가 문서 적합성을 지켜 주고, 주석 텍스트가 빈 상자 대신 보입니다
- ASCII 전용 내용의 free text 주석은 예전과 정확히 같게 기록됩니다
Version 2.765.16
Fixed
InsertLoadedBlankPage로 로드한 문서에 넣는 빈 페이지가 이제 모든 페이지에 필요한 resource dictionary를 지니므로(ISO 32000-1 Table 30), qpdf 같은 validator가 페이지 트리가 손상됐다고 보고하지 않고 나중에 페이지에 내용을 추가할 수도 있습니다
Version 2.765.15
Fixed
Table데모에서 소계 금액이 이제 의도대로 Qty와 Price 열에 걸쳐 표시됩니다. 이전에는 셀 인덱스를 잘못 써서 Qty 열이 빈 셀로 남았습니다
Version 2.765.14
Fixed
THPDFTable셀의 이미지가 이제 셀 안에 그려지고 수직 정렬을 따릅니다. 이전에는 이미지 높이만큼 낮게, 셀 아래 표 밖에 놓였습니다
Version 2.765.13
Fixed
- Unicode 텍스트 폭(
GetWideTextWidth과 양쪽 맞춤 계산에 쓰는 측정값)이 이제 폰트와 일치합니다. Arial 같은 폰트에서는 대략 두 배 크게 나왔습니다 - 이 폭을 기반으로 하는 표, 단어 줄바꿈 텍스트, 오른쪽·가운데·양쪽 맞춤 텍스트도 다시 올바르게 배치됩니다. 짧은 셀 텍스트가 더 이상 줄바꿈되지 않고, 오른쪽 맞춤 값이 셀 가장자리에 닿으며, 표 셀의 HTML 텍스트가 단어 사이에 큰 간격을 보이지 않습니다
Version 2.765.12
Fixed
- 체크 박스나 라디오 버튼이 있는 폼이 이제 폼의 기본 리소스에 ZapfDingbats 폰트(
/ZaDb)를 나열합니다. 이런 필드를 직접 그리는 뷰어(AutoFormAppearances가 꺼져 있을 때의 기본 동작)는 체크 마크를 그릴 때 이 폰트를 여기서 찾습니다. 이전에는 Poppler 기반 뷰어가 알 수 없는 폰트라고 보고하고 마크를 표시하지 않았습니다
Version 2.765.11
Fixed
CJKAnnotations데모에서 각 언어 행의 첫 note 아이콘이 이제 그 행의 다른 아이콘과 나란히 정렬됩니다. 이전에는 5포인트 위에 놓였습니다
Version 2.765.10
Fixed
- 영문 이름으로 요청한 폰트를 다른 언어의 Windows 시스템에서도 찾습니다. 중국어·일본어·한국어 Windows에서 SimSun, Microsoft YaHei, MS Gothic 요청은 폰트 없음으로 처리되었는데, Windows가 이름을 시스템 언어로 보고하기 때문입니다. 그 바람에 텍스트는 조용히 Arial Unicode MS로 설정되고는 했습니다
Version 2.765.9
Fixed
- Windows가 TrueType 컬렉션(.ttc)으로 보관하는 SimSun, Microsoft YaHei, MS Gothic 같은 폰트가 이제 유효한 독립 폰트로 임베드됩니다. 이전에는 임베드된 폰트의 모든 테이블이 잘못된 데이터를 가리켜 뷰어가 이를 거부하고 시스템 폰트로 대체했고, 그 폰트가 없는 컴퓨터에서는 텍스트가 잘못된 glyph를 보여줬습니다
- 요청한 폰트가 없어 Windows가 컬렉션 폰트로 매핑한 문서도 같은 영향을 받았습니다. 예컨대 SimSun만 있는 시스템에서 Arial Unicode MS로 쓰는 Unicode 텍스트가 그랬습니다
Version 2.765.8
Fixed
- non-ASCII 텍스트를 담은 소스 파일이 다시 BOM(byte order mark)이 붙은 UTF-8로 저장됩니다. BOM이 없으면 Delphi는 소스 파일을 빌드하는 컴퓨터의 코드 페이지로 읽으므로, 중국어·일본어·한국어 등 비서구 Windows 시스템에서는 데모의 CJK·아랍어·히브리어·악센트 텍스트가 생성된 PDF에서 깨져 나오고 라이브러리 오류 메시지도 잘못된 문자를 보여줬습니다
CJKAnnotations,Annotations,HelloWorld,RtLTextOut,PageSizes,TextOut,Showcase,ViewerPref데모는 어디서 컴파일하든 의도한 텍스트를 다시 만들어 냅니다
Version 2.765.7
Fixed
- UTF-8로 주어지는 문서 정보(
Title,Author,Subject,Keywords, article thread 제목,SetLoadedTitle계열이 있는SetLoadedDocumentInfo)가 이제 Unicode로 저장됩니다. 덕분에 뷰어는 악센트와 CJK 텍스트를 올바르게 표시하고 문서 정보가 XMP metadata와 일치합니다 - 시스템 코드 페이지 텍스트(예: 중국어 Windows의 중국어 제목)도 올바르게 저장됩니다. 유효한 UTF-8이 아닌 바이트는 그 코드 페이지로 읽기 때문입니다
Version 2.765.6
Fixed
- 새 문서의 초기 보기(
InitialZoom)가 이제 완전한 fit-width·fit-height destination을 기록합니다. ISO 32000-1 Table 151이 요구하는 피연산자가 빠져 있어서, Poppler 같은 뷰어는 기본 설정으로 만든 모든 문서에 대해 destination 배열이 너무 짧다고 보고했습니다
Version 2.765.5
Fixed
- 첫 페이지에서 시작하지 않는 페이지 레이블이 이제 첫 범위 앞의 페이지도 포괄하며, 이 페이지들은 일반 숫자를 유지합니다. 페이지 레이블 트리는 첫 페이지를 반드시 포함해야 하고(ISO 32000-1 12.4.2), 그렇지 않으면 뷰어가 잘못된 레이블을 보여줄 수 있었습니다
SetLoadedPageLabel은 이제 범위를 페이지 순서대로 유지하고 같은 페이지에서 시작하는 범위를 교체하므로 뷰어가 의도한 레이블을 보여줍니다. 이전에는 새 범위가 순서 없이 붙고 중복되기도 했습니다SetLoadedPageLabel은 레이블을 별도 객체에 보관하는 문서의 기존 레이블을 더 이상 버리지 않으며, 여러 노드로 나뉜 레이블 트리도 갱신합니다- UTF-8로 주어지는 페이지 레이블 접두사가 이제 Unicode로 저장됩니다
Version 2.765.4
Fixed
- UTF-8로 주어지는 링크 설명(
AddURILink,AddGoToLink,AddGoToRLink,AddLaunchLink,AddNamedDestinationLink와 structure-destination 링크)이 이제 Unicode로 기록됩니다. 스크린 리더와 뷰어가 깨진 문자 대신 악센트와 CJK 텍스트를 표시합니다 AddLoaded...Annotation메서드로 로드한 문서에 추가하는 주석의 텍스트와 작성자도 마찬가지로, 새 문서에서 만드는 주석과 동일하게 처리됩니다
Version 2.765.3
Fixed
AddGoToLink는 이제 새 문서에서 나중에 추가되는 페이지도 링크할 수 있으므로, 첫 페이지의 목차가 뒤 페이지를 가리킬 수 있습니다. 이런 링크는 예전에는 오류 없이 그냥 버려졌습니다- 대상 페이지가 끝내 추가되지 않은 링크는 없는 페이지를 가리키는 대신 영역은 유지하되 action은 두지 않습니다
Version 2.765.2
Fixed
SetLoadedOutlineOpen이 이제 로드한 문서에서 북마크를 열고 닫습니다. 이전에는 뷰어가 무시하는 키를 기록했고 북마크는 원래 상태를 유지했습니다AddLoadedOutline,SetLoadedOutlineURI,SetLoadedOutlineDestination은 이제 요청한 북마크에 동작합니다. 0보다 큰 인덱스에서는 잘못된 북마크를 바꾸거나 아무것도 하지 않았습니다- 로드한 문서에 북마크를 추가하면 이제 부모와 조상, 아웃라인의 표시 항목 수를 갱신하므로, 뷰어가 잘못된 펼침 상태나 항목 합계를 보여주지 않습니다
- 로드한 북마크에 웹 링크를 설정하면 이제 페이지 destination이 제거되고, destination을 설정하면 action이 제거됩니다. 북마크는 둘 중 하나만 가질 수 있기 때문입니다
AddLoadedOutline과SetLoadedOutlineTitle에 UTF-8로 주는 북마크 제목은 이제 깨진 바이트가 아니라 Unicode로 저장됩니다
Version 2.765.1
Fixed
- 새 문서의 북마크가 이제 ISO 32000-1 12.3.3이 요구하는 대로 표시 항목 수를 기록합니다. 이전에는 아웃라인과 열린 북마크마다 닫힌 북마크 안의 항목까지 중첩 항목 전부를 셌습니다
- 자식을 추가한 뒤 북마크에
Opened를 설정하면 이제 뷰어에서 펼쳐집니다. 이전에는 이 변경이 파일에 닿지 않았습니다 - 기존 북마크에
Title을 할당하면 이제 문서에 표시되는 제목이 바뀝니다 - UTF-8로 주는 non-ASCII 텍스트 북마크 제목이 이제 Unicode로 기록되므로, 악센트와 CJK 제목이 깨진 문자가 아니라 올바르게 표시됩니다
- 북마크가 이제 사양이 요구하는 부모 참조를 지닙니다
Version 2.765.0
Added
HPDFTokenizeContentStreamAppend는 content stream을 기존 토큰 배열에 곧장 토큰화하므로, 여러 스트림을 합치는 호출자는 스트림마다 임시 배열을 만들 필요가 없습니다
Changed
- 렌더링을 위해 페이지를 컴파일할 때 content stream의 숫자와 연산자마다 메모리를 할당하지 않고, 페이지 내용은 따로 복사되는 대신 곧장 페이지의 display list로 토큰화됩니다
- 병렬 페이지 렌더링이 아직 렌더링하지 않은 문서에서 훨씬 잘 확장됩니다. 128페이지 벡터 테스트 문서에서 4개 워커가 이제 1개 워커보다 약 3~3.5배 빨리 끝냅니다(이전에는 32-bit 빌드에서 약 1.4배, 64-bit 빌드에서 약 1.7배)
- 단일 스레드 페이지 컴파일과 렌더링도 그 문서에서 약 35% 빨라집니다. 토큰, display list, 렌더링 출력은 변하지 않습니다
Version 2.764.7
Changed
- 그래픽 상태를 자주 저장·복원하는(
q/Q) 내용을 렌더링할 때 더 이상 저장할 때마다 메모리를 할당하지 않습니다. 이전에는 그 할당 때문에 병렬 페이지 렌더링의 워커 스레드가 메모리 관리자 안에서 서로를 기다렸습니다 - 128페이지 벡터 테스트 문서를 처음부터 병렬로 렌더링할 때 4개 워커에서 약 7~10%, 워커 하나에서 약 5% 빨라집니다. 렌더링 출력은 변하지 않습니다
Version 2.764.6
Fixed
- 이전에 렌더링했던 페이지의 display list가 아직 캐시에 남아 있을 때 병렬 페이지 렌더링이 더 이상 한 번에 한 페이지로 떨어지지 않습니다
- 이전에는 그려지기를 기다리는 모든 페이지가 메모리 예약을 붙잡고 있는 동안 한 번에 한 페이지만 그려져, 다른 워커가 공유 메모리 예산에서 정체되었습니다. 이제 워커 수만큼 페이지가 기다리고 있으면 병렬로 그립니다
- 첫 페이지는 여전히 일찍 도착하고, 한 묶음이 예약하는 메모리는 예산 전체를 채우는 대신 워커 수에 비례해 유지됩니다
Version 2.764.5
Fixed
SetStructureClassMapEntry는 이제 attribute dictionary 하나를 여러 클래스 이름 아래에, 또는 같은 이름으로 다시 등록해도 해제하지 않습니다- 이전에는 그런 항목 하나를 제거하거나 교체하면 공유 사전이 해제되어, 남은
/ClassMap항목이 해제된 메모리를 가리키고 문서를 저장할 때 쓰레기를 기록하거나 access violation을 일으킬 수 있었습니다 - 직접 만든 attribute dictionary는 이제 등록될 때 indirect object가 되고 모든
/ClassMap항목이 그것을 참조합니다. 사전은 문서가 소유하므로 호출자가 해제해서는 안 됩니다
Version 2.764.4
Fixed
- 페이지의
/Font,/XObject등 resource table이/Resources안에 직접 기록되어 있고 그 모든 항목이 쓰이지 않을 때,RemoveUnusedLoadedPageResources가 더 이상 테이블을 제거한 뒤에 그 테이블에 기록하지 않습니다 - 이전에는 그 기록이 해제된 메모리로 향했고, 대개 눈에 띄지 않았지만 세션 뒤쪽에서 메모리를 망가뜨리거나 access violation을 일으킬 수 있었습니다
- 비워진 resource table은 여전히
/Resources에서 제거되며, 저장된 출력은 변하지 않습니다
Version 2.764.3
Fixed
PubSecKeyMaterial로 공개키(인증서) 암호화 PDF를 여는 경우,LoadFromFile이든BeginIncrementalUpdate든, 파일 키를 복구하는 동안 이미 해제된 메모리에서 recipient envelope을 더 이상 읽지 않습니다- 이 실패는 메모리가 우연히 어떻게 재사용되었는지에 좌우되었습니다. 문서는 보통 열렸지만, key material이 할당되지 않은 것처럼 거부되거나 잘못된 바이트를 unwrap할 수 있었습니다
- 다중 recipient 문서, recipient 선택 callback,
AddPubSecKeyMaterial으로 등록한 추가 key material은 모두 같은 수정된 envelope 목록을 씁니다
Version 2.764.2
Fixed
- 로드한 폼을 위해
AddLoadedTextField와 다른AddLoaded*필드 메서드,EnsureLoadedFieldAppearanceStream또는FlattenFormFields가 만들어 낸 field appearance는 이제/DR항목을 공유하는 대신 AcroForm/DR폰트에 자체 참조를 둡니다 - AcroForm
/DR사전을 교체하거나 삭제하거나, 마지막 폼 필드를 제거해도(이때 AcroForm도 함께 제거됨) 그 appearance들이 해제된 폰트 객체를 가리킨 채 남지 않습니다 - 예전에는 그 뒤 문서를 해제할 때 숨은 access violation에 걸려 문서의 나머지가 해제되지 않거나 메모리가 망가질 수 있었고, 64-bit 빌드에서 가장 잦았습니다
/DR안에 직접 기록된 폰트는 appearance가 처음 사용하는 순간 indirect object가 되므로, 저장된 파일에서 field appearance와/DR이 같은 폰트 객체를 가리킵니다
Version 2.764.1
Fixed
LoadFromFile뒤에ProcessObjectStreamsForDecompression을 호출하면 로드가 이미 닫아 버린 file stream을 더 이상 읽지 않습니다. 대신 로드된 파일을 다시 스캔하므로 object stream 멤버를ExtractObjectFromStream이 계속 쓸 수 있습니다- 이 실패는 메모리가 우연히 어떻게 배치되었는지에 좌우되었습니다. 보통은 눈에 띄지 않았지만 access violation을 일으키거나 무관한 메모리를 스캔할 수 있었고, 64-bit 빌드에서 가장 잦았습니다
FindAllObjectStreams,ScanAndLoadReferencedObjects,ForceLoadMissingReferencedObjects는 이제 로드 밖에서 호출되면 닫힌 stream을 만지는 대신 아무것도 하지 않습니다
Version 2.764.0
Changed
- 폼에 올린 component 같은
THotPDF인스턴스 하나가 이제 문서를 연이어 몇 개든 쓸 수 있습니다.EndDoc뒤의BeginDoc은 예외를 일으키는 대신 새로운 독립 문서를 시작합니다 EndDoc는 쓰인 문서에 등록된 것 전부, 즉 이미지, 폰트, 폼 필드, 아웃라인, 문서 JavaScript, named destination, 페이지 레이블, ICC 프로필과 output intent를 버리고, 다음BeginDoc이 그 페이지와 객체를 해제하므로 어느 것도 다음 파일로 넘어가지 않습니다.ReproducibleOutput이 켜져 있으면 재사용한 인스턴스에서 쓴 두 번째 문서는 새 인스턴스에서 쓴 그 문서와 바이트 단위로 같습니다EndDoc과 다음BeginDoc사이에 이뤄진 등록, 예컨대AddPDFAOutputIntent나Names로 추가한 스크립트는 다음 문서에 속하며 더 이상BeginDoc이 지우지 않습니다FileName,Compression,PDFACompliance,Author,Title같은 property 설정은 페이지 layer와 폰트 fallback 체인과 함께 다음 문서로 이어집니다. 한 문서를 위해 자동으로 올린 PDF 버전은Versionproperty 값으로 돌아갑니다- 쓰인 문서는
EndDoc뒤에도 다음BeginDoc까지 계속 남아 있으므로ValidatePDFUA2Structure,CurrentPageNumber,PagesCount와 layout 진단이 그 문서에서 계속 동작합니다 - 보호 문서가 암호화되는 대로 암호가 지워지기 때문에,
ActivateProtection이 여전히 켜져 있고 새 암호가 설정되지 않았으면BeginDoc은 빈 암호로 다음 파일을 보호하는 대신 예외를 일으킵니다 - 같은 인스턴스에서 로드한 문서를 다시 쓴 뒤 새 문서를 시작해도 깨끗한 파일이 만들어집니다
Version 2.763.1
Fixed
- EPUB 변환이나 HTML5 프로필로 HTML을 가져올 때 단락이 현재 페이지에 맞지 않아도 access violation 위험이 없어졌습니다. 단락은 이제 항상 새 페이지에 그려집니다
- 같은 수정이
HPDFRenderHTMLDocument가 쓰는 컴팩트 block renderer의 단락, 리스트 항목, 수평 rule에도 적용됩니다 - 이 실패는 메모리가 우연히 어떻게 배치되었는지에 좌우되었으므로 가끔만 나타났고, 대개 64-bit 빌드에서 자주 터졌으며, 변환이 출력 없이 끝나거나 내용이 깨질 수 있었습니다
Version 2.762.1
Fixed
- 이미 새 문서를 쓴
THotPDF인스턴스에서BeginDoc을 다시 호출해도 access violation으로 끝나지 않습니다. 인스턴스가 아직 끝난 문서의 객체, 이미지, 폰트, 폼 필드를 들고 있으므로 새 인스턴스를 요구하는 예외를 일으킵니다 - crash를 넘어가더라도 두 번째 문서는 첫 번째 문서의 객체, 그 내용과 폼 필드까지 함께 끌고 갔을 것입니다. 새 문서마다 인스턴스 하나를 쓰면 모든 파일이 자기 내용만 담습니다
LoadFromFile로 기존 문서를 로드해 다시 쓰는 워크플로는 영향을 받지 않습니다
Version 2.762.0
Fixed
- text, free text, line, square, circle, stamp, 파일 첨부 주석이 PDF/A-2, PDF/A-3, PDF/A-4, PDF/X-6 문서에서 보입니다. 이 주석들은 validator만 만족하는 빈 appearance 스트림을 달고 있었고, 뷰어는 appearance를 그리므로 아무것도 표시되지 않았습니다
- 이 appearance는 이제 주석을 그립니다. square와 circle 테두리, line, 주석 색의 note 아이콘과 첨부 아이콘, stamp 테두리, 배경색으로 채운 free text 상자가 그 대상입니다
- PDF 2.0 출력은 ISO 32000-2 Table 166이 요구하는 대로 이 주석 전부와 확장 markup 주석, 새 폼 필드에 appearance 스트림을 주고
/NeedAppearances false를 기록합니다. PDF/A와 PDF/X 밖에서는 free text와 stamp 이름을 Helvetica로 그립니다 - PDF/A와 PDF/X에서는 쓰이는 모든 폰트를 임베드해야 하므로 free text와 stamp appearance는 텍스트를 그리지 않습니다. 텍스트는 주석에 그대로 남아 뷰어가 표시합니다
Version 2.761.6
Fixed
- 파일 첨부 주석(
AddFileAttachmentAnnotation)을 뷰어에서 다시 열고 저장할 수 있습니다. 파일 스펙이 임베디드 파일 스트림 자체를/EF로 썼는데, ISO 32000-1 Table 44는 스트림을/F아래에 담는/EF사전을 요구하므로 리더가 파일 항목이 없다고 보고했습니다 - 이런 첨부의 임베디드 파일 스트림은
/EmbeddedFile타입을 가지고, 주석 텍스트는 파일 설명으로도 저장됩니다
Version 2.761.5
Fixed
- named destination, 문서 수준 JavaScript, 문서 첨부가 이름 트리 키를 정렬된 순서로 기록됩니다. ISO 32000-1 7.9.6 요구 사항입니다. 이전에는 등록 순서로 기록되어 트리를 탐색하는 리더가 항목을 놓칠 수 있었습니다(qpdf는 트리가 정렬되지 않았다고 보고했습니다)
- 같은 파일 이름의 파일 두 개를 첨부해도 하나의 키로 두 항목이 만들어져 하나의 첨부만 접근 가능한 일이 없습니다. 두 번째 파일은
a (2).txt같은 번호가 붙은 키를 받고 원래 파일 이름을 유지합니다 AddLoadedDocumentJavaScript와AddLoadedNamedDestination변경이 저장됩니다. 이름 트리가 직접 사전에 있으면 편집된 트리가 다시 기록되지 않아 새 항목이 사라졌습니다. 두 메서드 모두 정렬된 위치에 삽입하고(/Kids노드로 나뉜 트리도 포함), 같은 이름의 기존 항목을 교체합니다AddLoadedDocumentJavaScript는 맨 스크립트 스트림 대신 JavaScript action을 이름 트리 값으로 저장하고,AddLoadedNamedDestination은/XYZdestination의 zoom 피연산자를 기록합니다RemoveLoadedJavaScript와RemoveLoadedJavaScriptAll은 문서 자체에서 스크립트를 제거합니다. 이전에는 getter가 반환하는 목록만 바뀌고 스크립트는 저장된 파일에 남았습니다SetDocumentAttachmentMetadata는 주어진 첨부의 이름을 바꿉니다. 이전에는 트리의 마지막 첨부 키를 바꿔 버렸고, 이제 이름이 바뀐 항목은 정렬된 위치로 이동합니다
Version 2.761.4
Fixed
- 새 AcroForm은 ISO 32000-1 12.7.3.3 요구에 맞춰 필드 기본 appearance 문자열이 가리키는 Helvetica 폰트를 폼의 기본 리소스(
/DR)에 항상 정의합니다. 이전에는AutoFormAppearances없이는 이 폰트가 없어서 필드 appearance를 직접 구성하는 뷰어가 쓸 폰트가 없었습니다 AddLoadedComboBox는 이제 진짜 콤보 박스를 만듭니다. 이전에는 Combo 플래그 대신 Edit 플래그를 설정해서 필드가 리스트 박스가 되었고, 뷰어는 모든 옵션을 나열한 목록으로 표시했습니다- 로드한 문서에 추가하는 필드는
/NeedAppearances를 이름/true가 아니라 불리언true로 기록하고, 이를 위해 만들어지는 AcroForm은/DA문자열이 참조하는 기본 appearance 문자열과 기본 리소스를 갖춥니다 AddLoadedTextField,AddLoadedCheckBox,AddLoadedComboBox,AddLoadedListBox,AddLoadedPushButton는 새 필드에 appearance 스트림을 넣어줍니다. appearance를 직접 구성하지 않는 뷰어와 폼이/NeedAppearances false로 설정된 문서에서도 필드가 표시됩니다- 로드한 푸시 버튼의 appearance(추가, 다시 그리기, 평탄화 시 생성)는 이전처럼 비어 있지 않고 캡션을 그립니다
Version 2.761.3
Fixed
- 로드한 폼에서 텍스트 또는 선택 필드 값을 바꾸면 이제 필드를 다시 그립니다.
SetFormFieldValue,ResetLoadedFormField와 다중 선택 리스트 박스 갱신이 appearance 스트림을 재생성합니다. 뷰어는 저장된 값이 아니라 appearance를 그리기 때문에, 이전에는 저장된 파일이 모든 뷰어와 인쇄에서 계속 예전 텍스트를 보여줬습니다 - 비밀번호 텍스트 필드의 생성 appearance는 비밀번호를 읽을 수 있는 형태로 보여주는 대신 문자마다 별표 하나를 표시합니다(ISO 32000-1 Table 228).
AutoFormAppearances를 쓰는 새 필드와 다시 그리거나 평탄화되는 로드 필드 모두 마찬가지입니다 AnalyzeLoadedSignatureRevisions는 서명 후 폼 작성이 추가하는 새 appearance 사전, appearance 스트림과 그 리소스를 필드 자체와 마찬가지로 폼 작성으로 분류합니다. 증분 업데이트에서 인증된 폼을 채워도 더 이상 인식된 구조 밖의 변경으로 보고되지 않습니다
Version 2.761.2
Fixed
- Flate 압축으로 추가하는 1비트 및 4비트 팔레트 비트맵이 색을 그대로 유지합니다. 이전에는 256색 시스템 팔레트로 재매핑되어 그 팔레트에 없는 색이 모두 밀렸습니다. 이제 자체 비트 깊이와 자체 팔레트로 임베드되어 이미지 데이터도 작아집니다
- 팔레트가 검은색보다 흰색을 먼저 나열하는 1비트 비트맵이 CCITT Group 3, CCITT Group 4, JBIG2 압축에서 더 이상 반전된 이미지로 나오지 않습니다. 배치 및 교차 페이지 JBIG2 경로도 포함되며, 더 어두운 팔레트 색은 항상 검은색으로 인코딩됩니다
icAutoMono와AddMonochromeImageAuto는 색 팔레트를 가진 1비트 비트맵을 CCITT나 JBIG2로 흑백화하지 않고 Flate를 유지합니다- CCITT Group 3 2차원 이미지(
icCCITT32)가 이제/K파라미터를 따릅니다. 첫 행과 이후 매 두 번째 행을 1차원으로 코딩하며/K는 2가 됩니다. 이전에는 2차원 행을 전혀 허용하지 않는/K 1에서 모든 행을 2차원으로 코딩했습니다(ISO 32000-1 Table 11, ITU-T T.4)
Version 2.761.1
Fixed
- DCT 압축으로 추가하는 JPEG 이미지가 자체 색 모델을 유지합니다. 그레이스케일 JPEG는
DeviceGray로, CMYK JPEG는DeviceCMYK로 기록됩니다. 이전에는 모든 JPEG가DeviceRGB로 선언되어 그레이스케일 파일은 뷰어에서 깨지거나 잘렸고 CMYK 파일은 잘못된 색으로 보였습니다 - Adobe 마커를 실은 CMYK JPEG(보통 Photoshop 출력)는 샘플 값에 필요한 반전된
/Decode배열을 갖습니다(ISO 32000-1 8.9.5.2 및 7.4.8) - PDF/A 색 공간 검사는 그레이스케일과 CMYK JPEG 이미지를 이제 DeviceRGB 사용이 아니라 DeviceGray 및 DeviceCMYK 사용으로 봅니다
StampLoadedPageImage도 로드한 페이지에 JPEG를 찍을 때 같은 색 모델을 적용합니다PHOTO.JPG나scan.jpeg같은 파일 이름도 이제 모든 압축 타입에서 JPEG로 로드됩니다.AddImage의 파일 오버로드는 대소문자를 가리는.jpg확장자 대신 시그니처로 JPEG 데이터를 인식하며, 이런 파일을 비트맵으로 읽으려 하지 않습니다
Version 2.761.0
Added
- 새
AddLoadedSignedSignatureField는 로드한 문서에 서명 준비가 된 서명 필드를 추가합니다. 이미 서명된 PDF도 증분 업데이트로 두 번째 서명(카운터서명 또는 승인)을 받을 수 있습니다 - 이 필드는
SignPDFWithPFX,PreparePDFForSigning,InsertSignatureHex가 채워 넣을 서명 공간을 예약합니다.BeginIncrementalUpdate와SaveIncrementalUpdate후 새 서명은 파일 전체를 덮으며 이전 서명은 계속 유효합니다 - 선택적인 reason, location, contact 정보와 SubFilter, 예약된 서명 크기는 필드별로 설정할 수 있습니다. AcroForm은 signed 및 append-only로 플래그가 붙고, 서명된 문서에 appearance 재생성 플래그는 추가되지 않습니다
Fixed
BeginIncrementalUpdate의 문서화된 다중 서명 워크플로가 이제 실제로 동작하는 절차를 설명합니다. 이전 설명은 로드 후에는 존재하지 않는 현재 페이지와 서명 공간이 예약되지 않은 서명 필드에 의존해서 서명이 실패했습니다
Version 2.760.1
Fixed
DrawQRCode,DrawDataMatrix,DrawPDF417,DrawAztec는 문서화된 대로 그리기 후 페이지 채우기 색을 복원합니다. 이전에는 이후에 채워지는 도형이 바코드 색을 물려받았습니다- 이 바코드들은 하나의 경로로 그려지고, 각 행의 어두운 모듈 구간이 하나의 사각형으로 병합됩니다. 페이지 콘텐츠가 작아지고 뷰어가 인접 모듈 사이에 희미한 이음선을 보여주는 일도 없습니다
Version 2.760.0
Changed
CryptKeyLength를aes256으로 설정하면 출력이 그보다 낮을 때 다른 버전 의존 기능들과 마찬가지로 PDF 1.7로 올라가서 문서가 실제로 AES-256으로 보호됩니다. 기본 PDF 1.6 출력에서는 아무 알림 없이 AES-128로 기록되곤 했습니다.StrictVersionLock이 설정되면 낮은 버전은 여전히 AES-128로 폴백합니다
Fixed
- 보호 속성 도움말 페이지가 존재하지 않는 권한 이름을 보여줬습니다. 이제 예제와
prPrint,prPrint12bit설명이 실제 옵션과 일치하고, 공개 키 암호화 노트는 지원되는 키 타입을 나열합니다
Version 2.759.0
Fixed
- 서명된 PDF는 이제 ISO/IEC 32000-1 12.8.3.3 요구대로
<와>구분자를 포함한/Contents문자열 전체를 서명 바이트 범위 밖에 둡니다. 이전에는 구분자까지 서명되어, 바이트 범위를 서명 값과 대조하는 검증기가 잘못된 바이트 범위로 보고했습니다 - 첨부된 MAC을 실은 서명의 PDF MAC 검증은 표준 바이트 범위와 이전 버전이 기록한 바이트 범위를 모두 받아들입니다
Security
- 서명 검증은 두 바이트 범위 사이의 미서명 갭에 서명 자신의
/Contents문자열 외에 무언가가 들어 있는 문서를 거부합니다. 서명된 바이트 밖의 콘텐츠가 커버되는 것으로 보고되던 signature-wrapping 취약점이 막혔으며, 이전 버전이 만든 서명은 여전히 검증됩니다
Version 2.758.1
Fixed
AttachSignatureFieldAppearance이 서명되지 않은 서명 필드에 주는 기본 appearance가 밝은 회색 배경을 다시 그립니다. 채우기 사각형에 피연산자 두 개가 빠지고 경로 내부에서 색을 설정해서 뷰어가 거부했었습니다- 새 페이지에서 만드는 free-text 주석은 ISO 32000-1이 요구하는 기본 appearance 문자열을 가져서, 뷰어가 빈 상자를 보여주는 대신 텍스트를 배치할 수 있습니다
Version 2.758.0
Fixed
- 내장 JBIG2 디코더는 텍스트 스트립에서 첫 심벌 이후의 모든 심벌을 ISO/IEC 14492가 정한 위치에 놓습니다. 이전에는 심벌마다 한 픽셀씩 오른쪽으로 밀려서, 다른 인코더가 만든 JBIG2 스캔의 텍스트가 점점 벌어졌습니다
- 네이티브 산술 인코더와 단일 glyph를 담은 심벌 사전으로 기록된 JBIG2 이미지를 다른 PDF 뷰어도 읽을 수 있습니다. 심벌 식별자가 0비트가 아니라 1비트로 코딩되어 그 뷰어들이 첫 glyph에서 실패했습니다
- refinement와 aggregation으로 glyph를 조합하는 심벌 사전은 표준 간격으로 디코딩되어 다른 JBIG2 디코더와 결과가 일치합니다
- 전역 심벌 사전을 공유하는 JBIG2 이미지는
/Filter배열과 짝이 맞는 배열로/DecodeParms를 기록합니다. 다른 뷰어는 단일 사전을 무시해서 공유 glyph를 찾지 못했고, 그런 이미지는 표시에 실패했습니다
Version 2.757.0
Fixed
DirectDrawBarcode와Simple*바 함수는 이제 모든 심볼로지에서 진짜 바코드를 그립니다. 이전에는 대부분 데이터가 없는 균등 교대 바를 돌려줬습니다. 코드셋 C의 GS1-128(타입 22)은 Code 39로 폴백하지 않고 그려지며, POSTNET 짧은 바는 높이의 40 %로 그려집니다DirectDrawBarcode는 페이지 좌표계에 맞춰 바 폭과 높이를 스케일링합니다. 문서 스케일이 단위당 1포인트가 아니어도 바코드를 읽을 수 있습니다- Code 128, Code 93과 EAN / UPC 계열은
Ratio설정과 무관하게 1~4 모듈 요소 폭을 정확히 유지합니다. 2가 아닌 비율은 이들 바코드를 판독 불가로 만들곤 했습니다 - EAN-8, EAN-13, UPC-A, UPC-E는 데이터 자릿수만 주어지면 체크 디지트를 추가합니다. 이전에는 마지막 데이터 자릿수가 체크 디지트로 취급됐습니다.
Checksum을 켜면 UPC-A는 마지막 데이터 자릿수를 더 이상 버리지 않고, UPC-E 체크 디지트(바 패리티 선택에도 쓰임)는 확장된 UPC-A 번호에서 계산합니다 - MSI 체크 디지트는 홀수 자릿수 숫자에서 올바르게 계산되고, POSTNET 코드는 정정 디지트를 얻으며, Interleaved 2 of 5는 선행 0을 붙여 홀수 길이 숫자의 마지막 자릿수를 유지합니다
- Code 128 A는 소문자를 공백이나 제어 문자로 바꾸지 않고 SHIFT로 인코딩하고, Code 39는 소문자를 대문자로 접으며, Codabar는 주어진 start/stop 문자를 유지합니다
- 심볼로지가 표현할 수 없는 문자는 이제 예외를 일으킵니다. 이전에는 Code 39와 Code 128이 그런 문자를 버리거나 치환했고 Codabar는 문자 테이블 밖을 읽었습니다
Checksum을 켠 GS1-128은 바코드를 측정하거나 그릴 때마다Text에 체크 디지트를 계속 덧붙이지 않습니다
Version 2.756.0
Fixed
DrawQRCode로 그리거나THPDFQRCode로 만든 QR Code를 이제 표준 리더가 스캔합니다. 포맷 정보가 ISO/IEC 18004 명세대로 배치되고, 버전 10~40 전체(및 버전 7-Q)에서 오류 정정 블록 구조가 올바릅니다- 자동 모드 선택은 소문자 텍스트를 byte 모드로 유지합니다.
https://example.com같은 URL이 더 이상 대문자로 인코딩되어 읽히지 않습니다 - 길이의 끝이 한두 자리 숫자나 영숫자 하나로 끝나는 텍스트는 그에 맞는 충분히 큰 심벌을 얻습니다. 이전에는 마지막 문자들이 잘렸습니다
- 같은
THPDFQRCode인스턴스로 두 번 인코딩해도 이전 심벌이 새 심벌에 섞이지 않습니다 Encode는 명시적으로 요청한 버전이 너무 작거나 요청한 numeric·alphanumeric 모드가 데이터를 표현할 수 없을 때 잘린 심벌을 만드는 대신False를 반환합니다- 마스크 선택은 ISO/IEC 18004 7.8.3의 finder 유사 패턴 및 어두운 모듈 균형 페널티를 적용합니다
- 내장 바코드 디코더가 표준 QR Code를 읽습니다. Reed-Solomon 검증이 있는 다중 블록 심벌, numeric·alphanumeric·byte·ECI 세그먼트, UTF-8 페이로드, 여러 alignment 패턴을 가진 버전을 지원합니다
Added
HPDFQRFunctionMap과HPDFQRExtractDataWords는 QR 심벌을 읽는 코드를 위해 모듈 배치와 오류 검출이 있는 블록 디인터리빙을 노출합니다
Version 2.755.9
Changed
- 이미지 소프트 마스크 렌더링은 이제 정확한 가로 샘플 인덱스를 재사용하고, 지원되는 Delphi x86 및 x64 타깃에서 SSE2 알파 프리멀티플라이를 사용하며, 한정된 임시 저장소와 스칼라 폴백으로 픽셀 반올림과 취소 동작을 그대로 유지합니다
Version 2.755.8
Fixed
- 취소된 페이지 프리페치가 문서 리소스를 해제하고 나면 포그라운드 렌더링이 워커 스레드가 종료를 마치기를 기다리지 않고 재개될 수 있습니다. 명시적인 취소, 교체, 다시 로드, 파괴는 여전히 스레드에 join하며, 유효하지 않은 페이지 범위는 더 이상 정지된 워커를 누출하지 않습니다
Version 2.755.7
Fixed
- 페이지 렌더링은 그래픽 상태 복원 전반에서 현재 경로를 보존하고, Form XObject와 Type3 glyph의 경로, 클리핑, 저장된 상태를 격리하며, malformed한 여분의 복원과 취소 상황까지 포괄합니다
Version 2.755.6
Fixed
- SIMD 사각형 렌더러가 이제 복합 even-odd 및 nonzero 채움 규칙을 존중하여 구멍, 반사된 서브패스 방향, 소수 위치의 모서리 배치를 보존합니다. 래스터화 중 취소 시 부분 비트맵을 폐기하고 취소를 올바르게 전파합니다
Version 2.755.5
Fixed
- 다중 선택 폼 가져오기가 이제 XFDF의 16진수 호환 표기를 해석하기 전에 정확한 옵션 값을 먼저 확보하므로, literal 값이 다른 옵션을 선택하는 일이 없고 저장된 값이 선택 인덱스와 일치하게 유지됩니다
Version 2.755.4
Fixed
- 세로(WMode 1) CID 텍스트 텍스트 추출이 이제 ISO 32000-1 9.4.4 변위만큼 펜을 이동시키므로, 문자 간격이 단계를 늘리는 대신 사양이 정의한 대로 컬럼 아래 이동 거리를 줄입니다
- 세로 텍스트의
TJ위치 조정이 이제 옆으로가 아니라 컬럼을 따라 위아래로 펜을 이동시키므로, 추출된 컬럼이 더 이상 쪼개지지 않고 읽기 순서가 위에서 아래로 유지됩니다 - 추출 중 CIDFont
/DW2배열을 지정된[v1y w1y]순서로 읽으므로, 기본값에 의존하는 glyph가 0.88em이 아니라 full em만큼 전진합니다 - 추출된 세로 glyph 원점이 컬럼 중심선에 머물고, glyph 박스는 세로 원점에서 위치 벡터를 뺀 곳에 배치되며, 가로 구성 요소는 glyph 폭의 절반이 기본입니다
- 연속된 여러 CID를 서술하는
/W2목록 항목이 이제 추출 중 첫 CID가 아니라 run의 모든 CID에 메트릭을 적용합니다 - 페이지 렌더러와 텍스트 추출 인터프리터가 glyph·
TJ변위 규칙을 한 구현으로 공유하므로, 렌더링 위치와 추출 위치가 어긋날 수 없습니다
Version 2.755.3
Added
THPDFQCStatementInfo에HasPSD2Statement,PSD2RolesOfPSP,PSD2NCAName,PSD2NCAId가 생겼고 CMS 수준 descriptor도 같은 필드를 실어 나릅니다HPDFParsePSD2QcStatement는 이미 DER로 갖고 있는 PSD2 statement를 파싱하며 malformed 입력은 거부합니다
Deprecated
PSD2RolesPayer와PSD2RolesPayee는 소스 호환용으로 남지만 사양이 payer/payee role 목록을 정의하지 않으므로 항상 비어 있습니다.PSD2RolesOfPSP를 사용하십시오
Fixed
- PSD2 정규 인증서 statement를 이제 ETSI TS 119 495 구조로 읽어, 결제 서비스 provider의 모든 role을 role OID·role 이름과 함께, 국가 감독 기관 이름과 기관 식별자와 함께 보고합니다. 이전에는 실제 PSD2 인증서가 role을 전혀 보고하지 않았습니다
- 길이가 넘치거나 최소 길이가 아니거나, 구성 요소가 빠지거나 추가되거나, 문자열 타입이 틀리거나, 이름이 유효 UTF-8이 아닌 malformed PSD2 statement는 일부만 보고되는 대신 통째로 무시됩니다
Version 2.755.2
Fixed
- 세로(WMode 1) 텍스트 페이지 렌더링이 각 glyph를 ISO 32000-1 9.4.4 텍스트 공간 변위만큼 전진시킵니다. word spacing은 폰트 크기로 스케일되지 않고 두 바이트 CID 코드에 더해지지도 않으며, 단일 바이트 space 코드에만 적용됩니다
- 세로 텍스트의 문자 간격이 사양이 정의한 그대로 writing direction을 따라 적용되므로, 0이 아닌
Tc로 조판한 컬럼도 다른 준수 viewer와 같은 높이로 렌더링됩니다 - 보이지 않는 텍스트(렌더링 모드 3, 숨겨진 optional content)도 그려지는 텍스트와 같은 규칙으로 세로 컬럼을 전진시켜, 뒤의 가시 glyph가 올바른 위치에 유지됩니다
- CIDFont
/DW2배열을 지정된[v1y w1y]순서로 읽으므로, 기본값에 의존하는 폰트가 0.88em이 아니라 full em만큼 전진합니다 - 세로 glyph는 세로 원점에서 위치 벡터를 뺀 곳에 그려지고 가로 구성 요소는 glyph 폭의 절반이 기본이라, 컬럼이 펜 위치 중심에 정렬됩니다
- 연속된 여러 CID를 서술하는
/W2목록 항목이 이제 첫 CID가 아니라 run의 모든 CID에 메트릭을 적용합니다
Version 2.755.1
Fixed
- ExportLoadedFormToFDF가 이제 대상 파일을 만들기 전에 FDF 본문 전체를 생성하므로, 내보내기 도중 실패해도 대상이 잘린 문서로 덮어쓰이지 않습니다
- FDF 스트림 교환 스캐너가 16진수 문자열을 추적하여, hex 값이 딕셔너리 종결자와 바로 붙어 끝나도 필드 딕셔너리가 온전하게 유지됩니다
- 선택 항목 인덱스 재조정은 뒤섞인 PDFDocEncoding, UTF-16, 16진수 표기를 하나의 매처로 디코딩하므로, 동등한 export 값이 /I를 일관되게 재구성합니다
- XFDF 가져오기는 plain literal text로 전달된 옵션 export 값의 16진수 표기를 받아들여, 서드파티 도구가 기록한 왕복 처리가 다시 동작합니다
- FDF 내보내기는 필드 이름 없는 widget 전용 필드를 건너뛰어, XFDF 내보내기와 모든 가져오기의 동작과 일치합니다
- Delphi Stamp 데모가 워터마크와 rubber-stamp 주석을 실제 페이지 크기에 고정하여, 가로 방향이나 A4가 아닌 입력에서도 화면에 보입니다
- C++Builder DigiPrint 데모가 이미지와 페이지별 줄 목록을 해제하고, 헤더 줄 간격 계수를 초기화하며, demo.xml이 없을 때 크래시 대신 이를 보고합니다
- Win64 ABI DLL과 codec worker 빌드 스크립트는 RAD Studio 12 이상에서 bin64의 dcc64를 찾고, C++Builder 라이브러리 전체 빌드는 공유 출력 디렉터리의 trial 잔여물을 감지해 정리합니다
Version 2.755.0
Added
- 로드된 multi-select choice 필드가 이제 FDF 파일·스트림 API와 XFDF 배열 인식 콜백을 통해 개별 선택 값을 주고받고, 옵션 경계를 보존하며 가져오기에서 선택 인덱스를 동기화합니다
Version 2.754.6
Fixed
SetLoadedFormFieldExportValue가 이제 일반 필드 값 갱신 경로를 사용하여 버튼 값 타입, 선택 인덱스, 외관 상태, 인코딩된 문자열, 계산 변경 추적을 보존합니다
Version 2.754.5
Fixed
- XFDF 폼 값과 주석 텍스트 요소가 이제 앞뒤 공백, 탭, 줄바꿈을 포함해 서식용 공백을 삽입하지 않고 정확한 내용을 그대로 보존합니다
Version 2.754.4
Fixed
- 로드된 폼의 값·기본값·최대 길이 헬퍼가 이제 상속 및 간접 항목을 존중하고, 필드 리셋은 기본값 타입을 보존하고 choice 선택과 버튼 상태를 동기화하며 형제 필드는 그대로 둡니다. 재생성된 버튼 외관은 선택 상태와 유효한 렌더링 경계를 유지합니다
Version 2.754.3
Fixed
- 로드된 이름 있는 자식 필드가 필드 타입을 상속할 때도 개별적으로 접근 가능하며, 상속된 타입·플래그·옵션을 필드 헬퍼로 사용할 수 있고, 삭제 시 형제 필드와 그 위젯을 보존합니다
Version 2.754.2
Fixed
- 재생성된 로드 choice 필드 외관이 이제 export 값을 보존하면서 Unicode 옵션 레이블을 표시하고, 선택되지 않은 목록 옵션을 렌더링하며, 단일·복수 선택을 필드 값과 인덱스에 맞게 일관되게 강조합니다
Version 2.754.1
Fixed
- 로드된 choice 필드를 갱신할 때 이제 옵션 export 값과 옵션 목록 밖의 편집 가능 항목을 포함해 선택 옵션 인덱스를 새 값과 일치시키고, 공유 선택 배열은 수정하지 않습니다
Version 2.754.0
Added
- 선택적인 HPDFCreateTesseractOCREngine과 HPDFCreateRapidOCREngine 팩토리가 로컬 인식 프로그램과 호출자가 제공한 모델을 검색 가능한 텍스트 레이어에 연결합니다. Unicode 텍스트, 단어 좌표, 타임아웃, 취소, 출력 예산을 지원합니다
Fixed
- 텍스트 매트릭스 어드밴스, 간접 CID 폰트 폭, q/Q와 Form 클리핑 복원, reduced JPEG 방향, 이미지 소프트 마스크, Indexed 스트림 팔레트를 바로잡아, 영향을 받은 페이지에서 텍스트 레이아웃과 이미지 콘텐츠를 복원합니다
- 작은 임베드된 TrueType 채움 glyph는 이제 로컬 커버리지 안티앨리어싱으로 저 DPI에서 가는 획을 개선합니다. 취소된 OCR 요청은 인식 엔진이 실패를 반환해도 취소로 보고됩니다
- RenderOutputDither가 이제 모든 렌더링 백엔드와 병렬 페이지 렌더링에 적용되며, 캐시 무효화와 취소도 일관되게 동작합니다
Version 2.753.0
Added
- SetLoadedFreeTextPlainText가 지원되는 로드 FreeText 주석을 ASCII Helvetica plain text로 명시적으로 변환하고, 전체 재기록과 증분 저장을 위해 보이는 외관을 다시 만듭니다
Fixed
- 로드된 페이지 변환과 저장 검증이 이제 간접 및 상속 페이지 박스를 해석하여, 공유 페이지 크기를 A4로 교체하는 대신 보존합니다
Version 2.752.5
Fixed
- 페이지 비트맵 초기화가 이제 제한된 블록을 지우는 동안 취소를 확인하고, 끝내지 못한 비트맵을 해제하며, 취소된 프리페치 작업이 초기화를 마치느라 포그라운드 렌더링이 지연되지 않게 합니다
Version 2.752.4
Fixed
- 문서를 닫거나 다시 로드할 때 이제 공유·순환 소유를 포함해 자신이 소유한 PDF 객체 그래프와 스트림 페이로드를 해제하고, 연결된 참조를 두 번 해제하지 않습니다
Version 2.752.3
Fixed
- 로드된 체크박스 값 변경이 이제 normal appearance 딕셔너리에 선택된 상태만 있을 때도 외관 상태를 동기화합니다
Version 2.752.2
Fixed
- 문서 생성 후 reproducible output을 켜면 이제 생성 타임스탬프가 고정되어, 동등한 저장이 클럭 틱이 달라져도 바이트 단위로 동일하게 유지됩니다
Version 2.752.1
Fixed
- 로드된 폼 필드 이름이 이제 PDF 문자열을 일관되게 디코딩하여, UTF-16 이름을 가진 필드도 정체를 바꾸지 않고 찾고 갱신할 수 있습니다
Version 2.752.0
Fixed
- 로드된 비위젯 주석을 이동할 때 이제 주석 객체의 정체를 유지하고, 선택적 페이지 참조를 대상 페이지로 갱신합니다
Version 2.751.0
Fixed
- 로드된 페이지를 삭제할 때 이제 named destination, 아웃라인 destination, 구조 트리, 부모 트리, 주석 객체 참조를 유지하여, 전체 재기록과 증분 저장 양쪽에서 도달 가능한 null 참조를 없앱니다
Version 2.750.0
Fixed
- PDF 전체 재기록이 이제 객체 스트림 컨테이너를 교체하기 전에 읽지 않은 압축 객체를 펼쳐, 폰트·색 공간·ActualText를 보존하면서 깨진 중국어 텍스트, 달라진 페이지 외관, 달라진 추출 텍스트 문제를 고칩니다
- 사용자 비밀번호가 빈 암호화 문서는 이제 바로 로드해 재기록을 시작하고, 잠긴 객체 스트림은 불완전한 문서를 만드는 대신 명확히 실패합니다
- 수정되지 않은 숫자 객체가 원본 정밀도를 유지하여, 재기록 후 미세한 색·투명도 변동을 막습니다
- 복사된 페이지가 검증된 리소스 이름과 참조를 유지하여, 간접 리소스 딕셔너리 오류와 잘못 묶인 이미지를 고칩니다
Version 2.748.6
Fixed
- 테이블이 담을 수 있는 것보다 많은 항목을 선언하는 cross-reference 하위 섹션이 선언된 개수를 전부 훑으면서 읽을 데이터 없이 돌던 문제를 수정했습니다. 이 때문에 40바이트짜리 비정상 파일을 거부하는 데 수십 초가 걸렸습니다
- 작업 하나가 예외를 던질 때 job runner가 이미 만들어 둔 결과를 모두 잃어버리던 문제와, HTML import에서 주변 스트림을 만들 수 없을 때 그림 객체를 잃어버리던 문제를 수정했습니다
Version 2.748.5
Fixed
- ASCII가 아닌 비밀번호를 쓰는 PKCS#12 파일이 열리지 않던 문제를 수정했습니다: 비밀번호는 UTF-8 바이트 문자열인데 디코딩하지 않고 한 번에 한 바이트씩 넓히고 있었으므로, ASCII 범위 밖의 모든 문자에 대해 파생 키가 틀렸습니다. 최신 PBES2 방식으로 보호된 파일은 영향이 없었고, 그래서 둘의 동작이 달랐습니다
- 잘못된 옵션으로 생성할 때 서명 배치 검증기와 폐기 증거 캐시가 자체 오류 대신 access violation을 던지던 문제를 수정했습니다. 해제하는 멤버들이 만들어지기 전에 소멸자가 실행되고 있었습니다
- 인자가 거부될 때 증거 다운로드 작업이 소멸자에서 실패하던 문제를 수정했습니다. 검사들이 스레드 자체가 만들어지기 전에 실행되고 있었습니다
- 클라우드 서명 provider가 두 번째 arc가 39를 넘는 algorithm identifier를 인코딩하던 문제를 수정했습니다. 이제 비정상 identifier는 변환 오류 대신 provider 자체의 오류를 냅니다
- 인증서·서명 컨테이너가 이제 자신을 담고 있는 요소의 범위를 넘는 길이를 선언하는 중첩 요소를 거부하므로, 검증되는 것과 서명이 커버하는 것이 달라질 수 없습니다
- RSA 서명 후 개인 키 값이 다음 할당을 위해 힙에 남는 대신 메모리에서 지워집니다
Version 2.748.4
Fixed
- Type 1 글꼴 불러오기가 글꼴 프로그램의 첫 줄에서 모든 속성을 읽던 문제를 수정했습니다: 토큰 목록을 비우지 않고 채워서 버전·패밀리·웨이트 문자열, stem hint, charstring 키 길이가 모두 오래된 토큰에서 나왔습니다. 이제 Type 1 글꼴이 자체 메타데이터를 보고합니다
- charstring 키 길이가 이미 해제된 문자열을 가리키는 포인터로 보관되다가 범위 검사 없이 쓰이던 문제를 수정했습니다. 이제는 값으로 저장하고 형식이 허용하는 범위로 클램프합니다
- 임베드되지 않은 글꼴이 항상 시스템 기본 글꼴로 떨어지던 문제를 수정했습니다: 요청한 face 이름이 wide-char 글꼴 레코드에 바이트 단위로 복사되어, 설치된 어떤 패밀리도 한 번도 일치하지 않았습니다
- 임베드된 TrueType·OpenType 파싱이 잘린 글꼴 프로그램의 끝을 넘어 읽던 문제를 수정했습니다. glyph 아웃라인, 복합 glyph 인자, OpenType 컨테이너의 CFF 테이블을 디코딩할 때였고, 비정상 문자 맵은 이제 음수 glyph 배열을 요구하지 않습니다
- cross-reference 테이블과 스트림에서 선언된 객체 번호가 넘치던 문제를 수정했습니다: 정수 한계 근처의 번호를 주장하는 항목이 음수 인덱스로 바뀌어 테이블 밖에 기록되었고, 파일이 담을 수 있는 것보다 훨씬 큰 객체 개수 선언이나
/Size가 로더 배열 크기를 그 선언만으로 정했습니다
Version 2.748.3
Fixed
- Data Matrix가 유효한 입력을 거부하던 문제를 수정했습니다: 심벌 크기를 자릿수를 반으로 나눠 추정했는데, code word를 공유하는 것은 인접한 숫자뿐이라서
1a2a3a같은 텍스트는 자기 데이터보다 작은 심벌을 골라 인코딩에 실패했습니다 - XFDF의 4바이트 UTF-8 문자(예: emoji)가 잘못된 서러게이트 쌍으로 디코딩되던 문제를 수정했고, 인식 못 하는 바이트가 더 이상 뒤따르는 세 문자를 삼키지 않습니다
- enhanced-metafile region 레코드가 이제 region 헤더의 개수를 믿는 대신 레코드 크기로 사각형 개수를 제한합니다. 기존에는 레코드를 한참 넘어 읽을 수 있었습니다
- 선언된 너비 곱하기 높이가 주소 지정 가능 범위를 넘는 PNG 이미지는 음수 길이 픽셀 버퍼를 할당하는 대신 헤더에서 거부됩니다
- 고품질 이미지 리샘플링이 이제 중간 버퍼 크기를 넘치게 하는 대신 범위를 벗어난 요청을 보고합니다
- 픽셀보다 많은 entropy group을 주장하는 WebP meta prefix 이미지는, 몇백 바이트 입력으로 몇백 MB짜리 prefix 테이블을 할당하는 대신 거부됩니다
- Aztec 인코딩, WebP 비트맵 디코딩, object stream 디코딩 worker pool의 실패 경로에서 누수를 수정했습니다. 뒤 단계에서 예외가 나면 절반 지어진 객체가 버려지고 있었습니다
Version 2.748.2
Fixed
- QR Code 심벌이 마지막 code word 비트를 버리던 문제를 수정했습니다: 모듈 배치 순회가 가장 왼쪽 열을 건너뛰어, 마지막 오류 정정 블록의 꼬리가 심벌에 기록되지 않았습니다
- QR terminator가 데이터 블록의 나머지를 전부 0비트로 채워 ISO/IEC 18004가 요구하는 0xEC / 0x11 패드 code word 자리를 남기지 않던 문제를 수정했습니다. 버전 1 심벌은 대신 0 code word 여섯 개를 담았습니다
- 새 테스트가 생성된 심벌을 모듈에서 다시 읽어, 데이터 블록·패드 code word·오류 정정 블록·마스크·배치를 인코더 자신의 출력이 아니라 표준과 대조합니다
Version 2.748.1
Fixed
- 세 파서가 비정상 입력을 보고하는 대신 걸려 있던 문제를 수정했습니다: 객체 파서는 배열 안의
>>나 딕셔너리 안의]에서, CMap 리더는 엉뚱한 괄호에서, XFDF 리더는 태그 이름 없는 구성(예: 문서 타입 선언)이나 속성 사이의 엉뚱한 바이트에서 각각 커서를 전진하지 않아, 예상 못 한 바이트 하나가 파싱을 무한 루프로 만들었습니다 - XFDF의 CDATA 섹션이 마크업으로 읽히던 문제를 수정했습니다. 이제 내용은 요소 텍스트로 취급되고, 섹션 마커는 첫 문자를 삼키는 대신 정확히 측정됩니다
- 2 GB에 가까운 WebP chunk 길이가 크기 검사를 넘쳐 페이로드 복사가 파일 버퍼 끝을 넘어 읽던 문제를 수정했습니다. 이제 chunk 길이는 64비트 산술로 범위 검사합니다
- 0xFFFFFFFF 길이의 PNG chunk가 chunk가 선언한 길이를 계속 보고하는 동안 버퍼를 해제해, 이후 읽기가 해제된 메모리를 가리키던 문제를 수정했습니다. 지나치게 긴 chunk는 거부합니다
- 매우 큰 페이지 지오메트리를 선언하면 CCITT 팩스 디코딩이 행 버퍼 크기 계산을 넘쳐 버퍼 밖에 쓸 수 있던 문제를 수정했습니다. 이제 행 저장소에 상한이 있고 디코딩은 한계에서 깔끔히 멈춥니다
- 너비가 8의 배수일 때 CCITT 인코더가 스캔 라인 끝에서 한 바이트 더 읽던 문제를 수정했습니다
- 64비트 빌드에서 enhanced-metafile comment 레코드를 32비트로 잘린 포인터로 읽던 문제를 수정했습니다. GDI comment를 담은 모든 EMF가 무관한 주소를 읽고 있었습니다
- 팔레트 항목이 256개보다 적은 8비트 이미지가 초기화되지 않은 메모리를 컬러 테이블 꼬리로 내보내던 문제를 수정했습니다. 이제 테이블이 실제 항목 개수를 선언합니다
- 서명이나 인증서 컨테이너를 파싱할 때 깊게 중첩된 indefinite-length BER 구조가 스택을 소진하던 문제를 수정했습니다. 128단계를 넘는 중첩은 거부합니다
Version 2.748.0
Fixed
- 라이브러리가 그리는 모든 2D 바코드의 오류 정정을 수정했습니다: QR Code, Data Matrix, PDF417, Aztec이 생성 다항식을 상수항부터 위로 만들면서는 맨 앞 항이 먼저 온다고 가정하고 나눠서, 각 심벌이 표준을 따르는 어떤 리더도 받아들이지 않는 체크 워드를 담고 있었습니다. 이제 체크 워드가 ISO/IEC 18004, ISO/IEC 16022, ISO/IEC 15438의 풀이 예제와 일치합니다
- Aztec 심벌이 페이로드를 잃던 문제를 수정했습니다: 인코더가 code word 배열을 제자리에서 나누고 호출자가 그 같은 배열을 내보내서, 메시지 워드가 나눗셈에 덮어쓰이고 심벌은 데이터도 유효한 mode message도 담지 못했습니다
- Data Matrix 생성 다항식이 루트를 한 차수 낮게 시작해 ISO/IEC 16022 부록 E가 정한 것과 다른 다항식이 나오던 문제를 수정했습니다
- Data Matrix finder pattern을 수정했습니다: 이제 속찬 L은 왼쪽 열과 아래 행이고, 번갈아 나오는 clock 트랙은 위 행과 오른쪽 열이며, 각각 L과 공유하는 모서리에서 어둡게 시작합니다. 둘이 뒤바뀌어 있어 리더가 심벌 방향을 잡지 못했습니다
Version 2.747.4
Fixed
- 불러온 문서를 편집할 때 PDF 숫자를 시스템 소수점 구분자로 기록하던 문제를 수정했습니다: 페이지 이어 붙이기(page stitching), 사각형 redaction, 텍스트·이미지 스탬프, 복합 워터마크 도형, 타원 appearance가 이제 항상 마침표를 출력하므로, 소수점 자리에 쉼표를 쓰는 로캘(예: 독일어나 프랑스어 Windows)에서 편집한 문서에는 뷰어가 거부하는 콘텐츠 스트림이 더는 들어 있지 않습니다
- Type 1 글꼴 불러오기가 시스템 로캘의 영향을 받던 문제를 수정했습니다: FontMatrix, BlueValues, stem hint, charstring의 실수를 마침표를 쓰는 PostScript 숫자로 파싱하므로, 쉼표를 소수점으로 쓰는 시스템에서도 PFB 글꼴이 메트릭과 아웃라인을 유지하고 아무 표시 없이 깨지는 일이 없습니다
- 기본 appearance(
/DA)의 글꼴 크기·색 파싱, HTML width 및size속성, FormCalc 결과, job JSON 숫자가 프로세스 로캘을 따르던 문제를 수정했습니다. 이제 어느 방향이든 invariant 포맷을 사용합니다 - 내장 바코드 그리기가 막대 사각형을 로캘 의존 포맷으로 기록해, 쉼표를 소수점으로 쓰는 시스템에서 잘못된 콘텐츠 스트림이 나오던 문제를 수정했습니다
- Free Pascal 빌드도 이제 콘텐츠 스트림 피연산자, 텍스트 추출 메트릭, JavaScript 숫자를 invariant 포맷으로 파싱하고 포매팅해서, 로캘 의존 변환에 fallback하는 대신 Delphi 빌드와 동일하게 동작합니다
- number writer가 호출마다 호스팅 애플리케이션의 전역 포맷 설정에 있는 소수점 구분자를 다시 쓰지 않습니다. 이 동작은 프로그램의 나머지 부분이 자기 숫자를 포매팅하는 방식을 바꿔놓았고, 여러 스레드가 동시에 문서를 만들 때는 안전하지 않았습니다
Version 2.747.3
Fixed
- 압축된 페이지에서 편집이 사라지는 문제를 수정했습니다: 사각형 redaction, 페이지 이어 붙이기, 복합 watermark 도형, 주석 평탄화가 아직 압축된 상태의 페이지 content stream에 연산자를 덧붙여, redaction 막대, 이어 붙인 페이지, watermark 도형, 구워진 주석이 저장된 파일에 조용히 빠져 있었습니다. 이제 무언가를 덧붙이기 전에 페이지 콘텐츠를 먼저 펼칩니다
- 공백으로 끝나지 않는 페이지에서 이미 있던 마지막 연산자와 덧붙인 콘텐츠가 합쳐져
Q0.5같은 판독 불가 토큰이 만들어지고 viewer가 페이지 전체를 거부할 수 있던 문제를 수정했습니다. 이제 필요한 곳에 줄바꿈을 삽입합니다
Version 2.747.2
Added
- Free Pascal Win32 지원을 추가했습니다: Lazarus 패키지가 전용 build 진입점을 통해
i386-win32와x86_64-win64양쪽 모두로 빌드되고, smoke 스위트가 아키텍처 인자를 받아들이며, 32비트 컴파일러와 C 심벌 링킹 문제도 수정되었습니다. PDF 생성·불러오기, Flate 압축, AES 암호화, CBZ 문서 처리를 두 타깃 모두에서 커버합니다
Version 2.747.1
Fixed
- 내장 바코드 디코더의 회전 마스크 재시도가 회전된 마스크의 미처리 셀에 오래된 바이트를 남겨 유령 잉크를 만들고 90도 돌아간 Code 39 심벌을 읽을 수 없게 하던 문제를 수정했습니다. 이제 회전 버퍼를 명시적으로 0으로 채우므로, 돌아간 Code 39 사진과 스캔도 회전 재시도를 통해 디코드됩니다
Version 2.747.0
Added
- WebP 이미지 가져오기를 추가했습니다:
AddImageFromFile이 이제 RFC 9649를 구현한 내장 무손실(VP8L) 디코더를 통해.webp파일을 받습니다 — 정규 prefix 코드, 공간적 meta prefix 코드, neighborhood 거리 맵을 쓰는 LZ77 후방 참조, 컬러 캐시, 네 가지 역변환 전부(predictor, color, subtract-green, pixel bundling이 결합된 color indexing)가 여기에 해당하고, 손실 VP8 프레임은 명확한 메시지와 함께 거부됩니다
Version 2.746.0
Added
- 내장 바코드 디코더가 이제 사진이나 스캔 페이지가 올 수 있는 여덟 방향 중 어느 쪽의 QR 심벌이든 읽습니다: finder pattern이 빠진 모서리를 찾아내고, 샘플링된 모듈 행렬을 디코딩 전에 기대 레이아웃으로 회전하거나 미러링하므로, 90도 돌아간 캡처와 미러링된 캡처를 전처리 없이 읽습니다
Version 2.745.0
Added
- 로드된 서명에 대한 eIDAS 적격 인증서 평가를 추가했습니다: GetLoadedSignatureQCStatements가 서명자 인증서의 ETSI EN 319 412-5 QCStatements를 보고합니다 — QcCompliance, QcSSCD, QcType 값, QcLimitValue 통화/금액/지수, PDS 위치 — 여기에 TS 119 495 PSD2 지급인·수취인 역할까지 더해지며, QcCompliance와 QcSSCD가 모두 선언되면 적격 서명 휴리스틱을 표시합니다(QTSP 신뢰 판단은 호출자에게 남습니다)
Version 2.744.0
Added
- 로드된 문서용 N-up imposition을 추가했습니다: ComposeLoadedPagesNUp이 모든 페이지를 원지 용지 크기의 격자 구성 시트(2-up, 4-up, 6-up, 최대 16x16)에 재배치해 인쇄 준비 완료 출력을 만들고, 각 페이지의
/Rotate를 배치 행렬에 흡수하며, 구성된 폼과 페이지 리소스를 공유하고, 조절 가능한 거터로 헤어라인 셀 테두리를 그릴 수도 있습니다
Version 2.743.0
Added
- FlattenLoadedAnnotations가 이제 appearance stream이 없는 주석을 조용히 건너뛰는 대신 구워 넣습니다: 위젯은 필드 값으로부터 필드 appearance를 먼저 생성하고(브라우저에서 인쇄된 폼에서 흔한
/NeedAppearances케이스), 입력된 값이 페이지 콘텐츠에 그대로 살아남습니다 /AP가 없는 마크업 주석은 자신의 속성으로부터 합성된 appearance를 얻습니다 —/DA스타일과/Q정렬(quadding)이 적용된 FreeText·Stamp 텍스트,/C//IC색과/BS두께의 Square·Circle 도형, Line·Ink 스트로크, 그리고/QuadPoints와/CA불투명도를 존중하는 Highlight / Underline / StrikeOut / Squiggly quad 마크업이 여기에 해당합니다- 숨겨진 주석(
/Fhidden 플래그)은 appearance가 없으면 주석 상태로 남겨둡니다. 보이지 않는 노트를 굽는 순간 보이게 되기 때문입니다
Version 2.742.0
Fixed
- 2.738.0부터 Free Pascal 패키지 빌드가 실패하던 문제를 수정했습니다: LTV evidence와 seed value 멤버 선언은 Delphi 전용 조건부 블록 안에 있었는데 구현은 무조건적이어서 Free Pascal 패키지가 컴파일되지 않았습니다. 이제 구현에 같은 조건부가 붙어 패키지가 다시 빌드됩니다
Added
- HTML 가져오기가 이제 전체 점유 그리드 위에서 테이블을 배치하므로,
rowspan과colspan셀이 자기 열을 올바르게 차지하고 뒤 행은 차지된 슬롯을 건너뛰어 왼쪽으로 밀리지 않습니다 - 테이블 행 높이는 글자 수 추정이 아니라 셀 자체 글꼴로 셀 텍스트를 래핑해 계산하므로, 좁은 콘텐츠와 넓은 콘텐츠가 섞여도 넘치거나 지나치게 큰 셀이 생기지 않습니다
- 열 너비는
<col>폭 힌트와 셀별 width 속성을 따르고,<thead>로 마크업된 헤더 행(또는 전부<th>인 선행 행)은 테이블이 페이지 경계를 넘을 때 계속되는 모든 페이지 상단에 반복됩니다 - rowspan 그룹은 페이지 경계를 넘어도 통째로 유지됩니다: spanning 셀로 묶인 행들이 함께 다음 페이지로 넘어가므로 spanning 셀이 잘리는 일이 없습니다
Version 2.741.0
Fixed
- 문서가 해당 빌드가 링크하지 않는 코덱을 필요로 할 때 Free Pascal 빌드가 오류를 보고하는 대신 종료되던 문제를 수정했습니다: TIFF 열기, JPEG 2000이나 JBIG2 이미지 디코딩, progressive 또는 축소 JPEG 읽기, ICC 색 변환 적용, Zopfli 재압축 요청이 프로세스를 그대로 끝내버렸습니다
- 이제 각 연산은 호출자가 이미 기대하는 방식으로 실패하므로, 이런 기능을 쓰는 문서는 애플리케이션을 끌어내리는 대신 해당 기능을 건너뛴 채 로드됩니다
Added
- 구조 순서 텍스트 추출을 추가했습니다: ExtractLoadedPageStructureText가 문서 구조 트리를 작성 순서(ISO 32000-1 14.8.4)로 순회하며 페이지의 marked-content 런을 MCID별로 이어 붙이므로, 정부 양식이나 접근성 출판물 같은 태그 문서는 기하학적 추측 대신 신뢰할 수 있는 읽기 순서로 추출됩니다. 트리가 끝까지 클레임하지 않는 글리프는 기하학적 꼬리로 밀려나고 비태그 보고서에 집계됩니다
Version 2.740.0
Fixed
- Free Pascal 빌드에서 컬러 글리프의 투명도가 사라지던 문제를 수정했습니다: 내장된 컬러 비트맵이 알파 채널을 버리는 경로로 읽혀 모든 이모지와 컬러 글꼴 글리프가 불투명한 사각형으로 그려졌습니다. 이제 비트맵은 픽셀별 알파를 유지합니다
Fixed
- P-384 ECDH 키 합의를 활성화했습니다: CIOS Montgomery 곱셈의 마지막 조건부 뺄셈이 P limb에 borrow를 더한 값과 비교하는 바람에 P-384 / P-521 소수의 모든 비트가 1인 상위 limb에서 0으로 랩어라운드되어 조용히 borrow를 잘못 처리했습니다. 이제 비교는 오버플로하는 덧셈 없이 borrow를 감지하고, P-384 공유 비밀은 OpenSSL 참조 벡터와 바이트 단위로 일치합니다
Version 2.739.0
Added
- Free Pascal 빌드가 이제 문서를 암호화하고 복호화합니다: AES 진입점이 미지원 연산 오류를 보고하는 대신 라이브러리 자체의 FIPS-197 구현으로 처리되므로, AES-128과 AES-256으로 보호된 파일을 이 환경에서 만들고 열 수 있습니다
- 큰 페이로드에 쓰이는 스트리밍 컨텍스트를 포함해 AES-GCM 암호화와 복호화도 Free Pascal 빌드에서 사용할 수 있습니다
- Free Pascal 스모크 테스트는 이제 FIPS-197 known answer로 암호를 검증하고, PKCS#7과 GCM 왕복을 돌려보고, 암호 거부까지 확인하면서 AES-256으로 보호된 문서를 만들고 다시 로드합니다
Added
- HTML5 가져오기 엔진에 CSS2.1 문단 타이포그래피를 추가했습니다: text-align(구식 align 속성과 center 태그 매핑 포함), PDF Tc / word-space 연산자로 처리하는 letter-spacing과 word-spacing, 첫 줄 들여쓰기의 text-indent, text-decoration의 underline / line-through 규칙이 추가되어, 기존 웹·메일 HTML 가져오기는 가운데 정렬 제목, 들여쓰기, 밑줄을 그대로 유지합니다
- 내장 QR 디코더를 버전 1 너머로 확장했습니다: 심벌 버전이 이제 그리드 가분성을 통해 finder 기하학에서 도출되고(깔끔한 모듈 그리드를 가진 버전 2-40이 디코드됨), byte 모드 길이 상한은 ISO/IEC 18004 Table 7의 버전별 용량을 따르며, function 모듈 맵은 상위 심벌의 alignment pattern과 버전 정보 블록까지 커버합니다
Version 2.738.0
Added
- Free Pascal 빌드가 이제 문서를 네이티브로 압축하고 해제합니다: deflate 코덱이 Free Pascal에 함께 배포되는 Pascal zlib 구현 위의 내장 백엔드로 제공되므로, FlateDecode 콘텐츠가 더 이상 미지원 연산 오류를 내지 않습니다
- 기본 압축 설정으로 Free Pascal에서 압축 문서를 만들고 다시 로드할 수 있으며, 교차 참조 스트림, 객체 스트림, 내장 파일, 압축된 페이지 콘텐츠가 모두 이 환경에서 디코드됩니다
- 백엔드는 zlib과 raw deflate 래퍼, gzip 래퍼와 자동 헤더 감지를 커버하므로, SVG 가져오기와 다중 윈도우 크기 감압 폴백이 Delphi와 동일하게 동작합니다
- Free Pascal 스모크 테스트는 이제 래퍼·체크섬 셀프 테스트와 압축 문서 왕복으로 코덱을 검증합니다
Added
- AIA caIssuers 체인 완성을 추가했습니다: HPDFFetchAIAIntermediates가 CMS 인증서 집합의 access-method 1.3.6.1.5.5.7.48.2 엔드포인트를 호출자 전송 계층으로 순회하고(순수 DER과 PEM 본문 모두 디코드), FetchMissingIntermediates 검증 옵션이 가져온 중간 인증서를 경로 구축에 넣어, end-entity 인증서 하나만 있는 클라우드 서명자 서명도 경로 구축 실패 대신 검증을 통과합니다
- 한 번의 호출로 LTV를 켜는 기능을 추가했습니다: PopulatePAdESLTVEvidence가 로드된 모든 서명을 순회하고 중간 인증서와 OCSP/CRL evidence를 온라인으로 가져와 문서 DSS에 기록하므로, 손으로 evidence 배열을 조립하지 않고도 새 B-B 서명 문서를 B-LT로 승격합니다
- 서명을 위한 seed value 강제를 추가했습니다: CheckLoadedSignatureSeedValue가 서명 필드의 /SV 사전을 읽고 후보 SubFilter, DigestMethod, Reason, DocMDP 프로필을 ISO 32000-1 12.7.5.5의 force 비트 의미론에 따라 제약 조건과 대조하므로, 폼 작성자의 제약이 서명이 놓이기 전에 존중됩니다
Version 2.737.0
Added
- VerifySavedOutput 속성으로 엄격한 저장 검증을 추가했습니다: 쓰기 후 교차 참조 복구를 끈 새 reader 인스턴스가 파일을 다시 로드하므로, 손상된 직렬화가 다음 소비자에서 드러나는 대신 호출 지점에서 바로 raise됩니다
- ReproducibleOutput을 암호화 문서로 확장했습니다: AES-CBC 스트림은 정적 14*(1+i) IV 관례를 쓰고, 키 자료와 솔트가 결정적으로 도출되며, 정규화된 문서 ID가 휘발성 Info 타임스탬프를 정규화해, 회귀 파이프라인을 위한 바이트 단위로 동일한 암호화 저장을 제공합니다
Version 2.736.0
Added
- 새 HPDFResample 유닛으로 고품질 리샘플링과 단색 디더링을 추가했습니다: ImageDownsampleKernel 속성을 통한 이미지 다운샘플링에서 GDI stretch 의미론을 separable Catmull-Rom bicubic과 Lanczos3 커널이 대체하고, RenderOutputDither가 페이지 합성 후 Floyd-Steinberg 에러 디퓨전을 적용해 인쇄 미리보기 출력이 순수 흑백에서도 사진 디테일을 유지합니다
Version 2.735.2
Fixed
- Flate 감압 스트림이 소스 스트림에서 다시 채울 때 버퍼 변수의 주소를 버퍼 대신 넘기던 버그를 수정했습니다. 읽을 때마다 메모리가 깨지고 프로세스가 죽을 수 있었습니다. 압축 문서 로드, inflate 스트림 클래스, 압축·감압 스트림 헬퍼가 모두 영향 대상입니다
Version 2.735.1
Fixed
- 데이터 소스가 없는 growable XFA 필드가 플래튼 시 한 줄로 찌그러지던 문제를 수정했습니다: 이제 그 높이는 템플릿 자체가 선언한 텍스트, 즉 그런 필드가 실제로 표시하는 텍스트로 측정합니다. 빈 데이터에 바인딩된 필드는 여전히 빈 것으로 측정됩니다
Version 2.735.0
Added
- Free Pascal 빌드가 이제 라이브러리 전체를 커버합니다: 예전에는 핵심 생성·로드 경로만 가능했지만, 이제 모든 유닛이 FPC 3.2.2와 Lazarus에서 컴파일됩니다
- Free Pascal에서 XPS, EPUB, CBZ 컨테이너를 가져올 수 있습니다. ZIP64 크기, stored·deflated 엔트리, CRC 검증, Delphi 경로와 동일한 password 콜백을 쓰는 전통적 암호화 엔트리를 처리하는 내장 읽기 전용 ZIP 리더를 통해 이뤄집니다
- XFA 폼 플래튼, FormCalc 계산 엔진, 위젯 런타임, 문서 뷰어 컴포넌트, Type 1 글꼴 핸들러, HTML 가져오기, 서명 검증, job runner가 모두 Free Pascal 빌드에서 컴파일됩니다. 로드된 문서의 XFA 패킷 플래튼에는 추가로 deflate 코덱이 필요한데, 해당 빌드는 이를 링크하지 않습니다
Fixed
- PNG 헬퍼 유닛의 64비트 바이트 스왑을 수정했습니다. Win64에서 잘못된 값을 돌려주고 있었고, 그 때문에 유닛 자체가 빌드에서 아예 빠져 있었습니다
Added
- 그리기 시점 missing-glyph 감지를 추가했습니다: TrackUnresolvedGlyphs 속성이 활성 Unicode 페이스에서 .notdef tofu 상자로 렌더링될 모든 코드 포인트를 기록하고, 발견 건마다 OnUnresolvedGlyph 이벤트를 발생시키며, 등록되지 않은 순수 GDI 문서는 그대로 둡니다
- 구식 kern 테이블 지원을 추가했습니다: RegisterUnicodeTTF가 Apple/GDI 시절 kern 테이블을 잡아두고, 글꼴에 GPOS kern lookup이 없으면 커닝 출력이 format-0 바이너리 페어 검색으로 폴백하므로, 기본 Arial 같은 글꼴의 클래식 페어 간격이 돌아옵니다
- 문단 레이아웃 안에 런별 글꼴 폴백을 추가했습니다: WideTextOutBox가 이제 각 줄을 현재 글꼴이 매핑하지 못하는 코드 포인트에서 나누고 각 런을 확정된 폴백 글꼴로 그리므로, 폴백 체인이 등록되어 있으면 Latin·emoji·CJK가 섞인 문단도 tofu 없이 렌더링됩니다
Version 2.734.0
Added
- RFC 3161 타임스탬프 요청 배관을 추가했습니다: HPDFRFC3161BuildRequest가 새 positive-INTEGER nonce와 선택적 policy OID, certReq와 함께 DER TimeStampReq를 만들고, HPDFRFC3161ParseResponse가 PKIStatusInfo 헤더를 디코드해 토큰을 꺼내므로, TSA 전송 콜백은 DER 공부 대신 세 줄이면 됩니다
- PDF 2.0 문서의 EdDSA 서명 알고리즘과 추가 ECDSA 곡선을 커버하는 ISO/TS 32002 developer extension 선언(THotPDF.EnsureISO32002Extensions)을 추가했습니다. 32001 SHA-3 선언처럼 멱등하고 버전 게이트가 있습니다
Version 2.733.0
Added
- 이식 가능한 X25519·X448 Montgomery-ladder 키 합의와, CIOS Montgomery 곱셈을 이용하는 P-256 / P-521 NIST 곡선 ECDH를 추가했습니다. 키 합의(KARI) 공개키 수신자를 완전히 프로세스 내에서 만들고 언랩할 수 있습니다. RFC 7748과 OpenSSL 생성 참조 벡터가 레더 동작을 회귀 스위트에 고정합니다
- HPDFUnwrapKeyAgreementRecipientEnvelope과 AddPubSecAgreementKeyMaterial, AddPubKeyAgreementRecipientWithSecret 진입점을 추가했습니다. ECDH / X25519 / X448 수신자로 암호화된 문서를 수신자 개인 스칼라로 열고, 외부 ECDH 도구 없이 암호화할 수 있습니다
Version 2.732.0
Changed
- 저장은 이제 serializer 출력을 1 MiB 버퍼드 쓰기 스트림으로 라우팅해, 파일 기반 대상에서는 객체 헤더·사전 키·xref 행의 토큰별 Write 호출을 묶어서 밀어 넣습니다
- 교차 참조 스트림 페이로드는 FlateDecode 전에 PNG Up 예측(/DecodeParms /Predictor 12)을 적용하고 /Index 서브섹션으로 free-list 구멍을 압축해, PDF 1.5+ 문서 전반과 희소 객체 범위에서 xref 컨테이너를 줄입니다
- CompressionLevel 속성이 이제 교차 참조 스트림과 객체 스트림 컨테이너의 Flate 작업 강도도 선택하므로, clMaximum은 저장 중 더 작은 구조 스트림을 만듭니다
Fixed
- 교차 참조 스트림의 /W 필드 폭이 이제 고정 [1 4 2] 레이아웃 대신 실제 오프셋 범위에 맞춰집니다. 기존 레이아웃은 Cardinal 캐스트가 4 GiB를 넘는 오프셋을 조용히 잘라 손상된 출력을 만들었습니다
Version 2.731.0
Changed
- 내장 템플릿 매칭 OCR을 다시 만들었습니다: 연결 컴포넌트 글리프 추출, 캐시된 멀티 글꼴 템플릿 대비 그레이스케일 커버리지 스코어링, 로컬 윈도우 폴백이 있는 Otsu 이진화, bimodal gap 단어 분할, 단어별 베이스라인, 잡음 점 제거, 그리고 라인 수준 높이 클러스터링과 대소문자 맥락 선호로 대소문자 혼합 ASCII 텍스트를 인식하는 확장된 62자 알파벳이 들어갔습니다
Version 2.730.0
Added
- Free Pascal 3.2.2와 Lazarus 4.6에 Win64 지원을 추가했습니다. 런타임 패키지, 재현 가능한 빌드 스크립트, 호환성 레이어, 비 GUI 생성·재로드 스모크 테스트가 포함됩니다. 네이티브 정적 코덱 통합은 여전히 Delphi 전용이며, Free Pascal 빌드에서는 명시적인 미지원 연산 오류를 보고합니다
Version 2.729.0
Added
- 호스트 중립적인 동적 XFA 위젯 런타임을 추가했습니다: Unicode 편집, 포커스와 hit testing, 인스턴스 인식 바인딩, 원자적 검증과 계산, 한정된 reflow, 원본 XFA를 보존하는 읽기 전용 로드 문서 팩토리가 갖춰져 있습니다
Version 2.728.0
Fixed
- XFA intrinsic 측정과 텍스트 연속 처리를 바로잡았습니다: 명시적 빈 값과 계산된 값을 보존하고, 필드별·반복 행별 바인딩 컨텍스트를 사용하고, breakAfter 액션을 유지하고, 합성 이름 충돌을 피하고, 캐시된 전역 측정 예산을 강제합니다
Version 2.727.0
Changed
- XFA 레이아웃이 이제 intrinsic 최소·최대 치수를 적용하고, growable 필드를 바인딩된 텍스트로 측정하며, 대상 textEdit 콘텐츠를 읽기 전용 연속 필드와 함께 콘텐츠 영역과 페이지에 걸쳐 원자적으로 나눕니다. 텍스트, 프래그먼트, 측정 예산은 한정됩니다
Version 2.726.0
Added
- 완전한 NChannel process·spot 속성, mixing 힌트, 한정된 PDF 2.0 CxF/X-4 분광 잉크 스트림, 그리고 spot tint 정의와 외부 output-intent colorant 테이블에 대한 문서 수준 일관성 검사를 추가했습니다
Version 2.725.0
Added
- 스레드 세이프하고 결정적인 SIMD 스캔라인 렌더 백엔드를 추가했습니다: 지원되는 사각형 디스플레이 리스트를 사전 점검하고, 중간 비트맵 복사 없이 벡터 블록으로 최종 비트맵 표면을 쓰며, 기존 소프트웨어 폴백과 텔레메트리 파이프라인을 통해 요청별 정확한 거부 사유를 반환합니다
Version 2.724.0
Changed
- 한정된 네이티브 FormCalc 평가기를 확장했습니다: 일반 SOM 노드 셋 집계, 스칼라와 노드 셋이 섞인 인자, 중첩 숫자·문자열 호출, 그리고 기존 연산·배열·깊이·시간·출력 예산 안에서의 결정적 selection·문자열·삼각·로그·변환 함수가 추가됩니다
Version 2.723.0
Changed
SubsetLoadedFonts가 이제 내장된 Type 1 PFB와 분할 바이너리·hex PFA 프로그램을 안전하게 서브셋하고, 재귀적 TrueType composite 의존성을 유지하며, 색·비트맵·variation·shaping 테이블을 보존하면서 COLR v0/v1 아웃라인 의존성을 닫습니다
Version 2.722.0
Added
- 클래식 ZIP 암호화 XPS, EPUB, CBZ 엔트리를 위한 한정된 password 콜백을 추가했습니다: 엔트리별 재시도 한도, 취소 검사, 메모리 전용 자격 증명 처리, 사용 불가·무효·미지원 암호화의 fail-closed 거부가 포함됩니다
Version 2.721.0
Changed
DownsampleLoadedImages가 이제 지원되는 8비트 Separation과 DeviceN 이미지 샘플을 컴포넌트 공간에서 직접 리사이즈하고, 원본 색 공간 그래프, tint transform, colorant,/Decode범위, overprint 의미론을 저장과 재로드 전반에 걸쳐 보존합니다
Version 2.720.0
Added
- 고대비 대문자 ASCII OCR, 수평 Code 39, 깨끗한 축 정렬 QR 버전 1 byte 모드 심벌을 위한 한정된 내장 인식 오버로드를 추가했습니다. 호출자 엔진 없이 검색 가능한 텍스트 레이어와 로드 페이지 바코드 디코딩이 가능하며, 모호하거나 지원되지 않는 입력은 fail-closed로 실패합니다
Version 2.719.0
Added
THPDFJpeg2000Decoder.LoadProgressiveFromByteArray를 통한 해상도·품질 레이어별 한정된 JPEG 2000 정밀 접근과,TJpeg2000Bitmap.QualityLayers를 통한 멀티 레이어 인코딩을 추가했습니다. LRCP, RLCP, RPCL, PCRL, CPRL progression 순서 모두에서 최종 픽셀이 동일합니다
Version 2.718.0
Changed
- UniJIS, UniGB, UniCNS, UniKS의 UCS2·UTF16 수평·수직 CMap 전체를 내장했습니다. 보조 스칼라와 표준 세로 기본값을 포함하며, 이제 CJK 텍스트 추출과 기하학이 외부 Unicode 매핑 파일이나 half-em 추측에 의존하지 않습니다
Version 2.717.0
Added
- 명시적인 선형화 공유 객체 의존 범위와 범위 도착 시 재그리기 스케줄러를 추가했습니다. 페이지는 선택적 의존성이 모두 도착하기 전에 그릴 수 있고, 새로 도착한 데이터가 결과를 바꿀 때 정확히 다시 그립니다
Version 2.716.0
Added
- 조치 가능한 xref, trailer, catalog, 페이지 트리, 이름 트리 preflight 발견 사항에 대한 한정된 객체 그래프 복구를 추가했습니다. 검증된 트랜잭션 커밋과 함께, 안전하지 않거나 모호한 입력에는 완전히 롤백합니다
Version 2.715.0
Added
- PDF 2.0 암호화 페이로드 래퍼를 추가했습니다. 인증 전에도 보이는 문서 콘텐츠는 읽을 수 있고, 내장 파일 이름·설명·바이트는 명시적인 password 잠금 해제까지 보호됩니다
Version 2.714.0
Changed
- 로드 페이지 SVG 내보내기가 이제 axial·radial 그라디언트, Type 4~Type 7 mesh shading의 한정된 PNG 표현, 디코드된 인라인 이미지를 내보내고, 해당 skip 카운터를 올리지 않습니다
Version 2.713.0
Changed
- OpenType SVG 컬러 글리프가 이제 arc, 벡터 그라디언트, 불투명도, 기하 마스크, 로컬
#id재사용에 한정된 Form XObject 파이프라인을 쓰며, 스크립트, 외부 리소스, 이미지, 지원되지 않는 능동 콘텐츠는 계속 거부합니다
Version 2.712.0
Changed
ReplaceLoadedPageText가 이제TJ문자열 항목과 배열에 걸친 매치를 glyph 소스 스팬으로 대체하면서, 커닝 숫자, 매치되지 않은 접두·접미사, 무관한 피연산자, 원본 content stream 구조를 보존합니다
Version 2.711.0
Added
- 상속된 Top·Private DICT 값, CharStrings, charset, Encoding, Local Subrs를 갖춘 CFF FontSet
SyntheticBase해석을 추가했습니다. 결정적 override 의미론과 함께, 무효하거나 순환하거나 지나치게 깊은 상속은 한정된 방식으로 거부합니다
Version 2.710.0
Added
HPDFSelectFlatePredictor를 통한 결정적·한정된 Flate predictor 선택을 추가했습니다: 분산 행 샘플, 추정 바이트 비용, 설정 가능한 CPU 가중치, 명시적 바이트·행·작업 예산을 사용합니다
Version 2.709.0
Added
THPDFJBIG2Options.UseHuffmanEncoding을 통한 옵트인 네이티브 JBIG2 Huffman 심벌 사전·텍스트 영역 출력을 추가했습니다: 표준 DH, DW, BMSIZE, FS, DS, DT 테이블, raw collective 비트맵, 심벌 ID 테이블, 결정적 네이티브 라우팅, 픽셀 단위로 정확한 디코더 왕복이 포함되고, arithmetic과 MMR 기본값은 그대로입니다
Version 2.708.0
Changed
- 아랍어와 결합 presentation-form 역방향 cmap 매핑을 등록 글꼴 세대별로 캐시했습니다.
ApplyArabicGSUBRefinement,ApplyArabicGSUBContextualRefinement, 일반 contextual GSUB 경로에서 반복되던 U+FB00..U+FDFF와 U+FE70..U+FEFF 스캔을 대체하면서 코드 포인트 우선순위와 shaping 결과는 유지합니다
Version 2.707.0
Added
THPDFPage.DrawAztec과 독립THPDFAztec유닛을 통해 Aztec 2D 바코드 인코더(ISO/IEC 24778)를 추가했습니다: 모드 래치, 시프트, binary-shift 런이 있는 동적 계획법 기반 상위 인코딩, bit stuffing, GF(16)~GF(4096)에 걸친 Reed-Solomon 오류 정정, 자동 compact 15x15..27x27 또는 full 19x19..143x143 심벌 선택, 고정 심벌 크기를 위한 강제 레이어 제어가 갖춰져 있습니다- 세로 페이지 텍스트 조립을 추가했습니다:
THotPDF.ExtractLoadedPageText와 range/stream 집계 API가 이제 WMode 1 글리프를 글리프 원점 X 기준으로 열에 묶고, 열을 오른쪽에서 왼쪽으로 순서화하며, 각 열을 위에서 아래로 훑습니다. 세로 CJK 텍스트를 글리프별 줄로 찢지 않습니다
Fixed
- 픽셀 치수가 소수인 페이지(96 DPI A4)에서 병렬 band 내보내기가 PNG band 폭 불일치로 실패하던 문제를 수정했습니다: 이제 래스터 크기를 band 작성기와 똑같이
Ceil로 올림하므로, 전달되는 타일이 항상 인코더 폭과 일치합니다
Version 2.706.0
Added
THotPDF.SaveLoadedPageToPng,SaveLoadedPageToPngStream,SaveLoadedPagesToTiffBanded,SaveLoadedPagesToTiffStreamBanded를 통한 스트리밍 로드 페이지 PNG 내보내기와 banded 멀티 페이지 TIFF 내보내기를 추가했습니다. band 인코더로 압축 이미지 데이터를 행 단위로 쓰므로 아주 큰 페이지도 완전한 프레임버퍼가 필요 없습니다.THPDFBandImageExportInfo가 페이지, band, 행, 워커, 메모리, 출력, 타이밍, 취소 텔레메트리를 보고합니다
Version 2.705.0
Added
- 로드 저장 경로에 PDF/A 파이널라이즈를 추가했습니다:
THotPDF.SaveLoadedDocument와SaveLoadedDocumentToStream이 이제GTS_PDFA1OutputIntent(소스 카탈로그에서 상속하거나 새로 등록)를 검증하고,PDFACompliance가 설정되면pdfaid:part/pdfaid:conformanceXMP 식별을 내보냅니다. 다시 저장할 때 기존 pdfaid 패킷은 바이트 단위로 보존됩니다 - 로드 쪽 세로 쓰기(WMode 1) 소비를 추가했습니다: CIDFont
/W2와/DW2셀 메트릭이 이제 텍스트 추출과 페이지 렌더링을 이끌고, 수평/W어드밴스 대신 v1x/v1y 위치 벡터로 텍스트 공간 y축을 따라 열을 내려갑니다
Version 2.704.0
Added
THotPDF.RenderLoadedPageTilesParallel과THotPDF.RenderLoadedPageBandsParallel을 통한 병렬 로드 페이지 타일·band 렌더링을 추가했습니다: 행 우선 호출 스레드 콜백, 빌린 비트맵, 협력적 취소, 호출자가 제어하는 진행 중 메모리, 피크 메모리 어드미션, 그리고 격리된 렌더 컨텍스트가 공유하는 한정된 불변 Type 3 글리프·halftone 스크린 캐시가 갖춰져 있습니다
Version 2.703.0
Added
THPDFCSCSignatureProvider.SignHashBatch를 통한 한정된 CSC multisign 다이제스트 배치를 추가했습니다: 정렬된 동일 알고리즘 배치에 해시 고정 SAD 하나와signatures/signHash요청 하나를 쓰면서, 로컬·자격 증명multisign한도, 엄격한 응답 카디널리티, 동기·비동기 결과 순서, SHA-256 콘텐츠 어드레스 idempotency 키, 완료 배치 리플레이를 강제합니다
Version 2.702.0
Added
THotPDF.RenewPAdESLTATimestamp를 확장했습니다: 호출자가 제공한 인증서·OCSP·CRL evidence를 새 RFC 3161 문서 타임스탬프 전에 기존 DSS에 병합하고, 모든 이전 개정을 바이트 단위로 보존하며, 연속 갱신에 걸쳐 검증 스트림을 정확히 중복 제거합니다
Version 2.701.0
Added
THotPDF.PreflightLoadedPAdES를 통한 조항 주소 방식 PAdES baseline·확장 프로필 preflight를 추가했습니다: 적용 가능한 모든 요구 사항을 안정적인 rule ID, 프로필, 규범 수준, 표준 조항, PDF 경로, 객체 번호, 서명 개정 또는 현재 개정, 통과 상태와 함께 보고하면서, CMS 카디널리티, 서명자 인증서 ESS 참조, 서명 사전 제약, byte-range 커버리지, 신뢰 시간, DSS evidence, 문서 타임스탬프 커버리지를 검증합니다
Version 2.700.0
Added
- 엔드투엔드 ECDSA, Ed25519, Ed448 PFX / PKCS#12 개인키 로딩과 CMS 문서 서명을 추가했습니다: named-curve CNG ECDSA, 선택적 OpenSSL 3 PureEdDSA, RFC 8410 키 디코딩, RFC 8419 다이제스트·파라미터 규칙, Ed448용 512비트 출력 SHAKE256, 자동 키 알고리즘 선택, 엄격한 인증서-키 페어링이 포함됩니다
Version 2.699.0
Added
HPDFEnumeratePFXIdentities,HPDFParsePFXByLocalKeyID,THPDFCMSSignOptions.PFXLocalKeyID를 통한 결정적 다중 신원 PFX / PKCS#12 자격 증명 선택을 추가했습니다: 엄격한 단일 값localKeyId와friendlyNamebag 속성, 공개키 페어링, 재귀적 safe-content bag, 한정된 모호성·순환 진단, 정확한 DER 중복 제거와 함께 일치하는 중간·루트 인증서 체인 자동 임베딩이 포함됩니다
Version 2.698.0
Added
- 프로세스 내 PFX / PKCS#12 PBES2 복호화를 확장했습니다: AES-128-CBC와 AES-192-CBC, PBKDF2 HMAC-SHA-384·HMAC-SHA-512 PRF가 추가되었고, 암호별 선택적
keyLength검증과 한정된 salt·반복·IV·패딩 검사가 포함되며, AES-256-CBC와 HMAC-SHA-1 / SHA-256 호환성은 유지됩니다
Version 2.697.0
Added
- 명세에 맞는 XPS·OpenXPS Canvas
FixedPage.NavigateUri상속을 추가했습니다. 하위Path,Glyphs, 중첩 Canvas 비주얼이 재정의하지 않는 한 스코프된 URI를 받습니다. 외부·메일·패키지 페이지·퍼센트 디코드LinkTarget액션을 transform, 중첩 클립, 격리된 opacity 그룹, 재사용 비주얼 억제, 중첩 재정의 후 복원 과정에서 유지하고, 기존 링크·URI·취소·안전하지 않은 스킴 제한도 그대로입니다
Version 2.696.0
Added
- 한정된 네이티브 XPS·OpenXPS Canvas 투명도 그룹을 추가했습니다:
Opacity와 단색·그라디언트·이미지Canvas.OpacityMask값이 겹치는 하위 비주얼을 격리된 DeviceRGB Form XObject로 한 번만 합성합니다. 접힌 균일 알파, 공유 variable-alpha 소프트 마스크, 중첩 그룹, 변환된 클립, 리소스 전달, 링크 보존이 갖춰지고, malformed·미지원·특이·과대 콘텐츠는 fail-closed로 처리합니다
Version 2.695.0
Added
- 한정된 네이티브 XPS·OpenXPS
Canvas.Clip변환을 추가했습니다: 축약 기하, 로컬·원격StaticResourcePathGeometry값, 직접 property 요소, 구조화된 line·Bézier·quadratic·arc 피규어, 기하 변환, 빈 클립, PDFW*나W를 통한 중첩EvenOdd·NonZero클리핑을 다룹니다. 클립된 탐색 경계, 100,000 값 파싱 한도, malformed·특이 transform의 fail-closed 처리가 포함됩니다
Version 2.694.0
Added
- 변환된
Path·Glyphs비주얼을 위한 한정된 네이티브 XPS·OpenXPS 탐색을 추가했습니다: HTTP, HTTPS, 메일 링크를 PDF URI 주석으로 유지하고, 패키지 상대 페이지와 퍼센트 디코드LinkTarget프래그먼트를 모든 페이지가 존재한 뒤 전방·후방 PDF GoTo 액션으로 해석합니다. 메트릭 인식 클릭 경계, 65,536 링크·8,192자 제한, VisualBrush 캡처 억제, 취소, 안전하지 않은 스킴의 fail-closed 진단이 포함됩니다
Version 2.693.0
Added
- 인라인·리소스 기반
Canvas,Path,Glyphs비주얼을 위한 한정된 네이티브 XPS·OpenXPSVisualBrush변환을 추가했습니다: 계층·원격ResourceDictionary조회, 절대Viewbox, 절대·상대Viewport,None·Tile·반사 타일 모드, transform, opacity, 재사용 Form XObject, 공유 타일링 패턴, 토큰 인식 리소스 전달이 갖춰지고, 순환·malformed 입력·재귀·콘텐츠·캐시·배치 예산은 fail-closed로 강제합니다
Version 2.692.0
Added
- TrueType·OpenType 프로그램, TTC 멤버 프래그먼트, GUID 난독화 리소스를 위한 네이티브 XPS·OpenXPS 패키지 글꼴 임베딩을 추가했습니다: 직접 또는 cmap 파생 glyph ID, 일대다 Unicode 클러스터, 명시적 어드밴스와 오프셋, 폭이 올바른 RTL 원점, 공유 글꼴 리소스, 임베딩·no-subsetting 권한, 선택적 glyph 서브셋, 한정된
ToUnicode맵, 상각 선형 positioned-run 출력이 갖춰지고 GDI 페이스 대체가 없습니다
Version 2.691.0
Added
- 엄격한 클러스터 코드 유닛·글리프 수, 명시적 1/100 em 어드밴스, 수평·수직 오프셋, 홀수
BidiLevel역방향 진행, 단색 속성·property 요소 채우기, opacity, 네이티브 PDFTJ배치, positioned Unicode 클러스터 폴백, 텍스트 추출 보존, malformed 입력 fail-closed 진단, 65,536 매핑으로 제한된 상각 선형 버퍼를 다루는 한정된 OpenXPSGlyphsIndices레이아웃을 추가했습니다
Version 2.690.0
Added
- OpenXPS
Path.OpacityMask지원을 추가했습니다: 접힌 균일 알파, 한정된 네이티브 DeviceGray 투명도 그룹, 공유 shading 패턴·이미지 소프트 마스크 스트림을 통해 단색, variable-alpha 멀티 스톱 선형·타원 radial 그라디언트, 일반·타일·반사 PNGImageBrush마스크를 처리하고, 미지원 콘텐츠는 fail-closed로 다룹니다. alpha 이미지 리소스 바인딩이 있는 재사용RegisterLuminositySoftMaskState빌더도 제공합니다
Version 2.689.0
Added
- 네이티브 PDF 타일링 패턴을 통해 OpenXPS
ImageBrush의Tile,FlipX,FlipY,FlipXY모드를 추가했습니다: 하나, 둘, 넷의 독립 클립 배치, 공유 이미지·PNG 소프트 마스크 리소스, 합성된 fixed-page·path·brush 행렬이 갖춰지고, 재사용 가능한 이미지 기반 패턴을 위한 한정된RegisterImageTilingPatternAPI도 제공합니다
Version 2.688.0
Added
- OpenXPS
ImageBrush.Transform지원을 추가했습니다: 유한한 6매개변수 속성 행렬과MatrixTransformproperty 요소를 네이티브Path클리핑 뒤, 뷰포트 클리핑과 이미지 배치 앞에 연결해, brush가 담고 있는 벡터 기하를 바꾸지 않고 회전·스케일·왜곡·이동할 수 있습니다. 비표준RelativeTransform과 미해결 행렬 리소스는 명시적 진단으로 남습니다
Version 2.687.0
Added
THPDFPage.ShowImageMatrix를 통한 행렬 제어 이미지 XObject 배치를 추가하고, XPS fixed-page 가져오기를 확장했습니다: 패키지 JPEG, PNG, TIFF, JPEG XRImageBrush채우기, 절대 또는 경계 상대Viewbox·Viewport매핑, 네이티브 path·단일 뷰포트 클리핑, 이미지·path opacity, PNG 소프트 마스크 알파, DPI 인식 96-DPI 크기, 공유 디코드 리소스 캐싱이 갖춰지고, 미지원 타일링·transform·색 변환·이미지 스트로크에 대한 fail-safe 진단도 제공합니다
Version 2.686.0
Changed
- 재사용 가능한 한정된 멀티 스톱 radial 그라디언트 등록을 추가하고 네이티브 벡터 XPS path 가져오기를 확장했습니다: property 요소 타원
RadialGradientBrush값, Pad 스프레드, 균일 스톱 알파, brush opacity, 상대·절대 center, 원점·반경 매핑, 네이티브 Type 3 PDF shading, path 기하를 바꾸지 않는 좌표 복원이 갖춰집니다
Version 2.685.0
Changed
- 순서화된 네이티브 벡터 XPS path 가져오기를 확장했습니다: 따옴표 인식·한정된 property 요소 파싱, 단색·멀티 스톱 선형 그라디언트 brush, 네이티브 PDF shading 패턴, brush·스톱 알파, 기본 경계 상대 또는 명시적 절대 그라디언트 좌표, 범위 밖 스톱 보간이 갖춰지고, 미지원 transform·스프레드 모드·색 보간·variable alpha·퇴화 축에 대한 fail-safe 진단도 제공합니다
Version 2.684.0
Changed
- 한정된 축약 기하, fill 규칙, 단색 RGB·ARGB 채우기와 스트로크, path opacity, 스트로크 폭, 6매개변수 transform, 미지원 드로잉 기능의 fail-safe 진단을 갖춘 순서화된 네이티브 벡터 XPS path 가져오기를 추가했습니다
Version 2.683.0
Changed
- 실제 칠해진 콘텐츠 기준 PDF/X-6 검증을 강화했습니다: 정의 시점 shading 패턴 그래픽 상태, nonstroking 패턴 ExtGState 의미론, fail-closed 소프트 마스크 서브타입·백드롭 검사, 정확한 Type 3 글리프 메트릭과 상속 색 규칙, 엄격한 combined-paint 알파 분류, 한정된 JPX 색 추론, appearance 인식 주석 합성이 추가됩니다
Version 2.682.0
Added
brainpoolP256r1,brainpoolP384r1,brainpoolP512r1ECDSA 서명의 생성자·검증자 지원을 추가했습니다: 곡선별 SHA-2·SHA3 다이제스트 매트릭스, provider 이전 실패 서명 검증, 엄격한 named-curve 인증서 파라미터, 파라미터 없는 ECDSA 알고리즘 식별자, 정규 DER 서명 값, Windows CNG named-curve 임포트, 명시적·후행·미지원·불일치 파라미터에 대한 결정적 진단이 포함됩니다
Version 2.681.0
Changed
HPDFInterpretContentTokensDevice와 선택적 완전IHPDFContentOperatorDevice확장을 통해 비 progressive 비트맵, direct-DC, Form, 디스플레이 리스트 콘텐츠 실행을 통일했습니다: 연산자당 하나의 취소 체크포인트, 피연산자 스캔 없는 디스플레이 리스트 리플레이를 위한 컴파일 타임 연산자 인덱스 캐싱, 공개OperatorCount메트릭, semantic-device 호환성 보존, 바로잡힌",v,y연산자 의미론, 거짓 폴백 진단 없는 정상EI종결자 처리가 갖춰집니다
Version 2.680.0
Added
- 타입화된 옵션, 상세 복구 보고서, 공유 finding 출처, 안전한 PDF 2.0 헤더·trailer ID·메타데이터·Catalog·프레젠테이션 정규화, 네임스페이스 인식 PDF/A 식별 복구, 설정 가능한 부분·전체 적합 커밋 정책, 오류 회귀 감지, 바이트 정확 그래프·XMP 롤백, 그리고 페이지 콘텐츠, 글꼴, 색, 투명도, 이미지, 그래픽 연산자, 추출 텍스트를 보존하는 엄격한 경계를 갖춘 한정된 트랜잭션
RepairPDFA4오버로드를 추가했습니다
Version 2.679.0
Added
- 실제 칠해진 콘텐츠 기준 PDF/X-6 검증을 추가했습니다: 선택 가능한 ISO 15930-9:2020 또는 정정 반영 2025 규칙, 실제 ICC 헤더·채널 검사, 콘텐츠 배열, Form XObject, 타일링·shading 패턴, 이미지, Type 3 글리프, 소프트 마스크, 주석 appearance에 대한 리소스 인식 순회, overprint 모드·combined-paint 투명도 진단, 안정적인 규칙 출처, 그리고 한정된 디코드 바이트·토큰·객체·이슈·재귀·그래픽 상태 작업이 갖춰집니다
Version 2.678.0
Added
- 한정된 PDF/A-4 검증을 깊게 확장했습니다: 캐시된 ICC 헤더·컴포넌트 검사, 문서·페이지 output-intent 일관성, 콘텐츠 배열, 중첩 Form XObject, 이미지, 이미지 마스크, shading, 주석 appearance에 걸친 실제 칠해진 디바이스 색·투명도 분석, 상속된 그래픽 상태, 렌더링 글꼴 임베딩, CIDFont·CMap 관계, 엄격한 주석 플래그·appearance 상태, UTF-8 XMP 패킷·네임스페이스 검증, 논리적 페이지 트리 위치, 안정적인 조항 인식 진단, 설정 가능한 디코드 바이트·콘텐츠 토큰 상한이 추가됩니다
Version 2.677.0
Added
- 한정된 PDF/UA-2 문서, 사람이 읽는 문자열, optional content, 주석, AcroForm, structure destination, outline, 내장 파일, 중첩 페이지 레이블 검증을 완성했습니다: 물리적 ParentTree 소유, 스칼라 구조 자식, appearance stream 제한, 네임스페이스 URI 기반 XMP 속성, Unicode 사용자 정의 영역 감지, 조항 인식 진단이 포함됩니다. 구조화된 HTML, XHTML, XML, JSON 내보내기는 이제 언어, 제목, 탐색, 페이지 레이블, 안전한 링크, 주석, 비민감 폼 컨트롤, marked-content 대체, artifact, 이미지 대체 텍스트, 기하 폴백, 독립 한도, 취소, 원자적 공개를 갖춘 태그 우선 접근성 읽기 모델을 공유합니다
Version 2.676.0
Added
PlanProgressiveLinearizedPageRanges를 통한 선형화 PDF 모든 페이지의 한정된 최소 byte-range 계획을 추가했습니다: raw·Flate primary·overflow 힌트 디코딩, 상호 운용 가능한 바이트 정렬 combined·Annex F 연속 분할 힌트 레이아웃, 정확한 bootstrap·페이지·shared-group·LF 또는 CRLF 접두 전통·스트림 교차 참조 의존성, 정상적인 short-read 누적, fail-closed 인코딩 판별이 있는 256 MiB 기본 플래너 메모리 상한, 겹침 인식 병합, 엄격한 구조 교차 검사, 타입화된 한도·가용성 진단, 통합[0, /E)첫 페이지 경로가 갖춰집니다
Version 2.675.0
Added
ConfigureCryptFilterDefaults와SetStreamCryptFilter를 통해 문자열, 일반 스트림, 내장 파일에 대한 독립적·표준 준수 crypt filter 정책을 추가했습니다: password·공개키 예약 필터,/Identity, 작성자가 올바른 password 보안/EFF와 선행/Crypt파이프라인, fail-closed 공개키 스트림 전용 수신자 경계, 대소문자를 구분하는 외부 named-filter 로드·점검,/CFM /None, V2 키 길이 보고, 혼합 정책 Direct File 폴백, 분리된 객체 스트림 컨테이너·멤버 문자열 정책, 정책을 보존하는 암호화 증분 업데이트가 포함됩니다
Version 2.674.0
Added
- password 인식
BeginIncrementalUpdate오버로드와 할당된 수신자 키 자료를 통해 자격 증명을 보존하는 Standard·공개키 암호화 증분 업데이트를 추가했습니다: 안전하게 유지되는 파일 키·FEK, 별도의 문자열·스트림·메타데이터·Identity crypt filter 정책, 세대를 인식하는 구식 객체 키 도출, 정확한 상속/Encrypt참조, 바이트 단위로 동일한 소스 개정, 원본 user·owner·수신자 접근이 갖춰지고, 암호화 변경이나 미지원 이기종 필터는 fail-closed로 거부합니다
Version 2.673.0
Security
- 전체 페이지·영역·네이티브·외부 디코딩 전과 전역 사전 공유 전에 한정된 JBIG2 세그먼트 그래프 검증을 추가했습니다: 인덱스 기반 중복·참조 누락 검사, 반복적인 순환·의존 깊이 감지, 내장 스트림 페이지 연관 강제, 금지된 세그먼트 거부, long-reference·집계 엣지 예산, 심벌 사전 할당 가드, 정밀한 실패 텔레메트리가 포함됩니다
Version 2.672.0
Added
- PAdES E-EPES
signature-policy-identifier생성과 엄격한 검증을 추가했습니다: 명시적 policy OID, known·ETSI unknown 해시, SPuri, SPUserNotice, SPDocSpecification 한정자, 한정된 Unicode·컬렉션 파싱, 정책 문서 해싱, 암호 작업 전 primary-signer OID·해시 고정, 전용 불일치 상태, 완전한 JSON 보고가 포함됩니다
Version 2.671.0
Added
HPDFCMSBuildMultiSignedData와HPDFCMSMergeSignedData를 통해 최대 256개의 독립 primarySignerInfo레코드를 담는 결정적 RFC 5652 컨테이너를 추가했습니다: signer 부수 효과 전 전체 배치 사전 검증, signer별 속성·알고리즘·인증서·provider, 엄격한 definite-length 컨테이너 검증, DER 정렬·중복 제거 집합, 독립 검증 결과, 단일 signer 바이트 호환성, 부수 효과 없는 집계 플레이스홀더 크기 계산이 포함됩니다
Version 2.670.0
Added
THPDFCMSSignOptions.SignerIdentifier를 통한 선택적 RFC 5652SubjectKeyIdentifier서명자 신원을 추가했습니다: 컴팩트 IMPLICIT SID 인코딩, 자동SignerInfo·SignedData버전 선택, 엄격한 X.509 확장 추출, provider·플레이스홀더 크기 계산 지원이 포함되고, 검증 중 SID·인증서·버전 매칭은 fail-closed로 처리합니다
Version 2.669.0
Security
SignedData.digestAlgorithms,SignerInfo, 서명 메커니즘 파라미터, RFC 6211CMSAlgorithmProtection에 걸친 fail-fast CMS 다이제스트 알고리즘 일관성 진단을 추가했습니다: 전용 검증 상태, 검증 실패 코드, 타임스탬프 전파, 상세 이슈 사유, JSON 출력이 포함됩니다
Version 2.668.0
Added
- SHA3-256, SHA3-384, SHA3-512 생성·검증을 추가했습니다: detached CMS, RSA PKCS#1 v1.5, RSA-PSS, ECDSA provider 계약, RFC 3161 콘텐츠·서명 타임스탬프, PAdES-LTA 갱신, Seed Value 사전, ISO 32001 PDF 2.0 developer extension 선언에 걸쳐 동작하고, 일치하는 PDF MAC 정책과 공유하는 한정된 원패스 byte-range 해싱을 갖춥니다
Version 2.667.0
Added
THotPDF.ValidatePDFMACChain을 추가했습니다: 오래된 개정부터 최신까지 증분 개정 검증, 누적 classic·xref 스트림 인덱싱, 정확한 개정·xref 실패 위치, 과거 MAC 대체 감지, 안정적인KDFSalt강제, 다이제스트 강도 다운그레이드 거부, 인증된/P·/Perms검사, preflight 보고, 임시 PDF 복사본 없는 한정된 개정 파싱이 갖춰집니다
Version 2.666.0
Added
THotPDF.SignPDFWithPFXAndAttachedPDFMAC과 서명 첨부 검증을 추가했습니다: 직접 active-trailerAuthCode, 간접SigObjRef, 완전한 서명 개정 커버리지, raw 서명 값 다이제스트 바인딩, SHA-2·SHA-3 PDF MAC 정책, 원패스 서명·MAC 범위 해싱, preflight 보고, 원자적 출력 교체가 갖춰집니다
Version 2.665.0
Fixed
THotPDF.RegisterNChannelColorSpace를 바로잡았습니다: 이제/Subtype /NChannel과 process 컴포넌트 메타데이터를 갖춘 ISO 32000-2 5요소DeviceN형식을 내보내고, 최소 PDF 버전을 1.6으로 올리며, luminosity 소프트 마스크가 대체 색 공간을 통해 NChannel paint를 해석합니다. 구식/NChannel계열 토큰과의 읽기 호환성은 유지합니다
Version 2.664.0
Added
- PDF blend 모드 렌더링을 완성했습니다: Hue, Saturation, Color, Luminosity의 정수 핫패스 구현을 갖추고, 완전 불투명 패스트 패스를 바로잡아 활성 separable·non-separable blend 모드 모두가 배경과 합성됩니다
Version 2.663.0
Security
- 암호화된 safe 콘텐츠를 노출하기 전에 PKCS#12 컨테이너를 인증합니다: 한정된 PKCS#12 KDF 반복, SHA-1·SHA-256 HMAC, 상수 시간 다이제스트 비교로 선택적 외부
MacData를 검증하고, 잘못된 password·변조는 fail-closed로 처리합니다
Version 2.662.0
Added
- HotPDFCLI 명령 세 개를 추가했습니다:
render는 로드 페이지 비트맵 파이프라인으로 선택한 각 페이지를<prefix>-page<N>.png로 래스터화하고(--pages범위,--dpi10..2400, 기본값 150),tables는ExportLoadedTypedTables로 타입화된 테이블을 CSV나 JSON으로 추출하며(--json,-o파일 또는 콘솔),compare는HPDFDocCompareDocuments로 두 문서의 JSON 비교 보고서를 출력합니다(--mode0..5, page-count·page-text·object-count·rendered-image·full·structural 커버)
Fixed
- Win64 ICC 변환 파이프라인이 8비트 배치 변환(
TransformBytes)에서 전부 0인 출력을 내던 문제를 수정했습니다: Win64 lcms2 객체 내부의 최적화된 1D-LUT 패스트 패스가 0을 반환하는 반면 일반 리샘플링 파이프라인은 올바르므로, 8비트 변환은 이제 Win64에서만cmsFLAGS_NOOPTIMIZE로 빌드됩니다. 16비트 단색 경로와 모든 Win32 변환은 최적화된 패스트 패스를 유지합니다(배치 sRGB primaries가 이제 양쪽 플랫폼에서 왕복됩니다)
Version 2.661.0
Added
- 기존 4-전략 zlib 베이스라인 뒤에 진짜 예산화된 Zopfli 고압축률 Flate 압축을 추가했습니다: 엄격한 no-growth 선택, 입력·반복·블록·출력·경과 시간 한도, 상세 스트림·병렬 이미지 텔레메트리, 결정적 고정 코퍼스 절감 게이트가 포함됩니다
Version 2.660.0
Added
- 결정적인 XML 기계 판독 preflight 보고서와, 기능 추출·사용자 지정 검증 규칙을 위한 ABI 버전화 신뢰 플러그인을 추가했습니다: 안정적인 정렬, policy-bundle 통합, 취소 전파, fail-closed 기능 검사, 그리고 유한한 플러그인·finding·기능·문자열·출력·경과 시간 예산이 포함됩니다
Version 2.659.0
Added
- 한정된 XFA FormCalc에 조건 로직, 반복 숫자 집계, 검증된 동적 인스턴스 콜백을 추가하고, 기본 꺼짐 상태의 샌드박스 QuickJS 폼 스크립트를 도입했습니다: 완전한 제어 흐름, 네이티브 typed 배열, 격리된 데이터 접근, 유한한 명령·시간·메모리·스택·값·인스턴스 연산 예산, 실행 텔레메트리가 갖춰집니다
Version 2.658.0
Added
- 완전한 XDP 스트림과 정렬된 패킷 배열을 위한 한정된 편집 가능 XFA 패킷 DOM을 추가했습니다: local-name 경로 질의, 패킷·노드 변경, 정확한 미변경 바이트 보존, 패킷별 선택적 재작성, 결정적 네임스페이스·속성 출력, 안전한 CDATA 분할, entity 이스케이프, 그리고 유한한 입력·출력·패킷·노드·깊이·속성·텍스트·질의 예산이 갖춰집니다
Version 2.657.0
Added
- 기존 CMS provider 파이프라인을 통한 CSC API v2 원격 서명을 추가했습니다: 애플리케이션 소유 전송 계층, OAuth 토큰 갱신, 한정된 자격 증명 체인 탐색, 명시적 authorization·SAD 처리, 동기·비동기 다이제스트 서명, RSA-PSS 파라미터, 폴링, RFC 3161 타임스탬프, 취소, 안정적인 idempotency 키, 유한한 완료 연산 캐시가 갖춰집니다
Version 2.656.0
Added
- 콘텐츠 점수 기반 XPS, EPUB, CBZ 문서 핸들러를 선택적으로 추가했습니다: 교체 가능한 스레드 세이프 등록, 한 번의 검증된 아카이브 스캔, fixed-page·spine·자연 이미지 순서, 불변 PDF 변환 캐싱, 공유 아카이브·리소스·reflow·페이지·픽셀·DPI·출력·취소 예산, 롤백 세이프 PDF 공개가 갖춰집니다
Version 2.655.0
Added
- 한정된 타입화 테이블 추출과 원자적 CSV·JSON 내보내기를 추가했습니다: 정규 컬럼, 같은 페이지 프래그먼트·연속 페이지 병합, 병합 셀 스팬, 반복 헤더, 페이지 지오메트리, 신뢰도, 출처, 그리고 로케일 제어 정수·숫자·불리언·날짜·날짜시간·통화·백분율 추론이 갖춰집니다
Version 2.654.0
Added
- 로드 페이지의 원자적 구조화 내보내기를 HTML, XHTML, XML, JSON으로 추가했습니다: 블록, 스타일 스팬, 감지된 테이블, 좌표, 소스 순서, 선택적 한정 PNG 이미지, Unicode 안전 이스케이프, 취소, 유한한 리소스 예산을 갖춘 하나의 읽기 순서 모델을 통해 이뤄집니다
Version 2.653.0
Added
- 로드 페이지 색 재작성을 DeviceGray, DeviceRGB, DeviceCMYK로 원자적으로 추가했습니다: 검색 가능 벡터 보존, 이미지·복잡한 리소스에 대한 무손실 컬러 관리 래스터 변환, 회전 세이프 출력, 명시적 렌더 충실도·리소스 예산, 그리고 spot plate에 대한 preserve·process-convert·reject 정책이 갖춰집니다
Version 2.652.0
Added
- 검토 우선 로드 페이지 redaction 탐지를 추가했습니다: 체크섬 인식 PII 패턴, 교체 가능한 entity·얼굴 탐지기, 신뢰도 점수가 매겨진 페이지 공간 발견 사항, 한정된 작업 텔레메트리, 필수 검토자 신원, 원자적 승인 주석 스테이징, 그리고 별도의 명시적 burn-in 경계가 갖춰집니다
Version 2.651.0
Added
- 한정된 로드 페이지·영역 바코드 디코딩을 추가했습니다: 교체 가능한 엔진, 점진적 저해상도 렌더링, 폴백 90도 회전 스캔, 검증된 텍스트·raw 페이로드, PDF 공간 경계와 방향, 신뢰도 필터링, 겹침 중복 제거, 취소, 리소스 텔레메트리가 갖춰집니다
Version 2.650.0
Added
- 취소 가능한 한정된 검색 가능 OCR 텍스트 레이어를 추가했습니다: 교체 가능한 인식 엔진, 신뢰도·지오메트리 검증, 회전에 맞춘 보이지 않는 Unicode 텍스트, optional-content 그룹핑, 리소스 텔레메트리, 원자적 멀티 페이지 공개가 갖춰집니다
Version 2.649.0
Added
- 버전화된 JSON을 통한 완전한 객체 그래프 왕복을 추가했습니다: 스트리밍 스냅샷·증분 내보내기, raw 또는 디코딩된 내장·원자적 sidecar 페이로드, 한정된 스키마 호환 가져오기, 구조·스트림 길이 검증, 트랜잭션 공개가 갖춰집니다
Version 2.648.0
Added
- 손으로 편집한 QDF 진단 문서에 대한 한정된 복구를 추가했습니다: 객체·스트림 바이트를 보존하고, direct·indirect·누락·오래된 stream length를 고치며, 클래식 cross-reference 오프셋과 trailer를 다시 만들고, 안전하지 않은 구조는 거부하고, 출력을 일반 로더로 검증합니다
Version 2.647.0
Added
- 스레드 세이프 커스텀 stream filter 레지스트리를 추가했습니다: 한정된 push·pull 계약, 공유 디코드 예산, 협력적 취소, 명시적 seek 요구 사항, 격리된 커스텀 실패, 실행 텔레메트리가 갖춰집니다
Version 2.646.0
Added
- 한정된 content-operator visitor·event API를 추가했습니다: 읽기 전용 피연산자 뷰, 결정적 상태 콜백, inspect·measure·replace·delete·stop·reject 액션, 협력적 취소, 검증된 출력, 원자적 로드 페이지 업데이트가 갖춰집니다
Version 2.645.0
Added
- 교체 가능한 로드 페이지 render backend 계약을 추가했습니다: 컴파일된 디스플레이 리스트 접근, 네이티브 GDI 구현, 스레드 세이프 병렬 디스패치, 결정적 폴백 정책, 캐시 무효화, 실행 텔레메트리가 갖춰집니다
Version 2.644.0
Added
- 한정된 레이아웃 겹침 탐지, element 경로, 옵트인 소스 매핑, 네이티브 벡터 overflow·겹침 오버레이, 실시간 진단 콜백, 작업 통계를 추가했습니다
Version 2.643.0
Added
- line·bar·area·pie·scatter 시리즈, 자동·수동 축, 테마, 범례, 레이블, PDF/UA Figure 대체, 렌더 통계를 갖춘 네이티브 한정된 벡터 차트를 추가했습니다
Version 2.642.0
Added
- 벡터 EMF 출력, 이미지, 옵트인 지원 OLE presentation, 취소, stream position 보존, 명시적 입력·문자·페이지·출력 예산을 갖춘 한정된 GUI 스레드 RichEdit·RTF 페이지 매김을 추가했습니다
Version 2.641.0
Added
- 재사용 가능한 PDF Form XObject로의 한정된 SVG 2 가져오기를 추가했습니다: 네이티브 지오메트리·arc, CSS cascade, 벡터 그라디언트, clip·mask 지원, Base 14 텍스트, 불투명도 리소스, 배치 인식 링크 주석, 가져오기 통계가 갖춰집니다
Version 2.640.0
Added
- 버전화된 HTML5 paged-media 가져오기 프로필을 추가했습니다: 관대한 DOM 파싱, 인쇄 CSS cascade, 페이지 매김된 블록·테이블 레이아웃, 선택적 AcroForm 컨트롤, 한정된 콜백 기반 리소스, 연산별 통계가 갖춰집니다
Version 2.639.0
Changed
- 큰 로컬 파일 매핑이 이제 설정된 mapped-byte 상한을 더 큰 순차 윈도우와 최대 16개의 작은 MRU 랜덤 액세스 윈도우 사이에서 조정하고, 명시적 고정 지오메트리 옵션을 유지하며, 활성 지오메트리, 전환, 액세스 패턴 카운트, 피크 mapped byte를 보고합니다
Version 2.638.0
Added
- 외부·네이티브 백엔드, 하나의 공유 글로벌 사전, 정확한 중복 페이지 재사용, 직접 PDF 이미지 일괄 삽입, 백엔드·크기 텔레메트리, 그리고 100페이지 회귀 코퍼스에서 측정된 78.8 퍼센트 압축 절감을 갖춘 한정된 교차 페이지 JBIG2 심벌 학습을 추가했습니다
Version 2.637.0
Changed
- 병렬 로드 페이지 렌더링이 이제 프로세스 전체 메모리 예산에서 요청된 워커 수를 줄이고, 클레임된 모든 페이지를 예약하며, 콜백 전달까지 순서화된 출력 예약을 유지하고, 취소나 실패 시 예산 대기자를 깨우고, 동시성·예약·허용·지연·대기 텔레메트리를 보고합니다
Version 2.636.0
Changed
- 로드 페이지 prefetch가 이제 캐시 락 밖에서 컴파일·렌더링하고, 토큰화와 재생을 거치며 협력적으로 취소하고, 포그라운드 페이지 렌더링에 양보하고, 진행률·실패·선점·취소 지연 텔레메트리를 노출합니다
Version 2.635.0
Added
- 호출 스레드 콜백, 한정된 완료 비트맵 큐, producer backpressure, 협력적 취소, 빌린 비트맵 수명, 그리고 큐·바이트·대기·완료·전달 텔레메트리를 갖춘 순서화된 스트리밍 병렬 페이지 렌더링을 추가했습니다
Version 2.634.0
Added
- render-cache 락 밖에서 디스플레이 리스트를 컴파일하고, 전체 페이지 집합이 컴파일되기 전에 재생을 시작하고, 한정된 워커를 동적으로 조율하고, 입력 순서를 유지하고, content-token 할당을 줄이고, 스테이지·캐시·완료·지연 텔레메트리를 노출하는 2단계 병렬 로드 페이지 파이프라인을 추가했습니다
Version 2.633.0
Added
- 복사 없는 캐시 히트, 직접 스레드 세이프 렌더러 드로잉, 필요 시 격리된 mutable 복사, eviction과 무관한 수명, 누적 핸들·복사 텔레메트리를 갖춘 불변 참조 카운트 디코딩 비트맵 핸들을 추가했습니다
Version 2.632.0
Changed
- QuickJS 실행이 이제 Win32와 Win64에서 정적 객체와 ABI 중립 bridge DLL 양쪽 모두로 동작합니다: Unicode 세이프 값, 결정적 상태 보고, 설정 가능한 메모리·스택·스크립트·시간·인터럽트 한도, 보안 DLL 탐색, 거부된 스크립트 이후 복구, 재현 가능한 크로스 플랫폼 runtime 빌드가 갖춰집니다
Version 2.631.0
Changed
- Factur-X와 ZUGFeRD 비즈니스 규칙 검증이 이제 검토된 XPath 2 Schematron 표면 전체를 실행합니다: 외부 코드 데이터베이스, 순차 바인딩, quantifier, FLWOR 합계, 안정적인 fallback 규칙 식별자, 보안 한정된 XML 파싱, 명시적 평가 오류 발견 사항, 무음 건너뛰기 제로, fail-closed 결합 검증이 갖춰집니다
Version 2.630.0
Added
- 매핑된 축, 공유·프라이빗
gvar튜플, IUP 보간, simple·composite 아웃라인 업데이트, phantom-point 메트릭,HVAR,VVAR,MVAR베이킹, 컴팩트 정적 글리프 재구축, 체크섬이 올바른 출력, 콜백 없는 Unicode 글꼴 등록을 갖춘 내장 TrueType variable-font 인스턴싱을 추가했습니다
Version 2.629.0
Added
- 명시적·provider·RSA 인증서 서명 크기 기반의 부작용 없는 CMS placeholder 추정, 정확한 정적 컨테이너 셰이핑, 보수적인 동적 페이로드 예비, 서명 전 재구축, capability 게이트 provider 재시도, 엄격한 external-signer 단일 호출 보장, 한정된 사이징, 상세 시도 진단을 추가했습니다
Version 2.628.0
Added
- 로드된 PDF에 내장된 글꼴의 reachability 기반 서브셋을 추가했습니다: 페이지 콘텐츠, 중첩 Form XObject, 주석 appearance 상태, 공유 글꼴 프로그램, TrueType·CFF 포맷, encoded-size 선택, 안정적인 CID·ToUnicode 매핑, 상세 결과, 서명이 있을 때의 기본 거부가 포함됩니다
Version 2.627.0
Added
- 선언적 레이아웃 트리를 위한 자동 PDF/UA 구조 생성을 추가했습니다: 헤딩, 리스트, 테이블, figure, 언어·대체 텍스트 메타데이터, 페이지 매김 아티팩트, continuation 세이프 marked-content 참조, 읽기 순서 보존, 시맨틱 검증, 구조 통계가 포함됩니다
Version 2.626.0
Added
- 상속 가능한 스타일, 재사용 가능한 컴포넌트 팩토리, 텍스트, 스페이서, 스택, 컨테이너, 섹션, 반복 헤더·푸터, 반복 헤더 행이 있는 weighted 테이블, 한정된 continuation 깊이, 페이지 매김 통계, 복사 없는 텍스트·테이블 프래그먼트, 선형 top-level 순회, 즉시 페이지 플러시, 그리고 대응되는 Delphi·C++Builder 서피스를 갖춘 선언적 문서 DOM을 추가했습니다
Version 2.625.0
Added
- 로드, 저장, 렌더, 텍스트 추출을 격리하고, p50, p95, 표본 분산, RSS, 프로세스 I/O, 환경, 결정적 fixture 신원과 함께 워밍업과 30개의 raw 샘플을 기록한 뒤 안정적인 JSON 임계값으로 평가하고 회귀 시 실패 exit code를 반환하는 반복 가능한 Win32·Win64 통계 성능 게이트를 추가했습니다
Version 2.624.0
Changed
- 불변 소스 스팬, 직접 숫자 변환, 단일 패스 중첩 컨테이너, 인덱스 기반 dictionary 삽입을 중심으로 단순 dictionary·배열 파싱을 다시 만들고 공개 구체화 텔레메트리를 갖췄습니다; 30,000쌍 Win32 fixture에서 5패스 할당 바이트가 64.7 퍼센트 줄고 경과 시간은 3,656 ms에서 46 ms로 단축됐습니다
Version 2.623.0
Added
- 개별 token 바이트, 집계 token, 배열·dictionary 항목, malformed token에 대한 설정 가능한 파서 한도와 엄격한 untrusted-input 프리셋, 타입화된 한도 예외, 로드별 텔레메트리를 추가했습니다; 회귀 게이트는 2 MiB token과 백만 token 컨테이너를 250 ms 미만, 37 MiB 미만 프로세스 피크에서 거부합니다
Version 2.622.0
Added
- clean한 페이지 소유 루트와 render 캐시를 버리면서 indirect 공유 리소스와 reload 메타데이터를 보존하는 명시적 로드 페이지 객체 그래프 해제·텔레메트리 API를 추가했습니다; 100,000페이지 순차 처리는 안정적인 69.3 MiB 피크를 유지하고, 해제된 ordinary·compressed 페이지는 원래 객체 신원 그대로 다시 구체화됩니다
Version 2.621.0
Changed
- 디코딩된 object-stream 컨테이너가 이제 컨테이너별 즉시 eviction, eviction 이후 소스 기반 reload, 제로 보존 모드, 피크 바이트·eviction·reload 텔레메트리를 갖춘 설정 가능한 byte-capped LRU 캐시를 사용합니다
Version 2.620.0
Changed
- 큰 ordinary 페이지 트리가 이제 컴팩트 placeholder로 열리고,
/Count유도 순회와 indirect-object hash 인덱스로 랜덤 페이지를 해석하며, 해석된 페이지를 캐시하고, 구체화 텔레메트리와 컨트롤을 노출하고, 구조 변경이나 저장 연산 전에 자동으로 확장합니다
Version 2.619.0
Changed
- 로드된 AcroForm 필드, qualified 이름, 위젯, 주석, 페이지가 이제 역방향 주석 조회, 위젯별 페이지 조회, 활동 텔레메트리, raw 객체 그래프 편집을 위한 명시적 무효화, mutation 세이프 자동 유지보수를 갖춘 lazy 양방향 관계 캐시를 공유합니다
Version 2.618.0
Changed
- page-object 조회가 이제 객체 번호와 해석된 페이지 포인터에 대해 지연 재구축되는 mutation 어웨어 역방향 인덱스를 사용해, 페이지 복사, 아웃라인, named destination, action, 폼, 접근성, 페이지 트리 재조정 전반의 반복적인 페이지 테이블 스캔을 대체하고 유효성·활동 텔레메트리를 노출합니다
Version 2.617.0
Changed
- 렌더링된 문서 비교가 이제 호출자 지정 DPI, RGB·luminance 컬러 허용 오차, changed-pixel 비율과 SSIM 유사 similarity 게이트, 결정적 연결 changed region, 선택적 PNG 차이 오버레이, 명시적 렌더링 진단이 있는 fail-closed 페이지·집계 픽셀 예산을 지원합니다
Version 2.616.0
Changed
- 문서 비교가 이제 결정적 catalog 기반 경로로 indirect 객체 그래프를 순회하고, 명시적 리소스 한도 안에서 값과 스트림을 해시하며, 삽입·삭제·이동·변경을 분류하기 전에 페이지를 정렬하고, 이동된 객체를 추가·제거와 구별하고, 예산 제한 결과를 동일하다고 취급하는 대신 불완전한 비교를 보고합니다
Version 2.615.0
Changed
- 로드 이미지 디코딩이 이제 16개의 캐시 메타데이터 샤드와 키별 정확한 singleflight 조율을 사용하고, 중복 요청에는 하나의 owner 디코드를 유지하면서 독립적인 비용 큰 디코드를 동시에 수행하고, 설정된 바이트·항목 예산을 모든 샤드에 걸쳐 강제하며, 캐시된 디코드 엔트리 포인트와 동시성 텔레메트리를 노출합니다; 네 개의 독립적인 12,000픽셀 JPEG 요청은 네 Win64 워커에서 3.72배 확장되고, 여덟 개의 same-key 요청은 한 번만 디코드합니다
Version 2.614.0
Changed
- 저해상도 grayscale·RGB JPEG 렌더링이 이제 한정된 1/2, 1/4, 1/8 inverse-DCT 스케일을 고르고, 스케일된 스캔라인을 fixed-point 리샘플러로 정확한 대상 비트맵에 곧장 스트리밍하며, 디코드 예산·취소·codec-worker 격리를 유지하고,
GetLastJPEGReducedDecodeInfo를 통해 소스·스케일·대상·스캔라인·메모리 텔레메트리를 노출합니다; 12,000x12,000에서 300x300으로 줄이는 회귀 fixture는 432 MB 소스 래스터를 할당하지 않으면서 풀 디코드보다 24.05배 빠르게 실행됩니다
Version 2.613.0
Changed
- 로드 페이지
/Contents배열이 이제 lazy seekable 연결 스트림을 노출하고, unfiltered 세그먼트를 소스 기반 저장소에 유지하며, 필터된 세그먼트는 한 번에 최대 하나만 디코드하고, 상각 선형 token·바이트 누적을 쓰고, 편집 시 새 세그먼트를 추가하는 방식으로 원본 스트림을 보존하며, 1 GiB 10,000세그먼트 시퀀스를 64 MiB 미만의 추가 작업 메모리로 유지합니다
Version 2.612.0
Changed
- 증분 업데이트가 이제 전체 소스 바이트를 유지하는 대신 소스 파일을 write-locked·file-backed 상태로 두고, sparse xref subsection에서 changed·new·deleted 객체만 방문·출력하며, 원본 prefix를 새 대상으로 스트리밍하고, same-target 저장에는 롤백이 있는 직접 append를 씁니다; 4 GiB 단일 객체 리비전은 128 MiB 안의 추가 작업 메모리를 유지합니다
Version 2.611.0
Added
- 32 MiB·128항목 LRU 한도, 페이지·로드 텍스트 추출·SVG 내보내기·텍스트 대체 전반의 singleflight 파싱 재사용,
GetLoadedFontDecoder의 독립 deep-copy 결과, 설정 가능한 메모리 예산·텔레메트리 API, 자동 graph·page·reload·JSON Patch·CMap 구성 무효화를 갖춘 한정된 문서 범위 로드 글꼴 디코더 캐시를 추가했습니다; 하나의 공유 indirect 글꼴을 반복 사용하면 유지되는 동안 encoding, widths,ToUnicode,CIDToGIDMap, descendant 매핑을 한 번만 파싱합니다
Version 2.610.0
Changed
- 선형이면서 정확히 리사이즈되던 foreign-object 조회 배열을 소스 문서·객체 번호·generation으로 키잉되는 연산 범위 power-of-two open-addressed 맵으로 대체해 페이지 가져오기와 객체 grafting을 가속했습니다; 공유 indirect 객체와 순환 그래프는 배치 가져오기 전반에서 기존 identity 시맨틱을 유지하고, 큰 객체 그래프는 이제 상각 상수 시간 등록과 기대 상수 시간 조회를 씁니다
Version 2.609.0
Changed
- SVG 페이지 내보내기 충실도를 개선했습니다: 직접
w,J,j,M,dgraphics-state 연산자가 이제 선 두께, 이름 있는 cap·join 스타일, miter 한도, dash 배열·dash phase를 보존합니다;q/Q가 중첩 콘텐츠와 Form XObject 전반에서 이 속성들을 복원합니다; even-oddf*,B*,b*페인트 연산자는fill-rule="evenodd"를 출력합니다; zero-width PDF 헤어라인은 non-scaling SVG stroke로 계속 보입니다
Version 2.608.0
Added
- QuickJS 정적 링킹 인프라를 추가했습니다:
Lib/HPDFQuickJSStatic.pas는{'$L'}지시문을 통해 다섯 개의 QuickJS OMF 객체(패치된 소스를 bcc32c로 빌드)를 링크해 DLL 의존성을 없애고, 전체 C runtime 서피스(47개 심벌: msvcrt C99 수학, Borland 64비트 산술, size 중립 atomic 스텁, pthread 스텁)를 선언합니다;thirdparty/QuickJS/build-static.bat이 patch-and-compile 파이프라인을 자동화합니다. 알려진 제한:JS_NewRuntime은 성공하지만_Atomic제거가 구조체 초기화 순서를 바꾸기 때문에JS_NewContext에서 access violation이 납니다; v2.607.0의 DLL 빌드가 여전히 동작하는 평가 경로입니다
Version 2.607.0
Added
- DataMatrix 2D 바코드 생성을 추가했습니다(
Lib/HPDFDataMatrix.pas): digit-pair 압축이 있는 ASCII 모드 인코딩, DataMatrix 원시 다항식 $12D 위의 GF(256) Reed-Solomon ECC, 10x10에서 144x144까지 정방형 크기, 교대 방향 codeword 배치, L자형 finder pattern;THPDFPage.DrawDataMatrix가 인코딩된 매트릭스를 채워진 모듈 정사각형 격자로 렌더링합니다 - PDF417 스택형 2D 바코드 생성을 추가했습니다(
Lib/HPDFPDF417.pas): base-30 문자 페어링이 있는 텍스트 모드 인코딩, 원시 다항식 3 위의 GF(929) Reed-Solomon ECC, symbol descriptor 인코딩, start/stop pattern이 있는 행/열 레이아웃;THPDFPage.DrawPDF417이 codeword 매트릭스를 렌더링합니다 - QuickJS JavaScript 엔진 바인딩을 추가했습니다(
Lib/HPDFQuickJS.pas와thirdparty/QuickJS/bin/아래 사전 빌드된 Win32/Win64quickjs.dll): 동적 DLL 로딩, runtime+context 수명 주기, 평가 API 서피스(Eval/EvalInt/EvalFloat);Eval코드 경로는 애플리케이션에 링크될 때 알려진 Win32 시작 크래시가 있으며 후속 조사 대상으로 문서화돼 있습니다 THPDFWriter아키텍처 추출 대상을 추가했습니다(Lib/HPDFWriter.pas): xref 항목 레지스트리(free/used/compressed), 클래식 xref 테이블 직렬화기, 그리고 THotPDF 저장 경로가 점진적으로 위임하는 trailer dictionary 빌더
Version 2.606.0
Added
- HotPDFCLI 명령 두 개를 추가했습니다:
decrypt는 주어진 password로 암호화된 PDF를 로드하고DecryptLoadedDocument로 복호화해 암호화되지 않은 사본을 저장하고(-o출력 경로, 기본값<input>-decrypted.pdf),optimize는CompressLoadedDocument로 모든 스트림을 FlateDecode로 재압축합니다(-o출력 경로, 기본값<input>-optimized.pdf, 암호화된 입력은 거부)
Version 2.605.0
Added
- QR Code 2D 바코드 생성을 추가했습니다: 새
Lib/HPDFQRCode.pas는 완전한 QR 인코더를 구현합니다(숫자·영숫자·바이트 인코딩 모드; GF(256) 위의 Reed-Solomon 오류 정정; 네 EC 레벨 L/M/Q/H 전체를 갖춘 버전 1-40; 페널티 평가가 있는 여덟 마스크 패턴 전부; finder, timing, alignment, format info, version info pattern을 포함한 올바른 모듈 배치).THPDFPage.DrawQRCode메서드는 인코딩된 매트릭스를 채워진 모듈 정사각형 격자로 아무 쓰기 페이지에나 렌더링합니다(포인트 단위ModuleSize, 설정 가능한 EC 레벨·컬러)
Version 2.604.0
Added
- 완전한 MacExpertEncoding 디코드 테이블을 추가했습니다: 128바이트 상위 절반이 이제 expert 글리프(스몰 캐피탈, old-style 숫자, superior/inferior 숫자, 분수, 타이포그래픽 심벌)를 가장 가까운 Unicode 코드포인트나 Private Use Area surrogate로 매핑해, expert 인코딩 Type 1 글꼴을 쓰는 문서에서 깨진 출력을 내던 이전 raw-byte identity fallback을 대체합니다
Version 2.603.0
Fixed
ConcurrentObjStmDecryptionMatchesSerial의 오래된 간헐적 실패를 수정했습니다: 기본 PDF 1.6 버전에서aes256이aes128로 다운그레이드된 뒤FRevision글로벌이 오래됐고,CreateKeys가 legacy/O와/Upassword 해시를 채우지 않는 V5 분기로 잘못 라우팅됐습니다 — 직렬화된 encryption dictionary가 빈 또는 오래된 password 문자열을 싣는 바람에 파일이 열리지 않았습니다. 수정은 setter와 두 version-negotiation 지점에서 다운그레이드된FCryptKeyType으로FRevision을 다시 도출하고, legacy dictionary 분기는 password 문자열이 정확히 32바이트가 아니면 명확한 진단을 raise합니다
Added
- HotPDFCLI
html명령을 추가했습니다: 제한된 HTML 파일(h1-h6, p, ul, ol, hr, 인라인 마크업)을HPDFRenderHTMLDocument로 PDF에 렌더링합니다
Version 2.602.0
Added
- 블록 수준 HTML 가져오기를 추가했습니다:
THPDFHTMLImporter(와HPDFRenderHTMLDocument편의 래퍼)가 제한된 HTML 서브셋을 쓰기 문서에 렌더링합니다 — 레벨별 크기가 있는h1-h6헤딩,p단락(맨 몸통 텍스트는 암시적 단락이 됨), 들여쓰기된li항목이 있는ul/ol리스트(불릿 또는1.번호),hr구분선, 아래쪽 여백에서의 자동 페이지 나눔, 닫히지 않은p/li블록에 대한 브라우저 스타일 복구;head/script/style영역은 건너뛰고 컨테이너 태그는 투명하게 통과합니다. 인라인 마크업(b/i/u/font/a/sub/sup, entity, word wrap)은 기존TextOutHTML렌더러에 위임되므로 블록은 페이지 안에서 keep-together됩니다; 테이블, 이미지, CSS, 중첩 리스트는 범위 밖입니다
Version 2.601.0
Added
- HotPDFCLI 명령 세 개를 추가했습니다:
merge는 추가 입력의 모든 페이지를 첫 문서에 붙이고 합쳐진 파일을 저장하고(-o출력 경로, 최소 두 입력, 출력/입력 충돌 가드),split은 문서에서 선택한 각 페이지를 자체 단일 페이지 파일로 쓰고(<prefix>-page<N>.pdf, 1 기반--pages범위, 입력 경로에서 기본 prefix),export-svg는 선택한 각 페이지의 SVG 내보내기를 씁니다(<prefix>-page<N>.svg, 기본 페이지 1)
Version 2.600.0
Added
- SVG 페이지 내보내기를 추가했습니다:
BuildLoadedPageSVG는 아무 로드 페이지에 대한 독립형 SVG 1.1 문서를 반환하고SaveLoadedPageAsSVG가 디스크에 씁니다; 경로(DeviceRGB 컬러의 fill/stroke/fill-and-stroke 페인트 연산자), 텍스트 런(텍스트 추출과 같은 font-decode fallback 체인을 쓰는 문자별 위치 지정<text>요소, Tf/Tc/Tw/Tz/Ts와 회전·스케일을 포함한 텍스트 매트릭스 준수), 이미지 XObject(CTM 단위 정사각형으로 매핑되는 base64 PNG data URI로 디코딩·임베드), Form XObject(form matrix와 자체 /Resources로 재귀 해석)가 내보내지고, /Rotate 90/180/270 페이지는 회전된 캔버스 지오메트리로 내보내집니다 - 공유 content-stream 디바이스 디스패처에서 물려받은 알려진 한계: W/W* 클리핑 없음,
shshading 없음, Type 3 글꼴 없음, 인라인 이미지는 메타데이터만 보고하며, ExtGState 지원 stroke 파라미터(LW/LC/LJ/ca/CA)는 준수하지만 plainw/J/j/d연산자는 디스패치되지 않습니다
Version 2.599.0
Added
- HotPDFCLI 커맨드라인 도구를 추가했습니다(
tools/HotPDFCLI): 세 명령을 갖춘 콘솔 프론트 엔드 —info(PDF 버전, 페이지 수·첫 페이지 크기, 암호화 방식, linearization·xref 구조, 주석/글꼴/이미지/폼/서명 카운터, Info 메타데이터),extract-text(1 기반--pages범위,--out파일 출력, 시각적 읽기 순서에 맞는--layout모노스페이스 그리드 모드),verify(서명 필드별 상태, 서명자, 사유, 해시, 서명 시각, 문서 전체 커버리지·인증서 상태, 서명이 하나라도 실패하면 non-zero exit);Build-HotPDFCLI.bat가 Win32·Win64 바이너리를 만듭니다
Version 2.598.0
Added
SetRenditionMediaPlayParameters를 추가했습니다: media rendition의/Pmedia play parameters dictionary를 붙이거나 갱신하며, 볼륨 퍼센트, 컨트롤러 가시성, autoplay 플래그, fit 모드(meet/slice/fill/scroll/hidden), 반복 횟수, intrinsic·infinity·명시적 timespan duration을 담는 must-honour/MH또는 best-effort/BE대상을 갖춥니다SetRenditionMediaScreenParameters를 추가했습니다: media rendition의/SPmedia screen parameters dictionary를 붙이거나 갱신합니다(window 타입 floating/full-screen/hidden/screen-annotation rectangle, DeviceRGB 배경 컬러, 배경 불투명도, 모니터 인덱스)SetSoundAnnotationParameters를 추가했습니다: Sound 주석/Sound스트림의 샘플 포맷을 하드코딩된 22050 Hz 스테레오 16비트 Signed 기본값 너머로 다시 쓰고(rate, channels, bits per sample, Raw/Signed/muLaw/ALaw 인코딩), Speaker·Mic 같은/Name아이콘을 설정합니다
Version 2.597.0
Added
SetMovieAnnotationParameters를 추가했습니다:AddMovieAnnotation이 하드코딩된 기본값으로 만든 movie 주석의/Moviedictionary(aspect pair, 회전 0/90/180/270, 초 단위 duration, poster 가시성)를 재정의합니다SetRichMediaPresentation을 추가했습니다: RichMedia 주석의/RichMediaSettingsactivation·deactivation·presentation dictionary를 채웁니다(POpage-open 같은 condition 이름, toolbar / navigation UI / context click / transparency 플래그); 빈 condition 이름은 해당 dictionary를 생략합니다THotPDF에ResolveIndirectObject를 추가했습니다: 작성 측이 쓰기 dictionary 안에 저장하는 indirect 참조를 해석해 호출자가 새로 빌드된 객체 트리를 탐색할 수 있게 합니다;AddRichMediaAnnotation은 이제 자기 주석을LastAnnotation에 등록합니다
Version 2.596.0
Added
- live revocation evidence discovery를 추가했습니다: 인증서 파서가 이제 AIA OCSP responder와 CRLDistributionPoints URI 확장을 읽고,
HPDFExtractCertificateRevocationURLs가 인증서별로 노출하며,HPDFCollectCMSRevocationRequests가 이를 evidence 요청으로 바꿉니다(배포 지점별 GET pkix-crl, 인증서와 발급자로부터 만든 최소 RFC 6960 SHA-256 CertID 본문을 담은 POST ocsp-request, 자기 서명 인증서는 자기 발급자로 해석) HPDFValidateCMSCertificatePathOnline을 추가했습니다: 이 요청들을 모아 기존 retry/worker 메커니즘 위에서 호출자가 제공한 transport로 실행하고(라이브러리는 소켓을 열지 않음), 가져온 모든 OCSP 응답과 CRL을 오프라인 검증기에 넣깁니다; 실패한 fetch는 오프라인 evidence 시맨틱으로 강등됩니다
Version 2.595.0
Added
- JBIG2 halftone region 디코딩을 추가했습니다(segment type 22/23): MMR 또는 arithmetic collective 비트맵이 있는 pattern dictionary(type 16), MMR(바이트 정렬 체인 플레인)과 arithmetic 형태(하나의 공유 MQ 디코더) 양쪽의 gray-scale 비트평면 스택, 8.8 fixed-point 벡터와 선택적 HSKIP 빈 맵이 있는 grid 배치
- JBIG2 독립 generic-refinement region을 추가했습니다(type 42/43, TPGRON이 있는 GRTEMPLATE 0/1): 참조된 region 세그먼트나 페이지 버퍼의 보관된 비트맵을 정제합니다
AddPubSecKeyMaterial/ClearPubSecKeyMaterials를 추가했습니다: 기본PubSecKeyMaterial이 맞지 않을 때 모든/Recipientsenvelope에 대해 시도되는 추가 수신자 private key- 새 segment type을 end to end로 다루는 테스트 스트림 빌더
HPDFJBIG2Codec_EncodeHalftoneRegionTestStream과HPDFJBIG2Codec_EncodeStandaloneRefinementTestStream을 추가했습니다
Fixed
- public-key AES-128 문서 로딩을 수정했습니다: pubsec 분할 이후 legacy 객체 패스가
FileKey,StringKeyType,StreamKeyType을 초기화하지 않은 채 남겨 모든 객체가 garbage key로 복호화됐습니다(Win64 로드는 아예 실패; Win32 로드는 조용히 잘못된 평문을 만들었습니다) - 암호화된 문자열 왕복을 수정했습니다: ciphertext는 이제 항상 hex string으로 직렬화됩니다. literal string은 CR, LF, CRLF를 단일 LF로 정규화하고 escape 처리가 임의의 cipher 바이트를 뒤집을 수 있었기 때문입니다
Version 2.594.0
Added
- 사전 정의된 CJK UCS2/UTF16 CMap(
UniJIS-UCS2-H,UniGB-UTF16-V등 15개 더)에 대한 내장 identity 근사를 추가했습니다: 디스크에 CMap 리소스가 없을 때HPDFLoadStandardCMapFile이 내장 테이블로 답하므로, Type0 텍스트 추출이 더 이상 2바이트 코드를 한 바이트씩 디코드하지 않습니다 - 사용자 제공 JBIG2 Huffman 테이블을 추가했습니다(segment type 53, Annex B.2 descriptor 형태): 네이티브 디코더가 테이블 세그먼트를 파싱하고 symbol-dictionary SDHUFFDH/SDHUFFDW/SDHUFFBMSIZE/SDHUFFAGGINST와 text-region SBHUFFFS/DS/DT/RDW/RDH/RDX/RDY/RDSIZE 셀렉터 값 3이 참조된 세그먼트에서 해석합니다
SetStructureClassMapEntry를 추가했습니다: 클래스 이름의 공유 attribute dictionary를 StructTreeRoot/ClassMap에 등록해SetStructureElementClass/C API를 완성합니다
Fixed
- public-key 다중 수신자 키 복구를 수정했습니다:
/Recipientsenvelope이 항목 전반에 하나의 버퍼를 alias하는 카운트 없는 리스트에 저장돼, 수신자가 둘 이상인 문서가 모든 cipher에 대해 잘못된 파일 키를 도출했습니다; envelope은 이제 소유된 사본이고 legacy SHA-1 경로는 AES-256 경로처럼 pristine envelope 바이트를 해시합니다
Version 2.593.0
Added
- Shading Type 1(function-based) 렌더링을 추가했습니다: 도메인 사각형의 보이는 부분이 컬러 오류 기반 quadtree로 세분되고 각 리프 셀은 2입력 함수에서 샘플링한 정점 컬러로 두 개의 그라디언트 삼각형으로 칠해져, 이전 "not sampled" fallback 진단을 대체합니다
- 관대한 2입력 함수 평가를 추가했습니다: 입력을 하나만 선언하는 함수는 실패하는 대신
f(x)(두 번째 도메인 좌표에서 상수)로 강등되어, Type 1 shading 뒤의 sampled·exponential 함수도 여전히 칠해집니다
Version 2.592.0
Added
- object-stream quarantine을 추가했습니다: 손상된
/Type /ObjStm컨테이너가 사유(THPDFObjStmQuarantineReason: not a stream, bad dictionary, bad header, bad stream size, decrypt failed, decompress failed,/Firstout of range, header unparsable, container exception), 진단 한 줄, 미해결로 남긴 멤버 객체 번호와 함께 기록되고, 독립적인 컨테이너는 계속 로드됩니다 - 멤버 수준 quarantine(
osqrMemberUnparsable)을 추가했습니다: 성공적으로 디코딩된 컨테이너에서 파싱에 실패한 멤버 본문은 형제에 영향을 주지 않고 한 번 기록되고,GetLoadedQuarantinedObjStmCount/GetLoadedQuarantinedObjStmInfo가 모든 레코드를 노출합니다; quarantine 레코드는 한 번의 로드에 대한 복구 재시도를 살아남고, 컨테이너별로 중복 제거되며, 다음 로드 진입 때 지워집니다