[2026-10-10] eagle: personal/how-to/oreilly-book-to-ipad-pdf.md
This commit is contained in:
1 parent
b62aee8973
commit
2e2890b429
1 file changed
+123
@@ -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 пересоздаёт копию профиля.
|
||||
Reference in new issue
Block a user