Навигация по сайту

Популярные статьи

Працюємо з PDF в Linux

  1. редагування PDF

Формат PDF став дуже популярний з розвитком інтернету і поширенням електронної документації, і тим, хто має справу з текстами, доводиться підбирати інструментарій, щоб відкривати файли в цьому форматі і працювати з ними. Прихильникам * nix є з чого вибирати.

PDF-файли досить складні за своєю структурою, вони можуть містити текст, графіку, вкладення, мати стиснення і шифрування, тому сучасні версії формату неможливо прочитати за допомогою стандартних команд Linux, cat, less або звичайного текстового редактора на кшталт vi. Для перегляду і вилучення інформації необхідно використовувати спеціальну програму.

Сам Adobe також випускає версію Adobe Reader для UNIX , Але вона давно не оновлювалася і навряд чи представляє якийсь інтерес. У більшості дистрибутивів Linux за замовчуванням встановлена ​​якась із програм для читання PDF-файлів, тому проблем з цим немає. В Ubuntu і клонах це одна з кращих і в той же час дуже простих програм Evince , Що розробляється в рамках проекту GNOME, але вона відмінно працює і з будь-яким іншим віконним менеджером. Evince підтримує перегляд - PDF, DjVu, TIFF, PostScript, DVI, XPS, SyncTex, Сomics Books (cbr, cbz, cb7, cbt) і презентації в форматі ODP. Відкриває зашифровані документи PDF. Реалізовано пошук по документу, кілька варіантів відображення структури документа (деревоподібна, мініатюри сторінок і інші), що дозволяє швидко знайти потрібну. Для PDF і DVI можна виділити потрібний фрагмент тексту і скопіювати його в буфер обміну, довільний ділянку сторінки зберігається в картинку. Є можливість установки закладок, запуску в режимі презентації і повноекранному, висновок по одній або по дві сторінки, зумінг і поворот сторінки. Кожен документ відкривається в новому вікні; якщо їх багато, це буває незручно. В цілому досить хороший переглядач для PDF-файлів, не сильно потребує ресурсів.

Формат PDF став дуже популярний з розвитком інтернету і поширенням електронної документації, і тим, хто має справу з текстами, доводиться підбирати інструментарій, щоб відкривати файли в цьому форматі і працювати з ними

Evince - простий і зручний переглядач PDF

У репозиторії можна знайти ще кілька альтернатив. Найбільш сучасний з них - універсальний переглядач документів від проекту KDE Okular , Крім PDF підтримує PostScript, DjVu, CHM, XPS, ePub, CHM і деякі інші формати. За функціями він перевершує Evince, більше всяких можливостей по перегляду і навігації, є навіть настройки продуктивності, що дозволяють встановити оптимальний режим виведення документа в залежності від потужності комп'ютера.

Плюс цілий ряд легких переглядачів з мінімальним інтерфейсом, але не поступаються функціонально, - ePDFviewer, XPDF, MuPDF, Zathura і інші. Наприклад, Zathura і MuPDF взагалі не мають кнопок, управляються за допомогою клавіш (всі вони описані в man), а програми важать менше сотні кілобайт і літають навіть при завантаженні великих документів. У Zathura можливо зберегти поточну сторінку в графічний файл або зберегти зображення в буфер обміну.

З графічної середовищем загалом все зрозуміло, але буває, що PDF-файл потрібно прочитати в консолі, а нічого під рукою немає. Тут два варіанти - спеціальний переглядач, який використовує framebuffer, і конвертація файлів в інший формат (текстовий або HTML). Для першого випадку нам знадобиться переглядач зображень через фреймбуфер fbi і один з вьюверов PDF - fbgs (Framebuffer Ghostscript Viewer), який входить до складу пакету fbi або аналогів - FBPDF , JFBPDF . Крім PDF, fbgs підтримує і DjVu. Принцип роботи простий - зі сторінок документа автоматично генерується зображення, яке і виводиться в консоль. Але потрібно врахувати, що працює цей спосіб для реальної консолі, в емуляторі терміналу запуск призведе до помилки. установка:

$ Sudo apt-get install fbi

Для перегляду користувач повинен бути доданий до групи video:

$ Sudo usermod -a -G video user

Тепер можна дивитися:

$ Fbgs file.pdf

Деякий час доведеться почекати, поки будуть згенеровані зображення.

