samples: 한글2022 PDF 변환본 추가 (pdf/)#670
Conversation
samples/ 폴더의 HWP/HWPX 파일을 한글2022에서 PDF로 저장한 결과물. SVG 출력과의 정합성 비교(픽셀 차이)에 사용한다.
추가 요청같은 목적
제안 파일명 규약
또는 동일 폴더에 접미어로만 구분하는 것도 가능합니다 ( 변환 스크립트현재 PR에 포함된 |
|
와우! 고생하셨습니다. |
한글2022 PDF 자동 변환 방법 상세본 PR의 PDF 결과물 생성에 사용한 자동화 절차를 기록합니다. 한글 2010/2020 추가 변환 작업도 동일한 패턴을 재사용할 수 있습니다. 1. 환경 구성1.1 Python + pyhwpx 설치한글 COM 자동화 시 매 파일마다 뜨는 "외부 프로그램에서 호출되었습니다" 보안 다이얼로그를 차단하려면, ```powershell 설치 후 DLL 위치: 1.2 보안 모듈 레지스트리 등록```powershell 이 등록 이후 COM 코드에서 `hwp.RegisterModule('FilePathCheckDLL', 'FilePathCheckerModule')` 호출이 True를 반환하면 다이얼로그가 더 이상 뜨지 않습니다 (False 반환 시 등록 실패). 2. PDF 변환 핵심 코드 (모아찍기 차단)PDF 저장은 `IHwpObject.SaveAs(path, "PDF", "")` 직접 호출 대신, `FileSaveAs_S` 액션 + `Attributes = 0` 패턴을 사용합니다 (pyhwpx 1.7.2 `save_as` 메서드와 동일). 이 패턴이 한글의 PDF 저장 다이얼로그 기본값(1-up)을 강제하므로, 시스템 환경설정에 모아찍기가 설정되어 있어도 1페이지/장으로 출력됩니다. ```powershell $null = $hwp.Open($srcPath, '', '') $pset = $hwp.HParameterSet.HFileOpenSave fallback (FileSaveAs_S 실패 시)if (-not $ok) { $ok = $hwp.SaveAs($outPath, 'PDF', '') } $hwp.XHwpDocuments.Item(0).Close($false) 검증: 변환된 PDF의 MediaBox 크기가 원본 한글 페이지 설정과 일치하는지 `pypdf` 등으로 확인 (예: A4 595×841pt, A4 가로 841×595pt). 3. 크래시 복구 (자동) —
|
| 항목 | 값 |
|---|---|
| 총 입력 (samples 재귀) | 207개 (.hwp + .hwpx) |
| 성공 | 199 (96.1%) |
| 실패 | 8 (3.9%) |
| 크래시 자동 복구 | 3건 |
| Watchdog 강제 종료 | 0건 (스크립트 자체 복구로 충분) |
| 평균 변환 시간 | ~3.5초/파일 (hang 시간 제외) |
| 총 소요 시간 | ~15분 |
실패 8개 파일
| 파일 | 추정 원인 |
|---|---|
| `20250130-hongbo_saved.hwp` | 한글 크래시 (RPC 0x800706BE) |
| `20250130-hongbo-no.hwp` | 직후 SaveAs False |
| `basic\calendar_monthly.hwp` | 8분 hang |
| `honbo-save.hwp` | 한글 크래시 |
| `hwp_table_test_saved.hwp` | 한글 크래시 |
| `hwp-3.0-HWPML.hwp` | HWPML 형식, SaveAs 실패 |
| `hwpers_test4_complex_table.hwp` | 복잡한 테이블, 크래시 |
| `hwpspec.hwp` | 한글 스펙 문서, 크래시 |
공통적으로 `_saved`, `-no`, 저장본/스펙 파일이며, 이전에 비정상 저장됐거나 특수 컨트롤이 들어있는 케이스로 추정됩니다.
6. 한글 2010 / 2020 추가 변환 시 참고
- COM ProgID는 동일 (`HWPFrame.HwpObject`) — 한 시스템에 여러 한글이 설치되어 있어도 마지막에 등록된 버전 1개만 활성화됩니다. 따라서 한글 2010/2020/2022 변환은 각 버전을 단독 설치한 환경에서 순차로 진행하거나, 가상 머신/별도 사용자 계정으로 분리해야 합니다.
- `FilePathCheckerModule.dll` 등록은 한글 버전 무관하게 동일하게 작동합니다 (레지스트리 키 동일).
- `FileSaveAs_S` 액션의 `Attributes` 매개변수는 한글 버전 간 호환되지만, 일부 옵션(예: PDF/A 모드, 보안 설정 등)은 버전별 차이가 있을 수 있어 변환 후 첫 1~2개 파일을 시각 확인 권장.
7. 참고 파일
- `pdf/_convert.ps1` — 변환 본 스크립트 (크래시 복구 포함)
- `pdf/_watchdog.ps1` — hang 감지 watchdog
- `pdf/_convert.log` — 본 변환 실행 전체 로그 (재현/디버깅 참고용)
본 commit 은 PR #670 cherry-pick (한글 2022 PDF 199 + 변환 자동화 스크립트) 후 본 환경 정합 보강 영역: CLAUDE.md 갱신: - 예제 폴더 영역: pdf/ (한글 2022, PR #670) + pdf-2020/ (예정) + pdf-2010/ (예정) 명시 - PDF 권위 자료 명명 규약 표 — pdf/{stem}-2022.pdf / pdf-2020/{stem}-2020.pdf / pdf-2010/{stem}-2010.pdf - PDF 권위 등급 영역 — 컨트리뷰터 환경별 (Windows 한컴 편집기 1차 / macOS·Linux 한글 2020·2022 PDF 1차 / 한글 2010 등급 미달 / 한컴 뷰어·외부 변환 정답지 아님) pdf/README.md 신규 작성: - 폴더 구조 + 명명 규약 - 권위 등급 영역 (컨트리뷰터 환경별) - 변환 자동화 스크립트 영역 (pyhwpx + FilePathCheckerModule.dll + FileSaveAs_S 패턴) - 한글 2010 / 2020 추가 변환 시 참고 영역 - PR #670 변환 결과 통계 + 실패 8건 영역 본 영역의 본질: - macOS / Linux 컨트리뷰터 영역의 권위 정답지 영역 명시 (한컴 편집기 영역 부재 환경에서 한글 2020/2022 PDF 가 정답지 영역 가능) - 향후 외부 컨트리뷰터 다양성 인프라 영역 강화 (project_dtp_identity 영역 정합) - 명명 규약 + 폴더 구조 영역의 일관 영역 (한글 2010 / 2020 추가 변환 시 정합 영역) 본 환경 결정적 검증: - cargo test --lib --release: 1155 passed (회귀 0, PDF binary 만 추가 영역으로 영향 없음 확인) - cargo clippy --lib -- -D warnings: 0 - cargo build --release: 통과
PR #670 처리 결과cherry-pick 머지 완료 ( 본 환경 결정적 검증 (PDF binary 만 추가, src 영역 영향 0)
본 환경 정합 보강 영역 (후속 commit
|
PR #670 (한글 2022 PDF 변환본 199 + 변환 자동화 스크립트) 처리 완료 후속 영역: - mydocs/pr/archives/pr_670_review.md (1차 검토 + 옵션 분석 + 본 환경 정합 영역 점검) - mydocs/pr/archives/pr_670_report.md (처리 결과 + 메모리 룰 갱신 + 본 환경 정합 보강 영역) - mydocs/orders/20260507.md PR #670 entry 추가 처리 결과 요약: - 옵션 D 변형: cherry-pick (`69a7078`) + 본 환경 정합 보강 commit (`12aa99c`) - 본 환경 정합 보강: - pdf/README.md 신규 작성 (폴더 구조 + 명명 규약 + 권위 등급 + 변환 자동화 스크립트) - CLAUDE.md 갱신 (PDF 권위 자료 명명 규약 + 권위 등급 컨트리뷰터 환경별) - 메모리 룰 영역 갱신: - reference_authoritative_hancom — 컨트리뷰터 환경별 권위 영역 분리 - feedback_pdf_not_authoritative — PDF 정답지 등급 영역 분리 (한글 2020/2022 정답지 / 2010 등급 미달) - 본 환경 결정적 검증: cargo test 1155 passed (회귀 0, PDF binary 만 추가) / clippy 0 - devel merge + push (9216781..12aa99c) - PR #670 close + 한글 댓글 등록 (한글 2020 추가 변환 환영 + 한글 2010 정답지 등급 미달 영역 분리) 본 영역의 본질 영역: - 작업지시자 통찰: "맥과 리눅스에서 개발하는 컨트리뷰터의 경우 PDF 가 오히려 더 정확" - 외부 컨트리뷰터 다양성 인프라 영역 (project_dtp_identity 영역 강화) - 향후 컨트리뷰터 증가 시 한컴 프로그램 부재 환경 영역에서 기여 가능 영역 확보
PR #632 (Task #631 HWP 권위값 더블체크로 vpos-reset 인접 line 보존) 처리 완료 후속 영역: - mydocs/pr/archives/pr_632_review.md (1차 검토 + 옵션 분석 + cherry-pick simulation + 권위 영역 직접 측정) - mydocs/pr/archives/pr_632_report.md (처리 결과 + 결정적 검증 + 권위 영역 100% 일치 + Task #332 stage4b 종결) - mydocs/orders/20260507.md PR #632 entry 추가 처리 결과 요약: - 옵션 B: 5 commits cherry-pick (samples/aift.pdf 영역 제외, 본 환경 PR #670 pdf/aift-2022.pdf 영역 정합) - mydocs/orders/20260506.md add/add 충돌 → ours 영역 본 환경 보존 (PR #622/#627 패턴) - devel commits: 51c22a6 Stage 1 + 7127ded Stage 2 구현계획 + 5fdc096 Stage 2 정정 + e415f62 Stage 3 + e098562 Stage 4 (author Jaeook Ryu 보존) - cargo test --lib 1156 passed / svg_snapshot 7/7 / issue_546/554/418/501 통과 / clippy 0 - WASM 4,577,370 bytes (PR #627 baseline -1,381) - 권위 영역 100% 일치: page 18 pi=222 lines=0..2 + page 19 pi=222 lines=2..4 + [vpos-reset@line2] 마커 - 시각 판정 영역 스킵 (작업지시자 결정) — 결정적 검증 + 권위 영역 100% 일치 + 광범위 sweep 회귀 0 통과 - PR #632 close + Issue #631 수동 close + 한글 댓글 본질 정정의 가치: - HWP 권위값 더블체크 (다음 줄 vertical_pos==0 + 현재 줄 vpos+lh ≤ body_h) — 구조적 가드 영역 (측정 의존 없음) - feedback_hancom_compat_specific_over_general 권위 사례 강화 누적 (PR #621 다중 줄 가드 + PR #622 다단 vpos-reset + 본 PR vpos-reset 인접 line 보존 = 본 사이클의 vpos-reset 영역 권위 사례 누적) - Task #332 stage4b 알려진 회귀 (aift pi=222) 종결 본 사이클 (5/7) PR 처리 누적: 13건
이전 PR #670 (한글 2022 PDF 변환본 추가) 의 6 PDF 가 모아찍기 2-up 또는 1쪽만 인쇄되어 페이지 수 어긋남. 한글 2022 기본 인쇄 (1장/쪽) 로 재출력. PDF 갱신 (PR #670 -> PR #699): - pdf/aift-2022.pdf: 37 -> 74 페이지 (2-up -> 1-up) - pdf/kps-ai-2022.pdf: 39 -> 77 페이지 (2-up -> 1-up) - pdf/hwpx/aift-2022.pdf: 37 -> 74 페이지 (2-up -> 1-up) - pdf/hwp-multi-001-2022.pdf: 5 -> 9 페이지 (2-up -> 1-up) - pdf/KTX-2022.pdf: 14 -> 27 페이지 (2-up -> 1-up) - pdf/basic/shortcut-2022.pdf: 1 -> 7 페이지 (1쪽만 인쇄 -> 전체) 본 환경 rhwp 출력과의 정합 영향: - 정합 회복: hwpx/aift.hwpx (rhwp 74 = PDF 74) + KTX.hwp (rhwp 27 = PDF 27) - 잔존 어긋남 (별개 결함, PR 범위 외): aift.hwp (+3) / kps-ai.hwp (+2) / hwp-multi-001.hwp (+1) / basic/shortcut.hwp (+3) 검증: - pdfinfo 실측: 6 PDF 모두 PR 본문 수치 정합 - cargo test --release: lib 1166 + 통합 ALL GREEN, failed 0 - 코드 무변경 -> 회귀 영향 0 확정 - 시각 판정 게이트 면제 (PDF 권위 자료 갱신, UI 무관) 영향 범위: - 코드 무변경 (소스/테스트/문서 무변경) - 본 환경 rhwp 출력 무변경 - 본 환경 광범위 sweep 의 권위 비교 결과만 합리화 (거짓 어긋남 2건 해소) Co-Authored-By: Jaeook Ryu <jaeook.ryu@gmail.com> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
pdf/에 추가비고
_convert.ps1,_convert.log,_watchdog.ps1: 일괄 변환 스크립트와 로그{원본 stem}-2022.pdf