PDF belgelerini yeniden boyutlandırmak ve DPI'larını değiştirmek için GUI programı


12

LibreOffice Draw'un bir pdf açabilmesi ve kalite ve DPI çözünürlüğünü değiştirme seçenekleriyle dışa aktarabilmesi gerektiğini görüyorum. Ancak sahip olduğum yüksek çözünürlüklü taranmış pdfs bu uygulamada düzgün açılmamış (sadece ilk sayfa içe aktarılmış) bu yüzden daha özel bir uygulama bulmak istiyorum.

Bu noktada bir komut satırı seçeneği istemiyorum (benim pdfs kadar büyük tüm bu şekilde denedim başarısız oldu).

Yanıtlar:


12

Nautilus Senaryosu


kod

PDF'lerimi bu Nautilus betiğiyle başarıyla yeniden boyutlandırabildim:

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

Orijinal Kaynak: https://launchpad.net/compress-pdf

Senaryo dayalı bu tarafından şube oriolpont göre ve modifiye cipricus' önerisi .

Oriolpont'un değiştirilmiş revizyonu bir dizi iyileştirme ile birlikte geliyor:

  • İbranice çeviri Yaron
  • Edouard Saintesprit'in değişikliklerine dayanan çok dosya desteği
  • Betiği daha güvenli hale getirmek için diğer birkaç bash ayarı (PID geçici dosyaları, GS için daha güvenli mod, daha fazla ilk kontrol)

Ekran görüntüsü

Kompres


Seçenekler

Zenity GUI iletişim kutusunda sunulan seçenekler şu ghostscriptayarlara karşılık gelir :

  • dPDFSETTINGS=/screen (yalnızca ekran görüntüleme kalitesi, 72 dpi görüntü)
  • dPDFSETTINGS=/ebook (düşük kalite, 150 dpi görüntüler)
  • dPDFSETTINGS=/printer (yüksek kalite, 300 dpi görüntüler)
  • dPDFSETTINGS=/prepress (yüksek kalite, renk koruma, 300 dpi görüntü)
  • dPDFSETTINGS=/default (/ ekranla neredeyse aynı)

Sitede daha fazla seçenek ve ince tunning: http://milan.kupcevic.net/ghostscript-ps-pdf/

Kaynak: PDF'yi optimize etmek için Açık Kaynak komut satırı aracı

Burada kullanılan seçenekler hakkında daha fazla bilgi bulabilirsiniz . Oriolpont'un README senaryosunu ihtiyaçlarınıza göre özelleştirmek için ek ayrıntılar sunar.


Kurulum

Komut dosyası bir dizi pakete bağlıdır. Bunları aşağıdakilerle kurabilirsiniz:

sudo apt-get install ghostscript poppler-utils zenity

Bir Nautilus betiğinin nasıl kurulacağını bilmiyorsanız, sadece bu kılavuzu izleyin:

Nautilus betiğini nasıl yükleyebilirim?


Alternatif masaüstü ortamlarına kurulum

Komut dosyası herhangi bir özel Nautilus değişkenine bağlı değildir ve özel menü işlemlerini destekleyen hemen hemen tüm dosya yöneticileriyle kullanılabilir. Lütfen komut dosyanızı nasıl yükleyeceğinize ilişkin dosya yöneticinizin kılavuzuna bakın. XFCE kullanıcıları burada güzel bir eğitim bulabilirler .

Elbette komut dosyasını komut satırından da başlatabilirsiniz. Temel kullanım:

compresspdf "filename.pdf"

moonshiner


genel bakış

PDF çıktılarınız üzerinde daha gelişmiş kontrol , ghostscript'in GUI ön ucu olan Moonshiner ile sağlanabilir .


Kurulum

Moonshiner resmi depolardan temin edilemez. Ne yazık ki resmi bir PPA da bulamadım. Bir süredir güncellenmeyen sadece bu özel PPA var . .debMevcut arşiv burada son Ubuntu revizyonlar üzerinde çalışmalıdır, ancak bunun için söz yapmayız.

