Chương trình GUI để thay đổi kích thước tài liệu pdf và thay đổi DPI của họ


12

Tôi thấy rằng LibreOffice Draw có thể mở pdf và xuất nó với các tùy chọn để thay đổi chất lượng và độ phân giải DPI. Nhưng các tệp pdf quét độ phân giải cao mà tôi chưa mở đúng trong ứng dụng này (chỉ trang đầu tiên được nhập) nên tôi muốn tìm một ứng dụng chuyên biệt hơn.

Tôi không yêu cầu một tùy chọn dòng lệnh vào thời điểm này (pdf của tôi quá lớn đến nỗi tất cả những gì tôi đã thử theo cách này đều thất bại).

Câu trả lời:


12

Tập lệnh Nautilus


Tôi đã có thể thay đổi kích thước thành công các tệp PDF của mình bằng tập lệnh Nautilus này:

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

Nguồn gốc: https://launchpad.net/compress-pdf

Kịch bản dựa trên nhánh này bởi oriolpont và được sửa đổi theo đề xuất của cipricus .

Bản sửa đổi của Oriolpont đi kèm với một số cải tiến:

  • Bản dịch tiếng Do Thái của Yaron
  • Hỗ trợ đa điểm dựa trên những thay đổi của Edouard Saintesprit
  • Một số điều chỉnh bash khác để làm cho tập lệnh an toàn hơn nhiều (tempfiles, chế độ an toàn hơn cho GS, kiểm tra ban đầu nhiều hơn)

Ảnh chụp màn hình

Nén


Tùy chọn

Các tùy chọn được cung cấp trong hộp thoại GUI tiện lợi tương ứng với các ghostscriptcài đặt này :

  • dPDFSETTINGS=/screen (chất lượng chỉ xem màn hình, hình ảnh 72 dpi)
  • dPDFSETTINGS=/ebook (chất lượng thấp, hình ảnh 150 dpi)
  • dPDFSETTINGS=/printer (chất lượng cao, hình ảnh 300 dpi)
  • dPDFSETTINGS=/prepress (chất lượng cao, bảo quản màu sắc, 300 dpi ims)
  • dPDFSETTINGS=/default (gần giống với / màn hình)

Thêm tùy chọn và điều chỉnh tốt trên trang web: http://milan.kupcevic.net/ghostscript-ps-pdf/

Nguồn: Công cụ dòng lệnh mã nguồn mở để tối ưu hóa PDF

Bạn có thể tìm thấy một số thông tin về các tùy chọn được sử dụng ở đây . README của Oriolpont cung cấp thêm chi tiết về việc tùy chỉnh tập lệnh theo nhu cầu của bạn.


Cài đặt

Kịch bản phụ thuộc vào một số gói. Bạn có thể cài đặt chúng với:

sudo apt-get install ghostscript poppler-utils zenity

Nếu bạn không biết cách cài đặt tập lệnh Nautilus, chỉ cần làm theo hướng dẫn sau:

Làm cách nào để cài đặt tập lệnh Nautilus?


Cài đặt trên môi trường máy tính để bàn thay thế

Tập lệnh không phụ thuộc vào bất kỳ biến Nautilus tùy chỉnh nào và có thể được sử dụng với khá nhiều trình quản lý tệp ngoài đó hỗ trợ các hành động menu tùy chỉnh. Vui lòng tham khảo hướng dẫn của người quản lý tệp của bạn về cách cài đặt tập lệnh của bạn. Người dùng XFCE có thể tìm thấy một hướng dẫn tốt đẹp ở đây .

Tất nhiên bạn cũng có thể khởi chạy tập lệnh từ dòng lệnh. Cách sử dụng cơ bản:

compresspdf "filename.pdf"

Moonshiner


Tổng quat

Kiểm soát nâng cao hơn đối với đầu ra PDF của bạn có thể đạt được với Moonshiner , giao diện người dùng GUI cho ghostscript.


Cài đặt

Moonshiner không có sẵn từ các kho chính thức. Thật không may, tôi cũng không thể tìm thấy một PPA chính thức. Chỉ có PPA riêng này chưa được cập nhật trong một thời gian. Các .debkho lưu trữ có sẵn ở đây sẽ hoạt động trên các phiên bản Ubuntu gần đây, nhưng đừng hiểu ý tôi.

