4.6 KiB
title, created, updated, tags
| title | created | updated | tags | |||||
|---|---|---|---|---|---|---|---|---|
| O'Reilly book to iPad PDF | 2026-10-10 | 2026-10-10 |
|
O'Reilly book to iPad PDF
Автоматизация печатает доступную через подписку O'Reilly книгу по главам средствами Chrome, объединяет главы и создаёт PDF для старого iPad.
Расположение
Скрипт:
~/Automation/OReillyPDF/oreilly_book_to_ipad_pdf.mjs
Рабочие файлы при запуске из каталога автоматизации:
~/Automation/OReillyPDF/work/
Готовый PDF:
~/Automation/OReillyPDF/outputs/<имя-книги>.pdf
Проверенный документ Building Agentic AI Systems:
~/Automation/OReillyPDF/outputs/Building-Agentic-AI-Systems-iPad-768x1024.pdf
Что делает workflow
- Локально клонирует профиль Chrome
Default, чтобы использовать существующую авторизацию O'Reilly. - Запускает headless Chrome через Chrome DevTools Protocol.
- Открывает корневую страницу книги и читает верхний уровень оглавления O'Reilly.
- Последовательно открывает каждый раздел верхнего уровня, чтобы O'Reilly отрисовал лениво загружаемые вложенные главы, затем собирает их в правильном порядке без дубликатов.
- Печатает каждую уникальную секцию через движок Chrome; поддерживаются имена страниц
.htmlи.xhtml. - Применяет размер страницы 576×768 pt — это соотношение 768×1024 при 96 DPI.
- Добавляет безопасные поля и правила разрыва страниц, чтобы строки не обрезались по краям.
- Объединяет главы с помощью
pdfunite.
Требования
- macOS;
- Google Chrome;
- авторизация в O'Reilly в профиле Chrome
Default; - Node.js с глобальными
fetchиWebSocket; rsync;- Poppler/
pdfunite:
brew install poppler
Настройка для другой книги
Редактировать скрипт не нужно. Передать URL книги первым аргументом; допускается как корневая страница книги, так и URL отдельной главы .html/.xhtml.
Название книги извлекается из страницы O'Reilly. На его основе автоматически создаётся имя <Book-Title>-iPad-768x1024.pdf.
Число глав и имена файлов указывать не нужно: workflow извлекает уникальные секции из оглавления книги.
Запуск
cd ~/Automation/OReillyPDF
node oreilly_book_to_ipad_pdf.mjs 'https://learning.oreilly.com/library/view/SLUG/BOOK_ID/'
Результат появится в:
~/Automation/OReillyPDF/outputs/
Проверка результата
pdfinfo outputs/Book-Name-iPad-768x1024.pdf | grep -E 'Pages|Page size|File size'
Ожидаемый размер:
Page size: 576 x 768 pts
Диагностика
Подробный stderr Chrome записывается в:
~/Automation/OReillyPDF/work/pdfs/oreilly-book-driver/chrome.log
Workflow не ждёт загрузки всех lazy-изображений страницы перед распознаванием главы: это ранее вызывало ложный Timed out waiting for chapter content. Перед печатью он отдельно подгружает изображения внутри области книги; если отдельное изображение не успело загрузиться, печать продолжается с предупреждением.
Безопасность
Каталог work/chrome-oreilly-driver-profile содержит локальную копию данных профиля Chrome, включая данные авторизации. Не синхронизировать и не публиковать этот каталог. При каждом запуске workflow пересоздаёт копию профиля.