Существует ли способ сгладить изображение pdf из командной строки?

Насколько я вижу, они зафиксировали его в версии 0.12.3. Я использую Fedora 16 и должен был скомпилировать его из источника - http://yorba.org/shotwell/install.html

19
19.10.2014, 03:20
5 ответов

Для установки любого дистрибутива на любое устройство можно использовать unetbootin . Это автономный исполняемый файл, поэтому нет ничего для установки, просто загрузите его и запустите.

Unetbootin предлагает большинство основных distros как Live, так и обычных версий.

ss of unetbootin

ss of unetbootin

ПРИМЕЧАНИЕ: Эти живые бедствия больше, чем одна и та же система между перезагрузками. Многие предлагают динамическую область, где можно сохранить изменения, чтобы можно было установить дополнительное программное обеспечение и настроить рабочий стол, и она останется для следующей перезагрузки.

Например, ознакомьтесь с документацией Ubuntu Persistence :

На этой странице объясняется, как улучшить LiveCD только для чтения путем добавления постоянное место хранения файлов на другом диске. В более позднем Ubuntu версии, вы можете вместо этого использовать инструмент usb-creator для создания загрузочный USB-флеш-накопитель с Live CD, а его пользовательский интерфейс имеет возможность добавления постоянного хранилища на том же USB-накопителе

-121--81261-

Вот еще один, использующий форматирование выходных данных из ps :

#!/usr/bin/sh -f
printf '%-8.7s%-8s%s\n' $(
     ps -o uname=UID,pid=PID,args=APPNAME | 
     sed -n '1p;s/\( [0-9]* \).*\(-Dapp.name=[^ ]*\).*/\1\2/p'
)

На основе строки формата, на каждые 3 его аргумента printf будет печататься:

  1. Второе пространство, заполненное справа до стандартной ширины табуляции в 8 символов.
  2. После третьего следует \n ewline.

Подстановка команды не цитируется специально . Обратите внимание на -f , следующий за sh в bang-line - он указывает, что оболочка должна не glob - поэтому нет опасности случайного создания имен файлов на основе специальных символов оболочки. Замена команды будет разделена на значения по умолчанию $ IFS - космоса, tab, newline.

В подмене команды ps печатает столбцы 3 - с UID , PID и APPNAME . ps указан POSIX не для печати мест в любом поле , за исключением поля args = . Таким образом, первые два столбца являются $ IFS безопасными. Тем не менее, чтобы получить строку -Dapp.name из поля args = , ее необходимо обработать.

Поэтому sed фильтрует его. В строках, содержащих по крайней мере два космический и строку -Dapp.name = , она печатает:

  1. Первая последовательность космоса, затем ноль или больше чисел, затем космос и все, что предшествует ему...
  2. Последняя последовательность, содержащая строку -Dapp.name = , за которой следуют все символы перед следующим пробелом. Замены

sed не влияют на заголовки столбцов, напечатанные с 1p , поскольку они не содержат -Dapp.name = последовательностей.Все остальные строки удаляются из выходных данных.

После применения printf к sed произвел разделение на $IFS , вы можете ожидать продукцию как следующее:

UID     PID     APPNAME
sas     24431   -Dapp.name=myApp
sas     24431   -Dapp.name=myApp
sas     24431   -Dapp.name=myApp
sas     24431   -Dapp.name=myApp
sas     24431   -Dapp.name=myApp

, По-моему, тем не менее, этот заявление sed работало бы немного лучше:

sed -n '1p;s/\( [0-9]* \).*-Dapp.name=\([^ ]*\).*/\1\2/p'

Это - в основном то же, за исключением того, что полосы -Dapp.name = часть от \2 , таким образом, это печатает как...

UID     PID     APPNAME
sas     24431   myApp
sas     24431   myApp
sas     24431   myApp

Потому что, поскольку это только печать строк, содержащих последовательность -Dapp.name = в любом случае, включая это своего рода просто нагромождение, которое в противном случае можно воспринимать как должное.

-121--78154-

Я нашел эти 2 метода через Google, в этом потоке под названием: Re: Сведение PDF-файлов в командной строке UNIX .

