GUI-Programm zum Ändern der Größe von PDF-Dokumenten und deren DPI

12

Ich sehe, dass LibreOffice Draw in der Lage sein sollte, ein PDF zu öffnen und es mit Optionen zum Ändern der Qualität und der DPI-Auflösung zu exportieren. Die hochauflösenden gescannten PDFs, die ich habe, werden in dieser Anwendung nicht richtig geöffnet (nur die erste Seite wird importiert), daher möchte ich eine speziellere Anwendung finden.

Ich frage derzeit nicht nach einer Befehlszeilenoption (meine PDFs sind so groß, dass alles, was ich auf diese Weise versucht habe, fehlgeschlagen ist).

Glutanimate
quelle

Antworten:

12

Nautilus-Skript


Code

Ich konnte meine PDF-Dateien mit diesem Nautilus-Skript erfolgreich in der Größe ändern:

#! /bin/bash

# AUTHOR:   (c) Ricardo Ferreira, oriolpont -- modified in accordance to /ubuntu//q/280618/81372
# NAME:     Compress PDF 1.4.2
# DESCRIPTION:  A nice Nautilus script with a GUI to compress and optimize PDF files
# REQUIRES: ghostscript, poppler-utils, zenity, sed, python-notify (optional)
# LICENSE:  GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE:  https://launchpad.net/compress-pdf

VERSION="1.4.2"
COMPRESSPDF_BATCH_ABORT_ERR=115

# Messages
        # English (en-US)
        error_nofiles="No file selected."
        error_noquality="No optimization level selected."
        error_ghostscript="PDF Compress requires the ghostscript package, which is not installed. Please install it and try again."
        error_nopdf="At least one of the selected file(s) is not a valid PDF archive."
        label_filename="Save PDF as..."
        label_level="Please choose an optimization level below."
        optimization_level="Optimization Level"
        level_default="Default" # apparently close to High Quality
        level_screen="Screen-view only (72dpi)"
        level_low="Low Quality (150dpi)"
        level_high="High Quality (300dpi)"
        level_color="High Quality (Color Preserving) (300dpi)"
        job_done="has been successfully compressed"
        filename_suffix="_opt"
        label_suffix="Choose the suffix for the filenames."
        warning_overwrite="That will overwrite the original pdf files."


