Skip to content

Releases: ohah/pdf

v0.2.1

Choose a tag to compare

@ohah ohah released this 22 Sep 04:17

글자 뽑기 결함 아홉 — 무작위 실문서 100편(arXiv 1996~2026·한국 정부/한은/KDI·IRS·RFC·ECMA·NIST·EU 관보·UN·일본 백서·CTAN)에서 pymupdf·pdf.js 와 맞대 잡았다. 재현율 0.951 → 0.992, 자리 일치 0.926 → 0.988 (docs/compare.md).

  • 객체 스트림이 원본보다 크게 풀리는 문서(IRS 설명서·arXiv pikepdf)를 못 열던 것 — 펼칠 자리를 알리고 다시 잡는다
  • 쪽 내용이 4배 넘게 풀리면 글자까지 백지가 되던 것
  • /MediaBox·/CropBox 가 딴 객체(arXiv GenPDF)면 A4 가 Letter 로 읽혀 자리가 50pt 어긋나던 것
  • 폼 XObject 의 글꼴이 쪽 글꼴과 같은 이름(InDesign)이면 글자가 깨지던 것 — 자원 범위로 고른다
  • 2MB 넘는 폼이 잘리고 잘린 q 가 배율을 새게 하던 것
  • CropBox 밖 워터마크·세로쓰기 책등이 text() 에 딸려 나오던 것
  • 두 단 골을 여백 탭 앞 빈 띠로 잘못 고르던 것, 겹쳐 찍힌 다른 크기 글이 끼어들던 것
  • 글자 곳간 창이 메모리 끝을 넘겨 터지던 것
npm i @ohah/pdf@0.2.1

v0.2.0

Choose a tag to compare

@ohah ohah released this 21 Sep 09:22

PDF → Markdown/JSON — LLM 에 먹이는 꼴로. https://www.npmjs.com/package/@ohah/pdf

npm i @ohah/pdf

새로 들어간 것

  • pdf.markdown({ pages? }) · pdf.blocks({ pages? }) — 제목 계층·문단(하이픈 잇기)·목록·코드·표·머리말/꼬리말 버림·두 단 순서. blocks 는 같은 덩이에 쪽 번호와 자리(pt)가 붙은 JSON. 워커 창구를 직접 쓰는 앱은 markdownOf/blocksOf/structTree.
  • 태그 PDF(Word·InDesign·PDF/UA)는 구조 나무를 그대로 따른다 — H1~H6·P·L/LI·Table·Code·Figure 대체 글, /Artifact 버림, /RoleMap 해석. 글자 조각(lines())에 mcid 가 붙는다.
  • 괘선 없는 표(같은 자리에서 끊기는 칸이 세 줄 넘게 이어지고 칸의 반이 숫자).
  • 글자 뽑기를 pdf.js 수준으로: 조각 폭·틈으로 띄어쓰기, 합자 풀기, ToUnicode 여러 글자 목적지, 내장 인코딩, 장치 좌표.

고친 것

  • /DescendantFonts 배열 객체(InDesign)·/W 참조(Word)를 못 따라가 모든 글자가 1000 폭이 되던 것 — 줄 뒤쪽 글자가 쪽 밖으로 밀려 사라졌다.
  • q…Q 안의 Tc 가 밖으로 새던 것.
  • 큰 암호 문서 여는 데 56초 → 90ms.
  • 구조 나무 잎을 자리 안 늘리고 담아 역할 이름이 깨지던 것.

정답 벤치 115/115(docling 95/102, pymupdf4llm 51/102). 정답 밖 27편에서 docling 과 제목 일치 278 (docling 만 141, 우리만 91), 표 73(docling 54). 자세한 것은 docs/compare.md.

v0.1.0

Choose a tag to compare

@ohah ohah released this 20 Sep 12:16

첫 npm 출시 — https://www.npmjs.com/package/@ohah/pdf

```
npm i @ohah/pdf
```

Zig → wasm(321KB) PDF 엔진. 읽기·그리기·글자층·검색·양식 채우기·주석·서명 확인·암호·병합·XFA. 바닐라·React·Vue·Svelte.

이 판에 들어간 것: 라디오 묶음 배타, 겉모습 없는 주석(네모·동그라미·선·잉크·형광펜·밑줄·취소선·물결·다각형·꺾은선·글상자·위젯 틀), /Interpolate·/Matte, 세로쓰기 /W2·/DW2, 입력 칸 틀 /MK·/BS, 목록 /TI.

지원 범위: docs/support.md · pdf.js 와 맞댄 결과: docs/compare.md