Метод # 1 - при использовании преобразования Imagemagick:
$ convert orig.pdf flattened.pdf 

ПРИМЕЧАНИЕ: Качество, как сообщается, является таким при таком подходе.

Метод # 2 - Использование pdf2ps - > ps2pdf:
$ pdf2ps orig.pdf - | ps2pdf - flattened.pdf 

ПРИМЕЧАНИЕ: Сообщается, что этот метод сохраняет качество изображения.

26
27.01.2020, 19:44

Ghostscript (gs) работал лучше, чем pdf2ps и convert для меня. Качество почти не ухудшилось, а размер файла небольшой.

gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-sColorConversionStrategy=/LeaveColorUnchanged  \
-dAutoFilterColorImages=true \
-dAutoFilterGrayImages=true \
-dDownsampleMonoImages=true \
-dDownsampleGrayImages=true \
-dDownsampleColorImages=true \
-sOutputFile=document_flat.pdf document_original.pdf

Найдено здесь: http://zeroset.mnim.org/2015/01/07/flatten-pdfs-with-ghostscript/

18
27.01.2020, 19:44

Хотя convert будет сохранять тот же размер файла, я обнаружил, что он медленный.

Метод pdf2ps ps2pdf работает быстрее, но я заметил, что он увеличивает размер файла.

pdftk хорош тем, что он не только быстр, но и сохраняет аналогичный размер файла.

Это то, что я использую для массового выравнивания каталога.

    function pdfflatten () {
        pdftk "$1" output "$2" flatten
    }
    export pdfflatten
    alias pdfflattenDIR='mkdir flattenedPDFs; for i in `seq $(ls *.pdf | wc -l)`; do a=`ls *.pdf | head -$i | tail -1`; pdfflatten "$a" flattenedPDFs/"$a"; done'
1
27.01.2020, 19:44

В конце 2016 г. Ghostscript изменил значение по умолчанию для выравнивания аннотаций.

Теперь, чтобы просто свести PDF, вам нужно-dPreserveAnnots=false

Теперь простая командная строка

gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-dPreserveAnnots=false \
-sOutputFile=document_flat.pdf document_original.pdf
6
16.09.2020, 21:48

Мне часто приходится сводить PDF-файлы или делать из них -только изображения. Я хотел сделать это быстро из Nautilus, а не заходить в терминал, поэтому я создал два сценария Nautilus на основе предыдущих ответов. Я делюсь инструкциями на случай, если они будут полезны другим.

Создать скрипт для выравнивания PDF-файлов:

  1. Перейдите в папку скрипта Nautilus~/.local/share/nautilus/scripts/
  2. Создать новый файл сценария оболочки (, например,FlattenPDF.sh)
  3. Сделать этот файл исполняемым (, например Natiuls PropertiesPermissionsAllow executing file as program)
  4. Вставьте текст ниже в файл:

#!/bin/bash

# Flattend PDFs    

IFS='
'
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
  if [ -f "$file" ]; then
    base=${file%.*}
    ext=${file##*.}
    newname=${base}_flat.pdf
    gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite -dPreserveAnnots=false -sOutputFile=$newname $file
  fi
done

Создать сценарий для создания изображения -только (текст не доступен для поиска или выбора )PDF-файлы:

  1. Перейдите в папку скриптов Nautilus~/.local/share/nautilus/scripts/
  2. Создать новый файл сценария оболочки (, напримерImageOnlyPDF.sh)
  3. Сделать этот файл исполняемым (, например Natiuls PropertiesPermissionsAllow executing file as program)
  4. Вставьте текст ниже в файл:

#!/bin/bash

# Image-only PDFs    

IFS='
'
for file in $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
do
  if [ -f "$file" ]; then
    base=${file%.*}
    ext=${file##*.}
    newname=${base}_img.pdf
    gconvert -density 200 $file $newname
  fi
done

Перезапустите Nautilus (, например, введите nautilus -q, чтобы выйти из Nautilus, а затем снова откройте Nautilus из Dash ). Если вы щелкните правой кнопкой мыши -файл, вы должны увидеть меню Scriptsс новыми скриптами.

0
23.11.2020, 03:00

Теги

Похожие вопросы