Як вигнати / розтермінувати PDF в Linux


14

У нас в офісі є принтер, який друкує PDF-файли з USB-накопичувача. Він друкує більшість файлів добре, але у нього є проблеми з деякими, особливо згенерованими за допомогою Latex. Деякі PDF-файли він просто відмовляється друкувати, деякі PDF-файли друкує шрифтом кур’єрського типу, а деякі друкує штрафи за винятком рівнянь.

Я шукаю спосіб "перегортати" PDF-файли у мертвий формат для друку. Або шляхом спрощення / нормалізації PDF-файлу до того, що будь-який рендерінг візуалізує його правильно, або просто зробивши кожну сторінку растровим зображенням 600dpi в PDF. (Я міг би розділити PDF на окремі растрові зображення та об'єднати їх вручну, але я хочу щось сценарій.)

Розмір вихідного файлу не має значення, якщо він обов'язково друкує, має папір формату A4 (або оригінал) та роздільну здатність 300 ~ 600 dpi.


Можливо, pdf2ps може допомогти, якщо принтер підтримує постскрипт.
frlan

Це повинен бути принтер PostScript, але ця підтримка ще гірша, ніж у PDF (і він не буде друкувати PS з USB-накопичувача).
Сампо

Відповіді:


23

Після безуспішної спроби деяких варіантів вивести шрифти як контури (включаючи це питання та pstoedit), я з'ясував спосіб легко перетворити PDF у розтерзану форму за допомогою ImageMagick:

convert -density 600 +antialias input.pdf output.pdf

Це створює PDF-файл, розміщений зі швидкістю 600 dpi, з відключеними антиаліями (непотрібними при цій роздільній здатності).

Вихідні файли величезні (~ 30 Мб для документа на 8 сторінок) і надзвичайно повільні для друку, але повинні працювати до тих пір, поки у принтера достатньо пам'яті для візуалізації вмісту.


1
Так! Я використав це для вирівнювання шарів у своєму PDF-файлі з великим успіхом. + antialias був не потрібний, оскільки у нас були лише зображення (це не мало значення), і я знизив роздільну здатність до 150, оскільки це здавалося досить хорошим для архівації, не займаючи так багато місця. Дякую!
mlissner

2
Зауважте, що convertне зберігається вміст форм, які ви могли б заповнити. (Я хотів розпалити PDF, щоб переконатися, що вміст форми виглядає скрізь однаково, зокрема, що вони будуть відображатися в першу чергу кожним переглядачем PDF.) Щоб зберегти вміст форми, використовуйте evince(або будь-що інше) додаток, який ви використовували для заповнення форми) для друку документа "у файл" - це ще один PDF, де вміст форми фактично став частиною звичайного тексту. Тоді ви все ще можете растерірувати цей новий PDF-файл, залежно від ваших потреб.
balu

Зауважте, що це активізує антиалізинг ( +antialias), а не вимикає його ( -antialias).
xiii1408

Ні, +antialiasвимикає антиализацию: imagemagick.org/script/command-line-options.php?#antialias
Сампо

1
Мені потрібно було налаштувати imagemagick ( stackoverflow.com/questions/42928765/… ), щоб зробити цю роботу.
SteveSong

1

За моїм досвідом використання imagemagick не є стабільним з високою роздільною здатністю та / або великими файлами. Багато принтерів можуть робити 1200 dpi і вище, тому растрований файл повинен мати аналогічну роздільну здатність. Кращим рішенням є використання pdf2djvu, який є швидшим, надійнішим і навіть створює файли розміром, який часто конкурує з оригінальним PDF в 1200 або 2400 dpi. Ці файли можна переглядати та друкувати за допомогою okular або evince.

Приклад:

pdf2djvu -d 2400 file.pdf > rastered.djvu

1

Я думаю, що мій поточний бажаний спосіб зробити це:

  1. Використовуйте pdftoppm для перетворення PDF-файлу в серію зображень.

    $ pdftoppm source.pdf вихід -png

  2. Використовуйте img2pdf, щоб створити PDF-файл із цих зображень.

    $ img2pdf * .png -o output.pdf

Хороша новина полягає в тому, що ви можете створити скрипт-баш для автоматизації всього процесу для вас.

Ось bash-скрипт, який буде переганяти всі pdf-файли в каталозі та зберігати оригінали в новому каталозі "оригінали".

#!/bin/bash

mkdir "originals";
for filename in ./*.pdf; do
    pdftoppm "$filename" output -png
    mv "$filename" ./originals
    img2pdf *.png "-o" "$filename"
    rm *.png
done

Кредити: відповідь img2pdf та pdftoppm відповідь та баш скрипт: 1 та 2

(Бічна примітка) Ви можете встановити img2pdf, використовуючи:

$ sudo apt install img2pdf


-1

Інша альтернатива - перетворення на зображення через щось подібне

pdfimages

З головної сторінки "Pdfimages зберігає зображення з файлу формату портативного документа (PDF) у вигляді файлів Portable Pixmap (PPM), Portable Bitmap (PBM) або JPEG". пише один файл PPM, PBM або JPEG для кожного зображення, image-root-nnn.xxx, де nnn - номер зображення, а xxx - тип зображення (.ppm, .pbm, .jpg). "

Потім використовуйте pdftk для перетворення назад у PDF https://www.pdflabs.com/docs/pdftk-cli-examples/

Нарешті, надрукуйте цей файл. Очевидно, ключовим питанням є те, як це зробити.

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


3
pdfimages витягує вбудовані растрові зображення з PDF-файлів, не розширює текст чи векторну графіку.
Сампо
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.