case $LANG in

    pt* )
        # Portuguese (pt-PT)
        error_nofiles="Nenhum ficheiro seleccionado."
        error_noquality="Nenhum nível de optimização escolhido."
        error_ghostscript="O PDF Compress necessita do pacote ghostscript, que não está instalado. Por favor instale-o e tente novamente."
        error_nopdf="O ficheiro seleccionado não é um ficheiro PDF válido."
        label_filename="Guardar PDF como..."
        label_level="Por favor escolha um nível de optimização abaixo."
        optimization_level="Nível de Optimização"
        level_default="Normal"
        level_screen="Visualização no Ecrã"
        level_low="Baixa Qualidade"
        level_high="Alta Qualidade"
        level_color="Alta Qualidade (Preservação de Cores)"
        job_done="foi comprimido com sucesso"
        filename_suffix="-otimizado";;


    es* )
        # Spanish (es-AR) by Eduardo Battaglia
        error_nofiles="Ningún archivo seleccionado."
        error_noquality="Ningún nivel de optimización escogido."
        error_ghostscript="Compress PDF necesita el paquete ghostscript, que no está instalado. Por favor instálelo e intente nuevamente."
        label_filename="Guardar PDF como..."
        label_level="Por favor escoja un nivel de optimización debajo."
        optimization_level="Nivel de Optimización"
        level_default="Normal"
        level_screen="Sólo visualización"
        level_low="Baja calidad"
        level_high="Alta calidad"
        level_color="Alta calidad (Preservación de Colores)"
        filename_suffix="-optimizado";;


    cs*)
       # Czech (cz-CZ) by Martin Pavlík
        error_nofiles="Nebyl vybrán žádný soubor."
        error_noquality="Nebyla zvolena úroveň optimalizace."
        error_ghostscript="PDF Compress vyžaduje balíček ghostscript, který není nainstalován. Nainstalujte jej prosím a opakujte akci."
        label_filename="Uložit PDF jako..."
        label_level="Prosím vyberte úroveň optimalizace z níže uvedených."
        optimization_level="Úroveň optimalizace"
        level_default="Výchozí"
        level_screen="Pouze pro čtení na obrazovce"
        level_low="Nízká kvalita"
        level_high="Vysoká kvalita"
        level_color="Vysoká kvalita (se zachováním barev)"
        filename_suffix="-optimalizované";;


    fr*)
       # French (fr-FR) by Astromb
        error_nofiles="Aucun fichier sélectionné"
        error_noquality="Aucun niveau d'optimisation sélectionné"
        error_ghostscript="PDF Compress a besoin du paquet ghostscript, mais il n'est pas installé. Merci de l'installer et d'essayer à nouveau."
        error_nopdf="Le fichier que vous avez sélectionné n'est pas un PDF valide."
        label_filename="Sauvegarder le PDF sous..."
        label_level="Merci de choisir, ci-dessous, un niveau d'optimisation."
        optimization_level="Niveau d'optimisation"
        level_default="Défaut"
        level_screen="Affichage à l'écran"
        level_low="Basse qualité"
        level_high="Haute qualité"
        level_color="Haute qualité (Couleurs préservées)"
        filename_suffix="-optimisé";;


    zh_CN*)
        # Simplified Chinese (zh_CN) by TualatriX Chou
        error_nofiles="没有选择文件。"
        error_noquality="没有优化优化等级。"
        error_ghostscript="PDF压缩需要ghostscript软件包,但是它没有安装。请先安装然后再重试。"
        error_nopdf="选择的文件不是一个有效的PDF文件"
        label_filename="另存为PDF..."
        label_level="请在下面选择优化等级"
        optimization_level="优化等级"
        level_default="默认"
        level_screen="仅在屏幕上浏览"
        level_low="低品质"
        level_high="高品质"
        level_color="高品质(护色) "
        filename_suffix="-优化";;


        ar*)
                # Arabic (ar) by Mohammed hasan Taha
        error_nofiles="لم يتم اختيار ملف"
        error_noquality="لم يتم اختيار درجة الضغط"
        error_ghostscript="هذا السكربت يحتاج حزمة ghostscript package لذا يرجى تنصيبها ثم اعادة المحاولة"
        error_nopdf="الملف الذي تم اختياره ليس ملف pdf صالح"
        label_filename="حفظ الملف باسم"
        label_level="الرجاء اختيار درجة الضغط"
        optimization_level="درجة الضغط"
        level_default="افتراضي"
        level_screen="عرض للشاشة فقط(الدرجة الأكثر انخفاضا)"
        level_low="جودة منخفضة"
        level_high="جودة مرتفعة"
        level_color="جودة عالية جدا"
        filename_suffix="-الأمثل";;


    ml_IN*)
        # Malayalam (ml_IN) by Hrishikesh K B
        error_nofiles="ഒരു ഫയലും തിരഞ്ഞെടുത്തിട്ടില്ല."
        error_noquality="യാതൊരു ഒപ്റ്റിമൈസേഷന്‍ ലെവലും തിരഞ്ഞെടുത്തിട്ടില്ല."
        error_ghostscript="പി ഡി എഫ് കംപ്രസ്സറിന് ഗോസ്റ്റ് സ്ക്രിപ്റ്റ് പാക്കേജ് ആവശ്യമാണ്. ആ പാക്കേജ് ഇന്‍സ്റ്റാള്‍ ചെയ്‌‌ത ശേഷം ദയവായി വീണ്ടും ശ്രമിക്കുക."
        error_nopdf="തിരഞ്ഞെടുത്ത ഫയല്‍ സാധുവായ ഒരു പിഡിഎഫ് ആര്‍ച്ചീവ് അല്ല."
        label_filename="പിഡിഎഫ് ഇങ്ങിനെ സംരക്ഷിക്കുക..."
        label_level="ദയവായി താഴെ നിന്നും ഒരു ഒപ്റ്റിമൈസേഷന്‍ ലെവല്‍ തിരഞ്ഞെടുക്കുക."
        optimization_level="ഒപ്റ്റിമൈസേഷന്‍ ലെവല്‍ "
        level_default="ഡീഫാള്‍ട്ട്"
        level_screen="സ്ക്രീനില്‍ കാണാന്‍ മാത്രം "
        level_low="കുറഞ്ഞ നിലവാരം"
        level_high="കൂടിയ നിലവാരം "
        level_color="കൂടിയ നിലവാരം (നിറം സംരക്ഷിച്ചിട്ടുള്ളത്)";;


    he*)
        # Hebrew (he-IL) by Yaron (from Launchpad question)
        error_nofiles="לא נבחר אף קובץ."
        error_noquality="לא נבחרה רמת הייעול."
        error_ghostscript="התכנית PDF Compress דורשת את החבילה ghostscript, שאינה מותקנת. נא להתקין אותה ולנסות שוב."
        error_nopdf="הקובץ הנבחר אינו ארכיון PDF תקני."
        label_filename="שמירת ה־ PDF בשם..."
        label_level="נא לבחור את רמת הייעול להלן."
        optimization_level="רמת הייעול"
        level_default="בררת מחדל"
        level_screen="לצפייה בצג בלבד"
        level_low="איכות נמוכה"
        level_high="איכות גבוהה"
        level_color="איכות גבוהה (שימור הצבע)"
        job_done="הדחיסה הסתיימה בהצלחה";;