У більшості програм з GUI PDF підтримується за допомогою бібліотеки poppler , Яка, в свою чергу, базується на коді популярного переглядача xpdf. Крім власне бібліотеки, проект пропонує 11 консольних утиліт для роботи з PDF-файлами, які дозволяють конвертувати PDF у всілякі формати (текст, HTML, PPM, PS, PNG, JPEG, SVG) і витягувати заголовок, вкладення, малюнки і шрифти. Конвертери pdftohtml і pdftotext якраз підходять для читання файлів в консолі. В Ubuntu, як правило, ці утиліти вже встановлені. Якщо виконати, не вказавши ім'я вихідного файлу, або вивести на стандартний висновок, то в поточному каталозі буде створено файл з аналогічним ім'ям і розширенням txt або html, який потім можна відкрити в будь-якому редакторі або консольному браузері (наприклад, Links або ELinks). Або просто прочитати:

$ Pdftotext -layout file.pdf - | more

До слова, файловий менеджер Midnight Commander в деяких дистрибутивах дозволяє переглядати PDF-файли. За це відповідає скрипт /usr/lib/mc/ext.d/doc.sh (описується в /etc/mc/mc.ext). Якщо його переглянути, то побачимо, що за замовчуванням файл конвертується в текстовий якраз за допомогою pdftotext і потім виводиться на екран. Хоча можливі й інші варіанти, тому варто заглянути в doc.sh.
Утиліти з poppler покривають майже всі основні формати для конвертування і деякої обробки PDF-файлів. Так, PDF-файли можуть містити вкладення, утиліта pdfdetach дозволяє переглянути їх список і витягти:

$ Pdfdetach -list file.pdf $ pdfdetach -saveall file.pdf

Аналогічно однією командою витягуються зображення.

$ Pdfimages file.pdf images /

Щоб дізнатися інформацію про вбудовані шрифти, слід запустити утиліту pdffonts.
В контексті можна згадати про SWFTools , Що містить кілька конвертерів в формат SWF (Small Web Format), включаючи PDF2SWF. Єдиний момент, що пакет SWFTools в Ubuntu і деяких інших дистрибутивах не включає утиліту pdf2swf, тому її доводиться встановлювати з вихідних:

$ Pdf2swf in.pdf out.swf

В результаті отримано SWF-файл, відкривши який в веб-браузері або програвачі побачимо періодично змінюють один одного сторінки документа. Можна обробити лише частину документа, вказавши номери обраних сторінок за допомогою опції -pages:

$ Pdf2swf --pages 1,3-6 in.pdf out.swf

Якщо не вказати ім'я вихідного файлу, результат потрапить в stdout. Параметр -C дозволяє згенерувати додатковий HTTP-заголовок, що стане в нагоді при розміщенні файлу на веб-сервері.

Ще одна корисна утиліта, яка поширюється під Artistic License, - QPDF являє собою конвертер PDF, що дозволяє проводити різні перетворення: оптимізацію для вебу, шифрування / дешифрування, верифікацію файлів, а також злиття і поділ. З її допомогою також можна створити PDF-файл програмним способом, QPDF бере на себе всі синтаксичне представлення об'єктів, створення перехресних посилань таблиці, шифрування, линеаризацию і інші деталі синтаксису.

При оновленні версії Adobe Extension Level, яке використовується при створенні PDF-файлів в хмарі компанії Adobe, часто перший час неможливо такі файли прочитати на програмах, відмінних від Adobe Reader. Тут як раз і виручає QPDF (і деякі інші утиліти огляду), досить зняти з файлу шифрування, і питання з читанням знімається. Дивимося властивості документа за допомогою pdfinfo з комплекту poppler:

$ Pdfinfo in.pdf | grep -i encrypted Encrypted: yes (print: no copy: no change: no addNotes: no algorithm: AES-256)

Знімаємо шифрування:

$ Qpdf --decrypt in.pdf out.pdf $ pdfinfo in.pdf | grep -i encrypted Encrypted: no

Тепер з читанням проблем точно не буде. Якщо файл захищений паролем, то його слід вказати за допомогою параметра -password.

Якщо файл захищений паролем, то його слід вказати за допомогою параметра -password

Отримуємо інформацію про фото за допомогою pdfinfo

При роботі з PDF дуже часто виникає завдання збірки файлів з частин окремих документів або зміни окремих параметрів, таких як розмір листа або орієнтації (книжкова або альбомна). Нескладні скрипти дозволяють зробити все необхідне буквально однією командою, але для початку слід розібратися з базовими утилітами.

Утиліти pdfseparate і pdfunite з poppler дозволяють витягати окремі сторінки і об'єднувати документи. Причому серед інших описаних далі вони найпростіші у використанні, так як не мають великої кількості опцій, і з їх роботою легко розібратися. Наприклад, витягаємо сторінки з 10-ї по 20-ю і зберігаємо їх в окремий документ:

$ Pdfseparate -f 10 -l 20 file.pdf file-% d.pdf

