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