Programma di interfaccia grafica per ridimensionare i documenti pdf e modificarne il DPI


12

Vedo che LibreOffice Draw dovrebbe essere in grado di aprire un pdf ed esportarlo con opzioni per cambiare qualità e risoluzione DPI. Ma i PDF scansionati ad alta risoluzione che ho non sono aperti correttamente in questa applicazione (viene importata solo la prima pagina), quindi voglio trovare un'applicazione più specializzata.

Non sto chiedendo un'opzione da riga di comando a questo punto (i miei pdf sono così grandi che tutto ciò che ho provato in questo modo non è riuscito).

Risposte:


12

Script Nautilus


Codice

Sono stato in grado di ridimensionare con successo i miei PDF con questo script Nautilus:

#! /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

Fonte originale: https://launchpad.net/compress-pdf

Script basato su questo ramo di oriolpont e modificato secondo il suggerimento di Cipricus .

La revisione modificata di Oriolpont presenta numerosi miglioramenti:

  • Traduzione ebraica di Yaron
  • Supporto per più file basato sulle modifiche di Edouard Saintesprit
  • Diverse altre regolazioni bash per rendere lo script molto più sicuro (tempfile PID, modalità più sicura per GS, più controlli iniziali)

Immagine dello schermo

Comprimere


Opzioni

Le opzioni offerte nella finestra di dialogo della GUI di zenity corrispondono a queste ghostscriptimpostazioni:

  • dPDFSETTINGS=/screen (qualità di sola visualizzazione, immagini a 72 dpi)
  • dPDFSETTINGS=/ebook (immagini di bassa qualità, 150 dpi)
  • dPDFSETTINGS=/printer (immagini di alta qualità, 300 dpi)
  • dPDFSETTINGS=/prepress (alta qualità, conservazione del colore, imgs 300 dpi)
  • dPDFSETTINGS=/default (quasi identico a / schermo)

Altre opzioni e messa a punto sul sito: http://milan.kupcevic.net/ghostscript-ps-pdf/

Fonte: strumento da riga di comando Open Source per l'ottimizzazione del PDF

Puoi trovare ulteriori informazioni sulle opzioni utilizzate qui . Il README di Oriolpont offre ulteriori dettagli sulla personalizzazione dello script in base alle proprie esigenze.


Installazione

Lo script dipende da un numero di pacchetti. Puoi installarli con:

sudo apt-get install ghostscript poppler-utils zenity

Se non sai come installare uno script Nautilus, segui questa guida:

Come posso installare uno script Nautilus?


Installazione su ambienti desktop alternativi

Lo script non dipende da alcuna variabile Nautilus personalizzata e può essere utilizzato praticamente con qualsiasi file manager che supporti le azioni di menu personalizzate. Fare riferimento al manuale del file manager su come installare lo script. Gli utenti di XFCE possono trovare un bel tutorial qui .

Ovviamente puoi anche avviare lo script dalla riga di comando. Utilizzo di base:

compresspdf "filename.pdf"

Moonshiner


Panoramica

È possibile ottenere un controllo più avanzato sull'output PDF con Moonshiner , un front-end della GUI di ghostscript.


Installazione

Moonshiner non è disponibile nei repository ufficiali. Sfortunatamente non sono riuscito a trovare nemmeno un PPA ufficiale. C'è solo questo PPA privato che non è stato aggiornato da un po '. L' .debarchivio disponibile qui dovrebbe funzionare sulle recenti revisioni di Ubuntu, ma non credetemi.

Per quanto posso vedere il modo più sicuro di installare Moonshiner è direttamente dalla sua fonte. Per fare ciò, scarica prima la revisione più recente:

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

Il chiaro di luna dipende da Python, PyGTK e Ghostscript. Se queste dipendenze sono soddisfatte (che dovrebbero trovarsi su un'installazione Ubuntu di serie) puoi procedere con l'installazione dell'applicazione con:

sudo python setup.py install

O con lo strumento di gestione dei pacchetti di python ( sudo apt-get install python-pip):

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

Disinstallare moonshiner è semplicissimo con pip:

sudo pip uninstall moonshiner

Se si utilizza il primo metodo di installazione, sarà necessario rimuovere manualmente tutti i file installati.


uso

Dopo l'installazione dovresti essere in grado di avviare Moonshiner dal cruscotto o dal programma di avvio dell'applicazione preferito. La GUI è piuttosto autoesplicativa. Per modificare un PDF è sufficiente trascinare e rilasciare il file sull'interfaccia, modificare le impostazioni desiderate e premere Go Moonshining! .

Tre regolatori separati nella scheda Immagini ti consentono di mettere a punto DPI e impostazioni di qualità secondo le tue necessità:

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

Non mi immergerò nelle altre impostazioni qui, ma ti incoraggio a consultare la documentazione ufficiale per qualsiasi domanda tu possa avere.


Icona personalizzata

Non amavo troppo l'icona di Moonshiner, quindi ne ho creato uno mio:

Puoi scaricare SVG qui . L'icona si basa sul fantastico set di icone Faenza ed è rilasciata con la stessa licenza (GNU / GPL).


(1) Il chiaro di luna è fantastico; (2) Ho trovato la causa dell'errore: infatti lo script deve eseguire una rettifica in Xfce / Thunar ( askubuntu.com/a/280623/47206 ): la linea 150 deve essere sostituito con : if [ -z "$pdf_file" ]; then. Devo aggiungere tali informazioni nella tua risposta o preferisci farlo?

lo script modificato qui: pastebin.com/eEWHCwK7

@cipricus Avevo trascurato quel riferimento nautilus, grazie! Sono riuscito a trovare una revisione più aggiornata dello script con supporto multi-file e ho modificato la mia risposta per includere sia il tuo suggerimento che il nuovo script.
Glutanimate,

1
@cipricus Un ultimo aggiornamento. Odio le brutte icone, quindi ne ho creata una nuova per il chiaro di luna. Assicurati di provarlo!
Glutanimate,

Ottima risposta !, ma forse potrebbe essere meglio dividere la risposta in due risposte, una per lo script Nautlius e una per Moonshiner. Esp. l'ultimo funziona alla grande!
matematica

0

Ghostscript Commandline

Così semplice:

ps2pdf "argument.pdf"

Verrà generato argument.pdf.pdfun file che sarà (nella maggior parte dei casi) più piccolo di quello originale.

Nemo Script

Apri un editor di testo e scrivi:

ps2pdf "$*"

Salvalo su /home/youruser/.local/share/nemo/scripts, con un nome intuitivo, diciamo "riduci le dimensioni del PDF"; non è necessario utilizzare l'estensione del file.

Quindi, applicare chmod +x "reduce PDF size".

Quindi, devi solo aprire Nemo, passare al file, fare clic con il pulsante destro del mouse sul file PDF, scegliere gli script e quindi "ridurre le dimensioni del PDF".

Effetti collaterali: non riconosce le condivisioni di samba, generando un nuovo file danneggiato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.