В імені змінна% d обов'язкове, так як pdfseparate вміє зберігати сторінки тільки в окремі файли. Замість нього буде підставлений номер сторінки, тобто в нашому випадку отримаємо файли з ім'ям file-10.pdf ... file-20.pdf. Якщо все ж потрібен єдиний документ, то на допомогу приходить pdfunite. Зберемо сторінки 10 і 11 в один документ:

$ Pdfunite file-10.pdf file-11.pdf sample.pdf

У QPDF дуже багато параметрів і можливостей, це практично універсальна утиліта для обробки файлів формату PDF, причому багато операцій виконуються однією командою. Наприклад, можемо зберегти в окремий файл потрібні сторінки одного або декількох джерел:

$ Qpdf in.pdf --pages in1.pdf 1-5 in2.pdf 20-31 - out.pdf

В результаті отримаємо файл, зібраний з повного документа in.pdf і зазначених сторінок документів in1.pdf і in2.pdf. Діапазон можна задавати через дефіс або перерахувати сторінки через кому. Можливий і реверс за допомогою конструкції z-№страніци. Додавши параметр -linearize, сгенерируем оптимізовані для інтернету файли. Спеціальний QDF-режим (-qdf) дозволяє створювати PDF-файли, які потім можна редагувати в звичайному текстовому редакторі, тобто без стиснення і шифрування, нормалізований і зі спеціальними позначками. Правда, і розмір такого файлу як мінімум в два рази більше.

Іноді потрібно просто порівняти дві версії PDF-файлу - текст, малюнки, вкладення. Тут допоможуть дві прекрасні утиліти: diffpdf і comparepdf. У найпростішому випадку:

$ Comparepdf file1.pdf file2.pdf

На виході отримаємо відміну. Якщо файли однакові, то команда нічого не видасть (опція «-v 2» зробить її трохи болтливей). Diffpdf є GUI-програму, що дозволяє провести посторінкову звірку документа. У разі відсутності розбіжності, після запуску будуть показані порожні поля.

$ Diffpdf file1.pdf file2.pdf $ Diffpdf file1 Порівняння документів в diffpdf

При необхідності в diffpdf можна задати діапазони перевірки. Це корисно, якщо, наприклад, в документ додана сторінка, а тому посторінкова перевірка після неї точно покаже невідповідність.

Не всім користувачам подобається розбиратися з численними параметрами і експериментувати, деякі вважають за краще просто вибрати потрібні операції в GUI. Немає проблем. PDF-Shuffler - невелике Python-GTK додаток до Python-бібліотеці pyPdf , Що надає всі функції для роботи з PDF: витяг, злиття, обрізку, шифрування / дешифрування та інше. Програма є в репозиторії дистрибутивів:

$ Sudo apt-get install pdfshuffler

Інтерфейс не локалізований, але все, що потрібно після запуску, - це кинути файли у вікно програми, а після того, як будуть відображені всі сторінки документа, за допомогою меню видаляємо, обрізаємо, повертаємо, експортуємо потрібні. Якщо потрібно зробити операцію з кількома сторінками відразу, то просто відзначаємо їх, утримуючи клавішу Ctrl, після чого зберігаємо результат в новий документ. Швидко і дуже зручно. Правда, як бачимо, PDF-Shuffler використовує далеко не всі можливості бібліотеки, немає, наприклад, оптимізації та шифрування / дешифрування, не можна виконувати інші перетворення на зразок зміни розміру листа. Тому повністю консольні утиліти він не замінює. До речі, pyPdf, на якому базується PDF-Shuffler, вже не розвивається і сьогодні в дистрибутивах, буває, заміщається Форком PyPDF2 , Який повністю сумісний з оригіналом плюс містить кілька нових методів.

До речі, pyPdf, на якому базується PDF-Shuffler, вже не розвивається і сьогодні в дистрибутивах, буває, заміщається Форком   PyPDF2   , Який повністю сумісний з оригіналом плюс містить кілька нових методів

PDF-Shuffler дозволяє легко прибрати все зайве з документа

Серед альтернатив PDF-Shuffler можна виділити PDF Mod , Легке, дуже просте у використанні додаток з локалізованим інтерфейсом, яке дозволяє витягати, видаляти сторінки, змінювати їх порядок, повертати, об'єднувати кілька документів, експортувати зображення в обраній сторінці і редагувати інформацію в заголовку документа (назви, ключові слова, автор). Підтримуються закладки. PDF Mod є в репозиторії:

$ Sudo apt-get install pdfmod $ Sudo apt-get install pdfmod   Вікно PDF Mod Вікно PDF Mod

