v2.1.0 - License Compliance & PDFium Engine Migration
This release replaces the bundled Poppler library (GPL) with pypdfium2 (Apache-2.0 OR BSD-3-Clause) so that Every-PDF is now fully compatible with its MIT license. PDF-to-image conversion has been rewritten on top of Google's PDFium engine, and the macOS / Windows installers no longer ship any GPL-licensed binaries.
๐ ๏ธ Breaking Internals
- Poppler replaced with pypdfium2 in the PDFโimage pipeline:
pdf2image.convert_from_path()has been swapped forpypdfium2.PdfDocument.render(). PDFium is the same engine Chrome uses, so rendering quality and 300 DPI output remain identical. - No more bundled GPL binaries: Approximately 98 MB of Poppler binaries (
pdftoppm,pdftocairo, etc.) have been removed frombackend/src/poppler/. The new engine ships its native library inside the Python wheel. - No external system dependency: Users no longer need Poppler installed on their machine; everything is bundled into the app.
๐ Bug Fixes
- PyInstaller bundling for native dependency hardened: Switched from a bare
--hidden-importto--collect-all pypdfium2 / pypdfium2_rawso thatlibpdfium.dylib/pdfium.dlland the accompanyingversion.jsondata files are collected into the production bundle. Verified end-to-end against a real packaged.app/.exe.
โ๏ธ Code Refinement
- CI release workflow loosened: Changed
npm ciโnpm installinrelease.ymlso that small lockfile drift between local npm and the runner's npm version no longer fails the release pipeline. - Build artifacts no longer tracked: Added
__pycache__/,*.pyc,backend/build/,backend/pdf_processor.spec,.DS_Store, and.omc/to.gitignore, and untracked ~30 previously committed PyInstaller intermediates and Python bytecode files. - Python requirement clarified in docs: README files now state Python 3.10+ as the requirement (the codebase has been using 3.10+ union type syntax for a while; the previous "3.9 or higher" line was misleading).
- License dialog refreshed: Updated the in-app library listing to reflect pypdfium2 instead of pdf2image, and bumped LICENSE copyright year to 2025-2026.
๐ License Notice
Every-PDF v2.1.0 and later are fully MIT-licensed with no GPL dependencies in the distributed binaries. Versions v2.0.x and earlier bundled Poppler (GPL-2/3) inside an MIT-licensed app, which created a license conflict that this release resolves. We strongly recommend upgrading to v2.1.0+ for any new deployments. See issue #15 for context.
๐ Thanks
- Special thanks to @xinyu-391 for reporting the Poppler license conflict in #15.
v2.1.0 - ๋ผ์ด์ผ์ค ์ ํฉ์ฑ ํ๋ณด ๋ฐ PDFium ์์ง ์ ํ
์ด๋ฒ ๋ฆด๋ฆฌ์ฆ๋ ๋ฒ๋ค๋ Poppler ๋ผ์ด๋ธ๋ฌ๋ฆฌ(GPL)๋ฅผ pypdfium2 (Apache-2.0 OR BSD-3-Clause)๋ก ๊ต์ฒดํ์ฌ Every-PDF๊ฐ ์์ ์ MIT ๋ผ์ด์ผ์ค์ ์์ ํ ํธํ๋๋๋ก ์ ๋ฆฌํ ๋ฒ์ ์ ๋๋ค. PDFโ์ด๋ฏธ์ง ๋ณํ์ Google์ PDFium ์์ง ์์์ ์ฌ์์ฑ๋์๊ณ , macOS / Windows ๋ฐฐํฌ๋ฌผ์์ GPL ๋ผ์ด์ผ์ค ๋ฐ์ด๋๋ฆฌ๊ฐ ๋ชจ๋ ์ฌ๋ผ์ก์ต๋๋ค.
๐ ๏ธ ๋ด๋ถ ์์ง ๊ต์ฒด
- PDFโ์ด๋ฏธ์ง ํ์ดํ๋ผ์ธ์์ Poppler๋ฅผ pypdfium2๋ก ๊ต์ฒด:
pdf2image.convert_from_path()๋ฅผpypdfium2.PdfDocument.render()๋ก ๋์ฒดํ์ต๋๋ค. PDFium์ Chrome์ด ์ฌ์ฉํ๋ ์์ง๊ณผ ๋์ผํ๋ฉฐ, 300 DPI ๋ ๋๋ง ํ์ง์ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค. - ๋ฒ๋ค๋ GPL ๋ฐ์ด๋๋ฆฌ ์์ ์ ๊ฑฐ:
backend/src/poppler/์ ํฌํจ๋์ด ์๋ ์ฝ 98 MB ๋ถ๋์ Poppler ๋ฐ์ด๋๋ฆฌ(pdftoppm,pdftocairo๋ฑ)๋ฅผ ์ ๊ฑฐํ์ต๋๋ค. ์ ์์ง์ ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Python wheel ๋ด๋ถ์ ๋๋ดํ๋ฏ๋ก ๋ณ๋ ๋ฐฐํฌ๊ฐ ํ์ ์์ต๋๋ค. - ์ธ๋ถ ์์คํ ์์กด์ฑ ์ ๊ฑฐ: ์ฌ์ฉ์๊ฐ ๋ณ๋๋ก Poppler๋ฅผ ์ค์นํ ํ์๊ฐ ์์ต๋๋ค. ์ฑ ์์์ ๋ชจ๋ ์ฒ๋ฆฌ๊ฐ ๋๋ฉ๋๋ค.
๐ ๋ฒ๊ทธ ์์
- PyInstaller์ ๋ค์ดํฐ๋ธ ์์กด์ฑ ๋ฒ๋ค๋ง ๊ฐํ: ๊ธฐ์กด์ ๋จ์
--hidden-import๋ฐฉ์์--collect-all pypdfium2 / pypdfium2_raw๋ก ๊ต์ฒดํ์ฌlibpdfium.dylib/pdfium.dll๊ณผ ํจ๊ปversion.json๋ฐ์ดํฐ ํ์ผ๊น์ง ๋ฐฐํฌ ๋ฒ๋ค์ ํฌํจ๋๋๋ก ์์ ํ์ต๋๋ค. ์ค์ ํจํค์ง๋.app/.exe๋ฅผ ์ฌ์ฉํด end-to-end ๊ฒ์ฆ์ ๋ง์ณค์ต๋๋ค.
โ๏ธ ์ฝ๋ ๊ฐ์
- CI ๋ฆด๋ฆฌ์ฆ ์ํฌํ๋ก ์ํ:
release.yml์npm ci๋ฅผnpm install๋ก ๋ณ๊ฒฝํ์ฌ ๋ก์ปฌ npm๊ณผ runner์ npm ๋ฒ์ ์ฐจ์ด๋ก ์ธํ ์ฌ์ํ lockfile ๋ถ์ผ์น๊ฐ ๋ฆด๋ฆฌ์ฆ ํ์ดํ๋ผ์ธ์ ๋ง์ง ์๋๋ก ์ ๋ฆฌํ์ต๋๋ค. - ๋น๋ ์ฐ์ถ๋ฌผ ์ถ์ ํด์ :
__pycache__/,*.pyc,backend/build/,backend/pdf_processor.spec,.DS_Store,.omc/๋ฅผ.gitignore์ ์ถ๊ฐํ๊ณ , ์๋ชป ์ถ์ ๋๊ณ ์๋ ์ฝ 30๊ฐ์ PyInstaller ์ค๊ฐ ์ฐ์ถ๋ฌผ๊ณผ Python ๋ฐ์ดํธ์ฝ๋ ํ์ผ์ ์ ๊ฑฐํ์ต๋๋ค. - Python ์๊ตฌ์ฌํญ ํ๊ธฐ ์ ๋ฆฌ: README์ Python ์๊ตฌ ๋ฒ์ ์ v3.10 ์ด์์ผ๋ก ๊ฐฑ์ ํ์ต๋๋ค. (์ฝ๋๋ฒ ์ด์ค๋ ์ด๋ฏธ ํ์ฐธ ์ ๋ถํฐ 3.10+์ union ํ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๊ณ ์์๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ "3.9 ์ด์" ํ๊ธฐ๋ ๋ถ์ ํํ์ต๋๋ค.)
- ๋ผ์ด์ผ์ค ๋ค์ด์ผ๋ก๊ทธ ๊ฐฑ์ : ์ฑ ๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชฉ๋ก์์ pdf2image ๋์ pypdfium2๋ฅผ ํ๊ธฐํ๋๋ก ์์ ํ๊ณ , LICENSE ์ ์๊ถ ์ฐ๋๋ฅผ 2025-2026์ผ๋ก ๊ฐฑ์ ํ์ต๋๋ค.
๐ ๋ผ์ด์ผ์ค ์๋ด
Every-PDF v2.1.0 ์ด์์ ๋ฐฐํฌ ๋ฐ์ด๋๋ฆฌ์ GPL ์์กด์ฑ์ด ์๋ ์์ ํ MIT ๋ผ์ด์ผ์ค ๋ฒ์ ์ ๋๋ค. v2.0.x ์ดํ ๋ฒ์ ์ MIT ๋ผ์ด์ผ์ค๋ก ํ๊ธฐ๋ ์ฑ ์์ Poppler(GPL-2/3) ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฒ๋คํ๊ณ ์์ด ๋ผ์ด์ผ์ค ์ถฉ๋์ด ์กด์ฌํ์ผ๋ฉฐ, ์ด๋ฒ ๋ฆด๋ฆฌ์ฆ๊ฐ ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์๋ก ๋ฐฐํฌํ์๋ ๊ฒฝ์ฐ v2.1.0+ ์ฌ์ฉ์ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค. ์์ธํ ๋งฅ๋ฝ์ ์ด์ #15์ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
๐ ๊ฐ์ฌ
- Poppler ๋ผ์ด์ผ์ค ์ถฉ๋ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ํด์ฃผ์ @xinyu-391๋๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค. (#15)