esac



# Check if Zenity is installed
if ! ZENITY=$(which zenity)
then
    echo "error: Compress PDF $VERSION needs zenity to run." # maybe we could translate this someday
    exit 1
fi

# Check if Ghostscript is installed
if ! GS=$(which gs)
then
    $ZENITY --error --title="Compress PDF $VERSION" --text="$error_ghostscript"
    exit 1
fi

# Check if the user has selected any files
# if [ "x$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" = "x"  -o  "$#" = "0" ] # we double check. Remove the first part if you plan to manually invoke the script

if [ "$#" = "0" ] # removed nautilus specific variable to make the script compatible with other file managers
then
    $ZENITY --error --title="Compress PDF $VERSION" --text="$error_nofiles"
    exit 1
fi

# Check if we can properly parse the arguments
INPUT=("$@")
N=("$#")
if [ "${#INPUT[@]}" != "$N" ] # comparing the number of arguments the script is given with what it can count
then
    $ZENITY --error --title="Compress PDF $VERSION" # if we arrive here, there is something very messed
    exit 1
fi

# Check if all the arguments are proper PDF files
for ARG in "$@"
do
    IS_PDF=$(file --brief --mime-type "$ARG" | grep -i "/pdf") # ignoring case for 'pdf'; as far as I know, the slash before (sth/pdf) is universal mimetype output. In most cases we can even expect 'application/pdf' (portability issues?).
    if [ "x$IS_PDF" = x ]; then NOT_PDF=1; break; fi
done
if [ "x$NOT_PDF" != x ]
then
    $ZENITY --error --title="Compress PDF $VERSION" --text="$error_nopdf"
    exit 1
fi



# Everything is OK. We can go on.



# Ask the user to select an output format
selected_level=$($ZENITY --list --title="Compress PDF "$VERSION"" --text "$label_level" --radiolist --column "" --column "$optimization_level" TRUE "$level_default" FALSE "$level_screen" FALSE "$level_low" FALSE "$level_high" FALSE "$level_color" --height 250 --width 400)
if [ "$?" != "0"  -o  "x$selected_level" = x ]; then exit 1; fi