Görebildiğim kadarıyla moonshiner kurmanın en güvenli yolu doğrudan kaynağından. Bunu yapmak için önce en son düzeltmeyi indirin:

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

Moonshiner Python, PyGTK ve Ghostscript'e bağlıdır. Bu bağımlılıklar tatmin edildiyse (stoktaki Ubuntu kurulumunda olması gerekir), uygulamayı yüklemeye devam edebilirsiniz:

sudo python setup.py install

Veya python'un paket yönetim aracıyla ( sudo apt-get install python-pip):

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

Moonshiner yazılımını kaldırmak çok kolay pip:

sudo pip uninstall moonshiner

İlk kurulum yöntemini kullanırsanız, kurulu tüm dosyaları manuel olarak kaldırmanız gerekir.


kullanım

Kurulumdan sonra Moonshiner'ı tire veya tercih ettiğiniz uygulama başlatıcıdan başlatabilirsiniz. GUI oldukça açıklayıcıdır. Bir PDF'yi değiştirmek için dosyayı arayüze sürükleyip bırakmanız, istediğiniz ayarları değiştirmeniz ve Go Moonshining! .

Görüntüler sekmesinin altındaki üç ayrı düzenleyici, DPI ve kalite ayarlarınızı isteğinize göre ayarlamanıza olanak tanır:

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

Buradaki diğer ayarlara girmeyeceğim, ancak sorularınız için resmi belgelere başvurmanızı öneririz .


Özel simge

Ay ışığının simgesine çok düşkün değildim, bu yüzden kendimden birini yarattım:

SVG'yi buradan indirebilirsiniz . Simge fantastik Faenza ikon setine dayanıyor ve aynı lisans (GNU / GPL) altında yayınlandı.


(1) Moonshine harika; Aslında: (2) i hatanın nedenini bulduk komut Xfce'in / Thunar çalıştırmak için bir ayarlama gerekir ( askubuntu.com/a/280623/47206 ): 150 ile değiştirilmesi gereken hat : if [ -z "$pdf_file" ]; then. Bu bilgiyi cevabınıza eklemeli miyim yoksa yapmayı mı tercih edersiniz?

burada değiştirilmiş komut dosyası: pastebin.com/eEWHCwK7

@cipricus Nautilus referansını göz ardı etmiştim, teşekkür ederim! Komut dosyasını çoklu dosya desteği ile daha güncel bir düzeltme bulmayı başardım ve yanıtımı hem önerinizi hem de yeni komut dosyasını içerecek şekilde düzenledim.
Glutanimate

1
@cipricus Son bir güncelleme. Çirkin ikonlardan nefret ediyorum, bu yüzden moonshiner için yeni bir tane oluşturdum. Kontrol ettiğinizden emin olun!
Glutanimate

Harika cevap! Ama belki de cevabı biri Nautlius-Script ve diğeri Moonshiner için olmak üzere iki cevaba ayırmak daha iyi olabilir. Esp. son işler harika!
matematik

0

Ghostscript Komut Satırı

Bu kadar basit:

ps2pdf "argument.pdf"

Orijinal argument.pdf.pdfdosyadan daha küçük (çoğu durumda) bir dosya oluşturur .

Nemo Script

Bir metin düzenleyici açın ve şunu yazın:

ps2pdf "$*"

Sezgisel bir adla /home/youruser/.local/share/nemo/scripts adresine kaydedin, "PDF boyutunu küçült" diyelim; dosya uzantısını kullanmaya gerek yok.

Sonra uygulayın chmod +x "reduce PDF size".

Bu nedenle, Nemo'yu açmanız, dosyaya gitmeniz, PDF dosyasına sağ tıklamanız, komut dosyalarını seçmeniz ve ardından "PDF boyutunu küçültmeniz" yeterlidir.

Yan etkileri: Samba paylaşımlarını tanımaz ve yeni bir bozuk dosya oluşturur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.