[2026-10-10] eagle: personal/how-to/oreilly-book-to-ipad-pdf.md

This commit is contained in:
Alexey Martemyanov committed 2026-10-10 15:00:48 +06:00
1 parent b62aee8973
commit 2e2890b429
1 file changed
+123
+123
View File
@@ -0,0 +1,123 @@
---
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
```
Первый созданный документ находится здесь:
```text
~/Documents/Codex/2026-10-10/c/outputs/Agentic-GraphRAG-iPad-768x1024.pdf
```
## Что делает workflow
1. Локально клонирует профиль Chrome `Default`, чтобы использовать существующую авторизацию O'Reilly.
2. Запускает headless Chrome через Chrome DevTools Protocol.
3. Находит предисловие и страницы глав.
4. Печатает каждую главу через движок Chrome.
5. Применяет размер страницы 576×768 pt — это соотношение 768×1024 при 96 DPI.
6. Добавляет безопасные поля и правила разрыва страниц, чтобы строки не обрезались по краям.
7. Объединяет главы с помощью `pdfunite`.
## Требования
- macOS;
- Google Chrome;
- авторизация в O'Reilly в профиле Chrome `Default`;
- Node.js с глобальными `fetch` и `WebSocket`;
- `rsync`;
- Poppler/`pdfunite`:
```bash
brew install poppler
```
## Настройка для другой книги
Открыть скрипт:
```bash
cd ~/Automation/OReillyPDF
open -e oreilly_book_to_ipad_pdf.mjs
```
Изменить корневой URL книги:
```js
const BOOK_ROOT = "https://learning.oreilly.com/library/view/SLUG/BOOK_ID/";
```
Изменить имя результата:
```js
const OUTPUT = resolve("outputs/Book-Name-iPad-768x1024.pdf");
```
Указать фактическое число нумерованных глав в массиве `expected`:
```js
Array.from({ length: 8 }, ...)
```
Например, для 12 глав заменить `8` на `12`.
Скрипт ожидает адреса вида `preface01.html`, `ch01.html`, `ch02.html` и так далее.
## Запуск
```bash
cd ~/Automation/OReillyPDF
node oreilly_book_to_ipad_pdf.mjs
```
Результат появится в:
```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
```
## Безопасность
Каталог `work/chrome-oreilly-driver-profile` содержит локальную копию данных профиля Chrome, включая данные авторизации. Не синхронизировать и не публиковать этот каталог. При каждом запуске workflow пересоздаёт копию профиля.