Посібник
i hate pdf - це стіл для PDF, фото і тексту. Ви кладете файли, робите зі сторінками що треба і зберігаєте результат. Усю роботу робить ваш браузер. Нижче - як це працює, що гарантовано і чого гарантувати не можна.
Як це працює
- Перетягніть файли на сторінку або натисніть «Вибрати файли». Підходять PDF, фото (PNG, JPEG, WebP та інші) і текст (TXT, Markdown). Фото і текст одразу стають сторінками.
- Кожна сторінка - картка на столі. Вибирайте картки, повертайте, видаляйте, тягніть на інше місце або в інший файл. Дії для цілого файла стоять у рядку «Файл»: об'єднати, розділити, номери, штамп, стиснути, розпізнати текст, метадані, формат.
- Кожна дія стає кроком у списку праворуч. Крок можна змінити або прибрати - результат перерахується. Ctrl/⌘ Z скасовує останню дію, і так до самого початку.
- Стіл показує результат таким, яким він буде. З оригіналами нічого не стається.
- «Зберегти результат» збирає нові файли і віддає їх як звичайне завантаження.
Щоб замалювати щось, заповнити форму або поставити підпис, відкрийте сторінку: двічі клацніть картку або натисніть Enter.
Немає файла під рукою - натисніть «Спробувати на зразку» на порожньому столі й виберіть зразок. Поруч із ним з'явиться короткий список того, що спробувати; його можна сховати, і для ваших файлів він не показується.
- Велика пачка - 63 сторінки, 12,4 МБ: усе одразу: порожні сторінки, розділення, скани, форма, замалювання, стиснення.
- Скан із телефону - 5 сторінок, 1,3 МБ: повернути перевернуті сторінки, прибрати порожню, розпізнати текст.
- Договір - 10 сторінок, 0,05 МБ: назвати за реквізитами, пронумерувати, поставити штамп.
- Пачка рахунків - 8 сторінок, 0,05 МБ: розділити на вісім рахунків і назвати кожен.
- Анкета - 2 сторінки, 0,03 МБ: заповнити поля, поставити дату й підпис.
- Фото в PDF - 6 сторінок, 1,8 МБ: стиснути шість великих картинок.
- Фото окремими файлами - 6 файлів PNG, 1,8 МБ: зібрати шість картинок в один PDF.
- Особисті дані - 3 сторінки, 0,61 МБ: замалювати текст і скан, перевірити, що під чорним нічого немає.
- English contract - 6 сторінок, 0,06 МБ: двомовний текст: назва, експорт у Word, номери.
Усі імена, компанії, коди, рахунки, телефони й адреси у зразках вигадані: компанії звуться «Демо…», коди ЄДРПОУ починаються з 99, банк не існує. Зразок завантажується з цього ж сайту лише тоді, коли ви його вибрали, і далі працює без мережі.
Що гарантовано і що ні
Гарантовано
- Файли не покидають комп'ютер. Сайт - це набір статичних файлів. Серверного коду, який приймає файли, немає. Перевірити: відкрийте інструменти розробника, вкладку «Мережа», і працюйте. Запити йдуть лише по файли самого сайту: код, шрифти, модель розпізнавання. Жоден запит не несе ваш документ. Або вимкніть мережу після першого відкриття: усе працює далі.
- Оригінал не змінюється. Результат - завжди новий файл.
- Видалена сторінка не лишається у файлі. Результат збирається з нуля з копій потрібних сторінок. Посилання на сторінки, яких у файлі вже немає, обрізаються, а все, на що ніщо не посилається, видаляється.
- Замалювання прибирає дані, а не накриває їх. Деталі - у розділі нижче. Після збереження готовий файл перевіряється, і ви бачите результат перевірки.
- Без акаунтів, куків і аналітики. У браузері зберігається тільки те, що ви самі зберегли: рецепти, тема, підпис (якщо поставили позначку).
Не гарантовано
- Замалювання діє там, де ви його намалювали. Якщо те саме ім'я є на іншій сторінці, у назві файла або в метаданих - це треба прибрати окремо. Для метаданих є крок «Метадані».
- Розмір чорного прямокутника видно. З нього можна оцінити довжину прибраного слова.
- Режим «пікселі» лишає грубу мозаїку. Для справжніх секретів беріть чорний прямокутник.
- Розпізнавання тексту помиляється. Перевіряйте імена, числа й дати.
- Підпис - це картинка. Це не кваліфікований електронний підпис (КЕП) і не замінює його.
- Підказки для документів - це правила, а не знання. Тип, реквізити й назва файла вгадуються з тексту. Перевіряйте.
- Файл із паролем не відкриється. Зніміть пароль у програмі, де файл створили.
Замалювання
Відкрийте сторінку, виберіть «Замалювати» і обведіть ділянку. Під час збереження інструмент робить таке:
- читає вміст сторінки і прибирає з нього кожен символ, що зачіпає ділянку. Решта рядка лишається на своєму місці;
- у картинках під ділянкою перезаписує пікселі чорним і зберігає картинку наново (стара картинка у файл не потрапляє);
- прибирає посилання, коментарі та поля форми, що лежать на ділянці;
- прибирає лінії та фігури, які цілком усередині ділянки (підкреслення, заливка клітинки, текст у кривих);
- шар тексту з розпізнавання (OCR) у цій ділянці не створює;
- малює чорний прямокутник.
Потім іде перевірка. Готовий файл відкривається наново, з нього дістається текст, і жоден символ не має лежати в ділянці. У браузері ділянка ще й малюється без чорного прямокутника: там має бути рівний фон. Результат ви бачите одним рядком: «Перевірено: під 3 замальованими ділянками тексту немає».
Коли сторінка стає картинкою
Деякі сторінки так не розібрати: шрифт без таблиці ширин, вміст у вкладеному блоці, картинка в рідкісному форматі (JBIG2, JPEG 2000, CCITT), помітна графіка під ділянкою. Тоді вся сторінка перетворюється на картинку 200 dpi із зафарбованим місцем. Тексту на такій сторінці вже немає зовсім, і результат каже про це прямо та називає причину. Режим «пікселі» завжди працює так.
Чого перевірка не бачить
Лінії, які лише перетинають ділянку (рамка таблиці), лишаються: це не текст. Якщо під ділянкою лишилося більше ніж 12% непорожніх пікселів, сторінка стає картинкою. Перевірка не шукає той самий текст в інших місцях документа.
Заповнити і підписати
Якщо PDF має поля форми, на відкритій сторінці вони стають полями для введення: текст, позначки, перемикачі, списки. Поля можна лишити редагованими або «закрити»: тоді значення стають частиною сторінки.
Якщо полів немає, поставте текст, дату або позначку будь-де: виберіть інструмент і клацніть на сторінці. Елемент можна пересунути, змінити розмір і прибрати.
Підпис можна намалювати мишею або пальцем, надрукувати або взяти з картинки (білий фон стане прозорим). Він зберігається в браузері, тільки якщо ви поставите позначку «Запам'ятати». Це видимий підпис. Юридичної сили КЕП він не має.
Розпізнавання тексту
Крок «Розпізнати (OCR)» читає текст на сканах і кладе його невидимим шаром поверх картинки: у файлі можна шукати і виділяти текст. Сторінки, де текст уже є, не чіпаються. Формати «текст», Word, Markdown і EPUB самі розпізнають скани.
Рушій і мовна модель (українська й англійська, близько 7,5 МБ) завантажуються з цього ж сайту під час першого розпізнавання, з індикатором. Точніша модель важить близько 25 МБ. Далі все працює без мережі.
Сказати словами
У рядку вгорі можна написати, що зробити: «об'єднай, прибери порожні сторінки, пронумеруй з третьої, стисни для пошти». Розбирає речення звичайна таблиця правил у вашому браузері, українською та англійською. Моделі й мережі тут немає. Спершу ви бачите, як вас зрозуміли, і лише тоді підтверджуєте. Чого інструмент не зрозумів, він показує окремо і не вгадує.
Диктування вимкнене, поки ви його не ввімкнете. Воно користується розпізнаванням мовлення самого браузера. Chrome, Edge і Safari можуть надсилати запис голосу на сервери Google, Microsoft або Apple. Файли при цьому нікуди не йдуть.
Рецепти
Рецепт - це збережений список кроків. Натисніть «Зберегти як рецепт», дайте назву, і наступного разу той самий набір дій виконається одним клацанням на інших файлах. Рецепти живуть у цьому браузері. Рецепт можна зберегти у невеликий файл JSON і передати колезі. Готові рецепти і всі операції - на сторінці «Операції й рецепти».
Без мережі і як програма
Під час першого відкриття браузер зберігає сам сайт: сторінки, код, шрифти та бібліотеки, разом близько 6,5 МБ. Після цього сайт відкривається і працює без мережі. Дані для розпізнавання (7,5 МБ) і розбирач для Word та Markdown (5 МБ) зберігаються під час першого використання.
У Chrome та Edge сайт можна встановити як програму: кнопка «Встановити» в адресному рядку. Така програма вміє відкривати PDF прямо з провідника. У Safari на Mac: «Файл → Додати до Dock».
Клавіші
| Клавіша | Дія |
|---|---|
| ← → ↑ ↓ | рухати курсор по сторінках |
| Пробіл | вибрати сторінку або зняти вибір |
| Shift + стрілки | вибрати кілька поспіль |
| Ctrl/⌘ A, Esc | вибрати всі, зняти вибір |
| R, Shift R | повернути за годинником, проти |
| Delete, D, B, X | видалити, дублювати, порожня сторінка після, вибрані в окремий файл |
| Alt ←, Alt → | пересунути вибрані сторінки |
| Enter | відкрити сторінку; там 1-6 вибирають інструмент |
| M, /, ? | об'єднати, написати дію словами, показати клавіші |
| Ctrl/⌘ Z, Shift Ctrl/⌘ Z | скасувати, повернути |
| Ctrl/⌘ S, Ctrl/⌘ O | зберегти результат, додати файли |
Для скриптів і агентів: window.ihatepdf
Ті самі операції доступні з коду на сторінці. Це зручно для агента, який керує браузером, і для власних скриптів у консолі. Сервера за цим немає: усе виконується в цій вкладці.
// what it can do
ihatepdf.operations() // [{ op, title, about, params: [{ name, type, default, choices }] }]
ihatepdf.recipes() // built-in recipes and the ones saved in this browser
// a sentence -> steps. no model, no network
ihatepdf.parse("merge these, number from page 3")
// { steps: [{ op: "merge", params: {} }, { op: "number", params: { from: 3 } }], unknown: [], notes: [] }
// a plan + files -> files. the desk on the screen is not touched
const { files, report } = await ihatepdf.apply(
[{ op: "merge" }, { op: "delete", params: { pages: "blank" } }, { op: "compress", params: { targetMB: 5 } }],
[fileA, fileB]) // File, Blob, or { name, bytes } / { name, text }
files[0].name; files[0].blob; files[0].size
report.notes // what happened: compressed, pictures, ocr ...
report.redaction // the proof after a redact step
// the desk a person sees
await ihatepdf.desk.addFiles([file])
ihatepdf.desk.addStep("rotate", { pages: "1-2", angle: 90 })
ihatepdf.desk.setPlan({ steps: [{ op: "ocr" }] })
ihatepdf.desk.state() // { files: [{ name, format, pages }], steps: ["..."], errors: [], selected }
await ihatepdf.desk.save() // { files, report } without a download dialog
ihatepdf.desk.undo(); ihatepdf.desk.redo(); ihatepdf.desk.clear()
ihatepdf.samples() // the built-in samples of made-up documents: [{ id, name, pages, bytes, files, actions }]
await ihatepdf.desk.loadSample("invoices") // one of them by id; no id is the big pack, and ihatepdf.sample() says what is on which of its pages
План
План - звичайний JSON: { "steps": [{ "op": "rotate", "params": { "pages": "1-3", "angle": 90 } }] }. Кроки виконуються по черзі. Список операцій з параметрами повертає ihatepdf.operations(); він же показаний на сторінці «Операції й рецепти».
doc- номер файла на столі, з 1. Якщо його немає, крок діє на всі файли.pages-"all","odd","even","blank","first","last","last 3"або діапазони"1-3, 7, 9-".- Координати для
redactіannotate- у пунктах (1/72 дюйма) від лівого верхнього кута сторінки, якою її бачить читач. - Помилка має поле
code, наприкладnoSuchPage,password,empty.
Обмеження
- Дуже великі файли потребують пам'яті. Скан на сотні мегабайт на телефоні може не відкритися.
- Стискання зменшує картинки JPEG і прості растрові. Якщо цього мало для заданого розміру, сторінки стають картинками, і результат про це каже.
- Конвертація у Word, Markdown і EPUB зберігає текст і заголовки, не верстку.
- Після об'єднання, розділення чи видалення сторінок закладки документа не переносяться.
- Заповнена форма з кирилицею важить на ~400 КБ більше: у файл вбудовується шрифт, щоб поля лишалися редагованими.
- Пошкоджений PDF може не відкритися. Сторінка скаже про це і нікуди файл не надішле.