i hate pdf Файли не покидають цей комп'ютер

Посібник

i hate pdf - це стіл для PDF, фото і тексту. Ви кладете файли, робите зі сторінками що треба і зберігаєте результат. Усю роботу робить ваш браузер. Нижче - як це працює, що гарантовано і чого гарантувати не можна.

Як це працює

  1. Перетягніть файли на сторінку або натисніть «Вибрати файли». Підходять PDF, фото (PNG, JPEG, WebP та інші) і текст (TXT, Markdown). Фото і текст одразу стають сторінками.
  2. Кожна сторінка - картка на столі. Вибирайте картки, повертайте, видаляйте, тягніть на інше місце або в інший файл. Дії для цілого файла стоять у рядку «Файл»: об'єднати, розділити, номери, штамп, стиснути, розпізнати текст, метадані, формат.
  3. Кожна дія стає кроком у списку праворуч. Крок можна змінити або прибрати - результат перерахується. Ctrl/⌘ Z скасовує останню дію, і так до самого початку.
  4. Стіл показує результат таким, яким він буде. З оригіналами нічого не стається.
  5. «Зберегти результат» збирає нові файли і віддає їх як звичайне завантаження.

Щоб замалювати щось, заповнити форму або поставити підпис, відкрийте сторінку: двічі клацніть картку або натисніть Enter.

Немає файла під рукою - натисніть «Спробувати на зразку» на порожньому столі й виберіть зразок. Поруч із ним з'явиться короткий список того, що спробувати; його можна сховати, і для ваших файлів він не показується.

Усі імена, компанії, коди, рахунки, телефони й адреси у зразках вигадані: компанії звуться «Демо…», коди ЄДРПОУ починаються з 99, банк не існує. Зразок завантажується з цього ж сайту лише тоді, коли ви його вибрали, і далі працює без мережі.

Що гарантовано і що ні

Гарантовано

  • Файли не покидають комп'ютер. Сайт - це набір статичних файлів. Серверного коду, який приймає файли, немає. Перевірити: відкрийте інструменти розробника, вкладку «Мережа», і працюйте. Запити йдуть лише по файли самого сайту: код, шрифти, модель розпізнавання. Жоден запит не несе ваш документ. Або вимкніть мережу після першого відкриття: усе працює далі.
  • Оригінал не змінюється. Результат - завжди новий файл.
  • Видалена сторінка не лишається у файлі. Результат збирається з нуля з копій потрібних сторінок. Посилання на сторінки, яких у файлі вже немає, обрізаються, а все, на що ніщо не посилається, видаляється.
  • Замалювання прибирає дані, а не накриває їх. Деталі - у розділі нижче. Після збереження готовий файл перевіряється, і ви бачите результат перевірки.
  • Без акаунтів, куків і аналітики. У браузері зберігається тільки те, що ви самі зберегли: рецепти, тема, підпис (якщо поставили позначку).

Не гарантовано

  • Замалювання діє там, де ви його намалювали. Якщо те саме ім'я є на іншій сторінці, у назві файла або в метаданих - це треба прибрати окремо. Для метаданих є крок «Метадані».
  • Розмір чорного прямокутника видно. З нього можна оцінити довжину прибраного слова.
  • Режим «пікселі» лишає грубу мозаїку. Для справжніх секретів беріть чорний прямокутник.
  • Розпізнавання тексту помиляється. Перевіряйте імена, числа й дати.
  • Підпис - це картинка. Це не кваліфікований електронний підпис (КЕП) і не замінює його.
  • Підказки для документів - це правила, а не знання. Тип, реквізити й назва файла вгадуються з тексту. Перевіряйте.
  • Файл із паролем не відкриється. Зніміть пароль у програмі, де файл створили.

Замалювання

Відкрийте сторінку, виберіть «Замалювати» і обведіть ділянку. Під час збереження інструмент робить таке:

Потім іде перевірка. Готовий файл відкривається наново, з нього дістається текст, і жоден символ не має лежати в ділянці. У браузері ділянка ще й малюється без чорного прямокутника: там має бути рівний фон. Результат ви бачите одним рядком: «Перевірено: під 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(); він же показаний на сторінці «Операції й рецепти».

Обмеження