Крос-платформна утиліта PDFsam - PDF Split And Merge , Написана на Java, вміє поєднувати, розрізати і повертати документи PDF. А в режимі burst генерує зі сторінок PDF окремі файли. У репозиторії далеко не остання і дуже глючная версія. Нові релізи вже позбавлені багатьох недоліків, тому краще ставити з офіційного сайту, але доведеться трохи покомпіліровать, так як без оплати розробники пропонують тільки збірку під Win і вихідні тексти.

редагування PDF

PDF сам по собі складний формат, призначений для видавничої продукції, що вимагає спеціальних інструментів для створення та редагування. І * nix-користувачам є з чого вибирати. Створити PDF-документ можна в Open / LibreOffice, а щоб отримати можливість редагування, слід встановити розширення Oracle PDF Import Extension . Крім цього, доступні спеціальні програми - PDFedit , Scribus і Master PDF Editor . Серед них Scribus - дуже потужна програма з безліччю функцій, що вимагає часу на освоєння.

Master PDF Editor - досить простий інструмент, який розповсюджується безкоштовно для некомерційного використання. PDFedit дозволяє проводити будь-які операції по внесенню виправлень у PDF-документи. Засоби дають можливість редагувати текст і графіку, але не дружать з таблицями. Можлива автоматизація за допомогою ECMAScript-скриптів. На жаль, PDFedit, що використовує Qt 3, в поточній версії Ubuntu прибраний через відсутність підтримки пакета libqt3-mt, а спроба установки не завжди вдала. Версія на Qt 4 поки знаходиться в стадії розробки.

В контексті роботи з PDF утиліту PDFtk Сіда Стюарда (Sid Steward) хотілося б виділити особливо. Це навіть не утиліта, а комбайн «все в одному», що дозволяє розділити або об'єднати декілька документів в один, розшифрувати / зашифрувати PDF-файл, додати або видалити вкладення, заповнити форми, відновити пошкоджені документи і багато іншого. Взагалі, розробники пропонують кілька рішень, основа всіх - консольна утиліта PDFtk Server, про яку мова далі. Для користувачів Win розробники пропонують GUI. Плюс доступні ще дві утиліти: GNU Barcode Plus PDF для генерації штрих-коду в PDF-файл і платний STAMPtk, що генерує водяні знаки і колонтитули в PDF-файлі. Пакет PDFtk вже є в репозиторіях дистрибутивів, тому з установкою проблем немає. Разом з командою слід вказати ім'я вхідних і вихідного файлу (підтримується маска), команду і параметри. Всього підтримується 18 команд, всі вони описані в документації. Наведу лише кілька прикладів, достатніх для розуміння суті роботи з PDFtk. Наприклад, команда cat дозволяє об'єднати кілька файлів в третій - outfile.pdf:

$ Pdftk in1.pdf in2.pdf cat output out.pdf

Якщо файлів багато, то простіше зібрати їх в одному каталозі і використовувати маску * .pdf. Окремі сторінки вирізаються просто зазначенням їх номерів після cat:

$ Pdftk in.pdf cat 10-20 output page3.pdf

Причому, якщо файлів декілька, для кожного задаються свої сторінки, при необхідності змінюється орієнтація.

$ Pdftk A = in1.pdf B = in2.pdf cat A1east B2-20even output out.pdf

У прикладі з документа in1.pdf буде залучена перша сторінка, яка буде повернута на 90 градусів. З другого документа витягуються тільки парні сторінки в діапазоні 2-20. Парність можливо вказати як even (парний) або odd (непарний), поворот вказується як north, south, east, west, left, right або down. Останню сторінку документа можна вказати за допомогою ключового слова end. Діапазон вказується або прямо, як в прикладі, або реверсно (наприклад, end-1). Щоб розкласти PDF на сторінки, використовується команда burst.

$ Pdftk in.pdf burst output out% 03d.pdf

В результаті отримаємо кілька документів виду out001.pdf. Іноді потрібно підправити метадані, залишені в PDF-якою іншою програмою. За допомогою PDFtk це зробити легко. Для початку витягаємо вихідні дані:

$ Pdftk in.pdf dump_data output metadata.txt

Тепер відкриваємо і правимо metadata.txt в текстовому редакторі, після чого завантажуємо назад:

$ Pdftk in.pdf update_info metadata.txt output incopy.pdf

Дешифрування PDF, про яку ми говорили вище, справа однієї команди:

$ Pdftk secured.pdf input_pw password output unsecured.pdf

Відновлення PDF:

$ Pdftk broken.pdf output fixed.pdf $ Pdftk broken PDFtk - універсальна утиліта для роботи з PDF

Насправді це далеко не все утиліти для роботи з PDF-файлами. Практично не торкнуться питання генерації PDF з різних джерел. Але більшість рішень легко знайти в репозиторії. Перетворення через PostScript дає ще більші можливості по управлінню вмістом.