Files
obsidian-vault/personal/how-to/oreilly-book-to-ipad-pdf.md
T
2026-10-15 09:50:58 +00:00

4.6 KiB
Executable File

title, created, updated, tags
title created updated tags
O'Reilly book to iPad PDF 2026-10-10 2026-10-10
automation
oreilly
pdf
ipad
chrome

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

  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:
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 пересоздаёт копию профиля.