# Select the optimization level to use
case $selected_level in
    "$level_default")
        COMP_COMMAND="/default"
    ;;
    "$level_screen")
        COMP_COMMAND="/screen"
    ;;
    "$level_low")
        COMP_COMMAND="/ebook"
    ;;
    "$level_high")
        COMP_COMMAND="/printer"
    ;;
    "$level_color")
        COMP_COMMAND="/prepress"
    ;;
esac



# Choose output filename(s)
if [ $# -eq 1 ]
then
    pdf_file=$(basename "$1")
    suggested_filename=${pdf_file%.*}${filename_suffix}.${pdf_file##*.}
    output_filename=$($ZENITY --file-selection --save --confirm-overwrite --filename="$PWD/$suggested_filename" --title="$label_filename")
    if [ "$?" != "0"  -o  "x$output_filename" = x ]; then exit 1; fi
else
    filename_suffix=$($ZENITY --entry --title="Compress PDF $VERSION" --text="$label_suffix" --entry-text="$filename_suffix")
    if [ "$?" != "0" ]; then exit 1; fi
    if [ "x$filename_suffix" = x ]
        then if ! $ZENITY --warning --title="Compress PDF $VERSION" --text="$warning_overwrite"; then exit 1; fi
    fi
    case "$filename_suffix" in */*) $ZENITY --error --title="Compress PDF $VERSION"; exit 1; esac # Check if the specified suffix is legal (we use 'case' instead of 'if' to directly use asterisk * globbing -- and avoid [[...]] for portability)
fi



# Finally, we process the files



for arg in "$@" # this processing is partly inspired by Edouard Saintesprit's patch from Compress PDF page at Launchpad
do
    if [ $# -ne 1 ]
    then
        pdf_file=$(basename "$arg")
        output_filename=${pdf_file%.*}${filename_suffix}.${pdf_file##*.}
    fi

    output_name=$(basename "$output_filename")

    temp_pdfmarks=tmp-compresspdf-$output_name-pdfmarks
    temp_filename=tmp-compresspdf-$output_name

    if [ -e $temp_pdfmarks  -o  -e $temp_filename ]; then $ZENITY --error --title="Compress PDF $VERSION"; exit 1; fi

    # Extract metadata from the original PDF. This is not a crucial functionality, but maybe we could warn if pdfinfo or sed are not available
    pdfinfo "$arg" | sed -e 's/^ *//;s/ *$//;s/ \{1,\}/ /g' -e 's/^/  \//' -e '/CreationDate/,$d' -e 's/$/)/' -e 's/: / (/' > "$temp_pdfmarks"
    if ! grep /Title "$temp_pdfmarks"; then echo '  /Title ()' >> "$temp_pdfmarks"; fi # Warning: if the pdf has not defined a Title:, ghostscript makes a fontname become the title.
    # echo -e 0a'\n''  /Title ()''\n'.'\n'w | ed afile # use to prepend instead of append
    sed -i '1s/^ /[/' "$temp_pdfmarks"
    sed -i '/:)$/d' "$temp_pdfmarks"
    echo "  /DOCINFO pdfmark" >> "$temp_pdfmarks"

    # Execute ghostscript while showing a progress bar
    (
        $GS -sDEVICE=pdfwrite -dPDFSETTINGS=$COMP_COMMAND -dColorConversionStrategy=/LeaveColorUnchanged -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -dSAFER -sOutputFile="$temp_filename" "$arg" "$temp_pdfmarks" & echo -e "$!\n"
        # we output the pid so that it passes the pipe; the explicit linefeed starts the zenity progressbar pulsation
    ) | ( # the pipes create implicit subshells; marking them explicitly
        read PIPED_PID
        if $ZENITY --progress --pulsate --auto-close --title="Compress PDF $VERSION"
        then
            rm "$temp_pdfmarks"
            mv -f "$temp_filename" "$output_filename" & # we go on to the next file as fast as possible (this subprocess survives the end of the script, so it is even safer)
            notify-send "Compress PDF" "$output_name $job_done"
        else
            kill $PIPED_PID
            rm "$temp_pdfmarks"
            rm "$temp_filename"
            exit $COMPRESSPDF_BATCH_ABORT_ERR # Warning: it exits the subshell but not the script
        fi
    )
    if [ "$?" = "$COMPRESSPDF_BATCH_ABORT_ERR" ]; then break; fi # to break the loop in case we abort (zenity fails)
done

Ursprüngliche Quelle: https://launchpad.net/compress-pdf

Skript basierend auf diesem Zweig von Oriolpont und modifiziert nach dem Vorschlag von Cipricus .

Die überarbeitete Version von Oriolpont bringt eine Reihe von Verbesserungen mit sich:

  • Hebräische Übersetzung von Yaron
  • Multifile-Unterstützung basierend auf Änderungen von Edouard Saintesprit
  • Mehrere andere Bash-Tunings, um das Skript viel sicherer zu machen (PID tempfiles, sicherer Modus für GS, mehr Erstprüfungen)

Bildschirmfoto

Komprimieren


Optionen

Die im Dialogfeld der Zenity-Benutzeroberfläche angebotenen Optionen entsprechen den folgenden ghostscriptEinstellungen:

  • dPDFSETTINGS=/screen (Nur-Bildschirm-Qualität, 72-dpi-Bilder)
  • dPDFSETTINGS=/ebook (niedrige Qualität, 150 dpi Bilder)
  • dPDFSETTINGS=/printer (Bilder in hoher Qualität mit 300 dpi)
  • dPDFSETTINGS=/prepress (hohe Qualität, farbschonend, 300 dpi Bilder)
  • dPDFSETTINGS=/default (fast identisch mit / screen)

Weitere Optionen und Feinabstimmungen auf der Website: http://milan.kupcevic.net/ghostscript-ps-pdf/

Quelle: Open Source-Befehlszeilentool zur Optimierung von PDF

Weitere Informationen zu den verwendeten Optionen finden Sie hier . In der README- Datei von Oriolpont finden Sie zusätzliche Informationen zum Anpassen des Skripts an Ihre Anforderungen.


Installation

Das Skript hängt von einer Reihe von Paketen ab. Sie können sie installieren mit:

sudo apt-get install ghostscript poppler-utils zenity

Wenn Sie nicht wissen, wie man ein Nautilus-Skript installiert, befolgen Sie einfach diese Anleitung:

Wie kann ich ein Nautilus-Skript installieren?


Installation in alternativen Desktop-Umgebungen

Das Skript hängt nicht von benutzerdefinierten Nautilus-Variablen ab und kann mit so ziemlich jedem Dateimanager verwendet werden, der benutzerdefinierte Menüaktionen unterstützt. Informationen zur Installation Ihres Skripts finden Sie im Handbuch Ihres Dateimanagers. XFCE-Benutzer können ein schönes Tutorial hier .

Natürlich können Sie das Skript auch über die Befehlszeile starten. Grundsätzliche Verwendung:

compresspdf "filename.pdf"

Schwarzbrenner


Überblick

Mit Moonshiner , einem GUI-Frontend für Ghostscript, können Sie die Kontrolle über Ihre PDF-Ausgabe verbessern.


Installation

Moonshiner ist nicht in den offiziellen Repositories verfügbar. Leider konnte ich auch keine offizielle PPA finden. Es gibt nur diesen privaten PPA, der seit einiger Zeit nicht mehr aktualisiert wurde. Das hier.deb verfügbare Archiv sollte mit den neuesten Ubuntu-Versionen funktionieren, aber nehmen Sie nicht mein Wort dafür.

Die sicherste Art, Mondscheinwerfer zu installieren, ist meines Erachtens direkt von der Quelle. Laden Sie dazu zunächst die neueste Version herunter:

svn co https://moonshiner.svn.sourceforge.net/svnroot/moonshiner/trunk moonshiner_svn
cd $HOME/moonshiner_svn/

Moonshiner ist abhängig von Python, PyGTK und Ghostscript. Wenn diese Abhängigkeiten erfüllt sind (die sich auf einer Standard-Ubuntu-Installation befinden sollten), können Sie mit der Installation der Anwendung fortfahren:

sudo python setup.py install

Oder mit dem Paketverwaltungstool von Python ( sudo apt-get install python-pip):

python setup.py sdist
sudo pip install $HOME/moonshiner_svn/dist/moonshiner-1.1svn.tar.gz

Die Deinstallation von moonshiner ist ein Kinderspiel mit pip:

sudo pip uninstall moonshiner

Wenn Sie mit der ersten Installationsmethode fortfahren, müssen Sie alle installierten Dateien manuell entfernen.


Verwendung

Nach der Installation sollten Sie in der Lage sein, Moonshiner über den Dash oder den von Ihnen bevorzugten Anwendungsstarter zu starten. Die GUI ist ziemlich selbsterklärend. Um eine PDF-Datei zu ändern, ziehen Sie sie einfach auf die Benutzeroberfläche, ändern Sie die gewünschten Einstellungen und klicken Sie auf Go Moonshining! .

Mit drei separaten Reglern auf der Registerkarte " Bilder" können Sie die DPI- und Qualitätseinstellungen nach Ihren Wünschen anpassen:

http://i.imgur.com/Y5ziLnu.gif

Ich werde hier nicht auf die anderen Einstellungen eingehen, aber ich empfehle Ihnen, die offizielle Dokumentation zu Rate zu ziehen, wenn Sie Fragen haben.


Benutzerdefiniertes Symbol

Ich mochte die Ikone des Mondscheiners nicht so sehr, also habe ich eine eigene kreiert:

Sie können die SVG hier herunterladen . Das Icon basiert auf dem fantastischen Faenza Iconset und wird unter der gleichen Lizenz (GNU / GPL) veröffentlicht.

Glutanimate
quelle
(1) Mondschein ist großartig; (2) i haben die Ursache des Fehlers zu finden: in der Tat das Skript eine Einstellung muss in Xfce / Thunar laufen ( askubuntu.com/a/280623/47206 ): die Leitung 150 ersetzt werden soll : if [ -z "$pdf_file" ]; then. Sollte ich diese Informationen in Ihre Antwort aufnehmen oder möchten Sie dies lieber tun?
das modifizierte Skript hier: pastebin.com/eEWHCwK7
@cipricus Ich hatte diesen Nautilus-Hinweis übersehen, danke! Ich konnte eine aktuellere Version des Skripts mit Unterstützung für mehrere Dateien finden und meine Antwort so bearbeiten, dass sie sowohl Ihren Vorschlag als auch das neue Skript enthält.
Glutanimate
1
@cipricus Ein letztes Update. Ich hasse hässliche Ikonen, deshalb habe ich eine neue für Moonshiner erstellt. Stellen Sie sicher, es heraus zu überprüfen!
Glutanimate
Tolle Antwort !, aber vielleicht ist es besser, die Antwort in zwei Antworten aufzuteilen, eine für das Nautlius-Skript und eine für Moonshiner. Esp. das letzte klappt super!
Mathe
0

Ghostscript-Befehlszeile

So einfach:

ps2pdf "argument.pdf"

Es wird argument.pdf.pdfeine Datei generiert , die (in den meisten Fällen) kleiner als die ursprüngliche ist.

Nemo Script

Öffne einen Texteditor und schreibe:

ps2pdf "$*"

Speichern Sie es unter /home/youruser/.local/share/nemo/scripts. Geben Sie einen intuitiven Namen ein und sagen Sie "PDF-Größe reduzieren". keine Notwendigkeit, Dateierweiterung zu verwenden.

Dann bewerben Sie sich chmod +x "reduce PDF size".

Sie müssen also nur Nemo öffnen, zur Datei navigieren, mit der rechten Maustaste auf die PDF-Datei klicken, Skripte auswählen und dann die PDF-Größe reduzieren.

Nebenwirkungen: Es erkennt keine Samba-Freigaben und generiert eine neue beschädigte Datei.

Kokbira
quelle