Theo như tôi có thể thấy cách cài đặt moonshiner an toàn nhất là trực tiếp từ nguồn của nó. Để làm như vậy, trước tiên hãy tải xuống bản sửa đổi gần đây nhất:

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

Moonshiner phụ thuộc vào Python, PyGTK và Ghostscript. Nếu những phụ thuộc này được thỏa mãn (cần có trong bản cài đặt Ubuntu), bạn có thể tiến hành cài đặt ứng dụng với:

sudo python setup.py install

Hoặc với công cụ quản lý gói của python ( sudo apt-get install python-pip):

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

Gỡ cài đặt moonshiner rất dễ dàng với pip:

sudo pip uninstall moonshiner

Nếu bạn đi theo phương pháp cài đặt đầu tiên, bạn sẽ phải xóa tất cả các tệp đã cài đặt bằng tay.


Sử dụng

Sau khi cài đặt, bạn sẽ có thể khởi chạy Moonshiner từ dấu gạch ngang hoặc trình khởi chạy ứng dụng ưa thích của bạn. GUI khá tự giải thích. Để sửa đổi PDF, bạn chỉ cần kéo và thả tệp vào giao diện, thay đổi cài đặt bạn muốn và nhấn Go Moonshining! .

Ba thống đốc riêng biệt trong tab Hình ảnh cho phép bạn tinh chỉnh DPI và cài đặt chất lượng theo ý muốn của bạn:

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

Tôi sẽ không đi sâu vào các cài đặt khác ở đây nhưng tôi khuyến khích bạn tham khảo tài liệu chính thức cho bất kỳ câu hỏi nào bạn có thể có.


Biểu tượng tùy chỉnh

Tôi không thích biểu tượng của moonshiner, vì vậy tôi đã tạo một trong những biểu tượng của riêng mình:

Bạn có thể tải xuống SVG tại đây . Biểu tượng này dựa trên bộ biểu tượng Faenza tuyệt vời và được phát hành theo cùng giấy phép (GNU / GPL).


(1) Moonshine là tuyệt vời; (2) tôi đã tìm được nguyên nhân của lỗi: trên thực tế kịch bản cần điều chỉnh để chạy trong Xfce / Thunar ( askubuntu.com/a/280623/47206 ): dòng 150 nên được thay thế bằng : if [ -z "$pdf_file" ]; then. Tôi nên thêm thông tin đó vào câu trả lời của bạn hay bạn thích làm điều đó?

tập lệnh được sửa đổi ở đây: pastebin.com/eEWHCwK7

@cipricus Tôi đã bỏ qua tài liệu tham khảo nautilus, cảm ơn bạn! Tôi quản lý để tìm một bản sửa đổi cập nhật hơn của tập lệnh với sự hỗ trợ đa tệp và chỉnh sửa câu trả lời của tôi để bao gồm cả đề xuất của bạn và tập lệnh mới.
Glutimate

1
@cipricus Một bản cập nhật cuối cùng. Tôi ghét các biểu tượng xấu xí, vì vậy tôi đã tạo một biểu tượng mới cho moonshiner. Hãy chắc chắn để kiểm tra xem nó ra!
Glutimate

Câu trả lời tuyệt vời!, Nhưng có lẽ tốt hơn là chia câu trả lời thành hai câu trả lời, một cho Nautlius-Script và một cho Moonshiner. Đặc biệt công trình cuối cùng tuyệt vời!
toán

0

Dòng lệnh Ghostscript

Thật đơn giản:

ps2pdf "argument.pdf"

Nó sẽ tạo ra argument.pdf.pdf, một tệp sẽ (trong hầu hết các trường hợp) nhỏ hơn tệp gốc.

Kịch bản Nemo

Mở trình soạn thảo văn bản và viết:

ps2pdf "$*"

Lưu nó vào /home/youruser/.local/share/nemo/scripts, với một tên trực quan, hãy nói "giảm kích thước PDF"; không cần sử dụng phần mở rộng tập tin.

Sau đó, áp dụng chmod +x "reduce PDF size".

Vì vậy, bạn chỉ cần mở Nemo, điều hướng đến tệp, nhấp chuột phải vào tệp PDF, chọn tập lệnh và sau đó "giảm kích thước PDF".

Tác dụng phụ: Nó không nhận ra cổ phiếu samba, tạo ra một tệp bị hỏng mới.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.