Program GUI untuk mengubah ukuran dokumen pdf dan mengubah DPI mereka

12

Saya melihat bahwa LibreOffice Draw harus dapat membuka pdf dan mengekspornya dengan opsi untuk mengubah kualitas dan resolusi DPI. Tetapi pdf scan resolusi tinggi yang saya miliki tidak dibuka dengan benar dalam aplikasi ini (hanya halaman pertama yang diimpor) jadi saya ingin mencari aplikasi yang lebih khusus.

Saya tidak meminta opsi baris perintah pada saat ini (pdf saya sangat besar sehingga semua yang saya coba dengan cara ini gagal).

Glutanimate
sumber

Jawaban:

12

Script Nautilus


Kode

Saya telah berhasil mengubah ukuran PDF saya dengan skrip Nautilus ini:

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

Sumber Asli: https://launchpad.net/compress-pdf

Skrip berdasarkan cabang ini oleh oriolpont dan dimodifikasi sesuai dengan saran cipricus .

Revisi Oriolpont yang dimodifikasi disertai dengan sejumlah perbaikan:

  • Terjemahan bahasa Ibrani oleh Yaron
  • Dukungan multifile berdasarkan perubahan oleh Edouard Saintesprit
  • Beberapa penyetelan bash lainnya untuk membuat skrip lebih aman (tempfile PID, mode lebih aman untuk GS, pemeriksaan lebih awal)

Tangkapan layar

Kompres


Pilihan

Opsi yang ditawarkan dalam dialog GUI zenity sesuai dengan ghostscriptpengaturan ini :

  • dPDFSETTINGS=/screen (hanya kualitas tampilan layar, gambar 72 dpi)
  • dPDFSETTINGS=/ebook (kualitas rendah, gambar 150 dpi)
  • dPDFSETTINGS=/printer (kualitas tinggi, gambar 300 dpi)
  • dPDFSETTINGS=/prepress (kualitas tinggi, pengawetan warna, 300 dpi gambar)
  • dPDFSETTINGS=/default (hampir identik dengan / layar)

Lebih banyak opsi dan penyempurnaan di situs: http://milan.kupcevic.net/ghostscript-ps-pdf/

Sumber: Alat baris perintah Open Source untuk mengoptimalkan PDF

Anda dapat menemukan beberapa informasi lebih lanjut tentang opsi yang digunakan di sini . README Oriolpont menawarkan detail tambahan tentang menyesuaikan skrip dengan kebutuhan Anda.


Instalasi

Script tergantung pada sejumlah paket. Anda dapat menginstalnya dengan:

sudo apt-get install ghostscript poppler-utils zenity

Jika Anda tidak tahu cara menginstal skrip Nautilus, cukup ikuti panduan ini:

Bagaimana saya bisa menginstal skrip Nautilus?


Instalasi pada lingkungan desktop alternatif

Script tidak bergantung pada variabel Nautilus khusus dan dapat digunakan dengan hampir semua manajer file di luar sana yang mendukung tindakan menu kustom. Silakan merujuk ke manual manajer file Anda tentang cara menginstal skrip Anda. Pengguna XFCE dapat menemukan tutorial yang bagus di sini .

Tentu saja Anda juga dapat meluncurkan skrip dari baris perintah. Penggunaan dasar:

compresspdf "filename.pdf"

Pembuat minuman keras secara gelap


Gambaran

Kontrol yang lebih maju atas output PDF Anda dapat dicapai dengan Moonshiner , ujung depan GUI untuk ghostscript.


Instalasi

Moonshiner tidak tersedia dari repositori resmi. Sayangnya saya juga tidak dapat menemukan PPA resmi. Hanya ada PPA pribadi ini yang belum diperbarui dalam beberapa saat. The .debarsip yang tersedia di sini harus bekerja pada revisi Ubuntu baru-baru ini, tapi jangan mengambil kata saya untuk itu.

Sejauh yang saya bisa lihat cara teraman menginstal moonshiner langsung dari sumbernya. Untuk melakukannya, unduh revisi terbaru:

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

Moonshiner tergantung pada Python, PyGTK dan Ghostscript. Jika dependensi ini terpenuhi (yang seharusnya ada pada instalasi stok Ubuntu) Anda dapat melanjutkan untuk menginstal aplikasi dengan:

sudo python setup.py install

Atau dengan alat manajemen paket python ( sudo apt-get install python-pip):

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

Mencopot moonshiner sangat mudah dengan pip:

sudo pip uninstall moonshiner

Jika Anda menggunakan metode instalasi pertama, Anda harus menghapus semua file yang diinstal secara manual.


Pemakaian

Setelah instalasi Anda harus dapat meluncurkan Moonshiner dari dasbor atau peluncur aplikasi pilihan Anda. GUI cukup jelas. Untuk memodifikasi PDF, Anda cukup drag dan drop file ke antarmuka, ubah pengaturan yang Anda inginkan dan tekan Go Moonshining! .

Tiga gubernur terpisah di bawah tab Gambar memungkinkan Anda menyempurnakan DPI dan pengaturan kualitas sesuai keinginan Anda:

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

Saya tidak akan terjun ke pengaturan lain di sini tapi saya mendorong Anda untuk berkonsultasi dengan dokumentasi resmi untuk pertanyaan yang mungkin Anda miliki.


Ikon kustom

Saya tidak terlalu menyukai ikon pembuat gelas, jadi saya membuat salah satu dari ikon saya sendiri:

Anda dapat mengunduh SVG di sini . Ikon ini didasarkan pada ikon Faenza yang fantastis dan dirilis di bawah lisensi yang sama (GNU / GPL).

Glutanimate
sumber
(1) Moonshine hebat; (2) saya telah menemukan penyebab kesalahan: sebenarnya script perlu penyesuaian untuk berjalan dalam Xfce / Thunar ( askubuntu.com/a/280623/47206 ): garis 150 harus diganti dengan : if [ -z "$pdf_file" ]; then. Haruskah saya menambahkan info itu ke dalam jawaban Anda atau Anda lebih suka melakukannya?
skrip yang dimodifikasi di sini: pastebin.com/eEWHCwK7
@cipricus Saya telah mengabaikan referensi nautilus itu, terima kasih! Saya berhasil menemukan revisi skrip yang lebih diperbarui dengan dukungan multi-file dan mengedit jawaban saya untuk memasukkan saran Anda dan skrip baru.
Glutanimate
1
@cipricus Satu pembaruan terakhir. Saya benci ikon jelek, jadi saya membuat yang baru untuk moonshiner. Pastikan untuk memeriksanya!
Glutanimate
Jawaban bagus !, tapi mungkin lebih baik membagi jawaban menjadi dua jawaban, satu untuk Nautlius-Script dan satu untuk Moonshiner. Esp. karya terakhir hebat!
matematika
0

Baris Perintah Ghostscript

Sesederhana itu:

ps2pdf "argument.pdf"

Ini akan menghasilkan argument.pdf.pdf, file yang akan (pada kebanyakan kasus) lebih kecil dari yang asli.

Skrip Nemo

Buka editor teks dan tulis:

ps2pdf "$*"

Simpan ke /home/youruser/.local/share/nemo/scripts, dengan nama intuitif, katakanlah "kurangi ukuran PDF"; tidak perlu menggunakan ekstensi file.

Lalu, terapkan chmod +x "reduce PDF size".

Jadi, Anda hanya perlu membuka Nemo, menavigasi ke file, klik kanan pada file PDF, pilih skrip, dan kemudian "kurangi ukuran PDF".

Efek samping: Tidak mengenali saham samba, menghasilkan file rusak baru.

kokbira
sumber