TIP: บีบ pdf โตๆ ให้เล็กลงด้วย ghostscript ใน Ubuntu


วันนี้มีทิปใหม่ๆ มานำเสนออีกแล้วครับ เป็นความรู้ที่ผมคิดว่ามีประโยชน์แก่นักศึกษาและผู้ที่มีความจำเป็นต้องทำงานเกี่ยวกับเอกสารใน Ubuntu

ต้นเรื่องคือวันนี้น้องสาวผมมีรายงานที่ต้องส่งทาง email รายงานนี้ได้สร้างโดยใช้ OpenOffice.org และ export ออกมาเป็น pdf แต่ว่าขนาดไฟล์ pdf ใหญ่มาก 50 MB กว่าเลยทีเดียว ก็เพราะมันเล่นยัดรูปถ่ายจากกล้องใส่เข้าไปเต็มที่ She ไม่มีการ resize อะไรทั้งนั้น กรรมจริงๆ

จากท่าไม้ตายการค้น Google ผมก็เจอกระทู้ใน Ubuntuforums http://ubuntuforums.org/showthread.php?t=1133357

คำแนะนำของ kaibob คือให้ใช้ Ghostscript ซึ่งเป็นโปรแกรมที่ติดมากับ Ubuntu อยู่แล้ว โดยป้อนคำสั่งดังนี้ใน Terminal

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

โดยแทนที่ชื่อ input.pdf และ output.pdf เป็นชื่อไฟล์ input และ output ที่เราต้องการ

จากคำสั่งข้างต้น ผมสามารถลดจาก 53.1 MB เหลือแค่ 2.8 MB WOW! ถือว่าประสบความสำเร็จมากๆ แต่พอลองเปิดดูใน Evince ก็พบว่าภาพที่แทรกไว้ในเอกสารมันแตก หยาบๆ

ไม่ได้การหละ เลยลองค้นดูใหม่ก็พบอีกกระทู้ http://ubuntuforums.org/showthread.php?t=1195847 ที่ลิงค์ไปยัง http://pages.cs.wisc.edu/~ghost/doc/cvs/Ps2pdf.htm ซึ่งบอกรายละเอียดเกี่ยวกับฟังก์ชัน PostScript to PDF convert ก็ได้ความว่า option หลักที่เราควรให้ความสนใจในกรณีนี้คือ -dPDFSETTINGS ตัวเลือกของ option นี้มีอยู่ 5 แบบให้เลือกใช้ครับ

  • /screen selects low-resolution output similar to the Acrobat Distiller “Screen Optimized” setting.
  • /ebook selects medium-resolution output similar to the Acrobat Distiller “eBook” setting.
  • /printer selects output similar to the Acrobat Distiller “Print Optimized” setting.
  • /prepress selects output similar to Acrobat Distiller “Prepress Optimized” setting.
  • /default selects output intended to be useful across a wide variety of uses, possibly at the expense of a larger output file

จาก http://pages.cs.wisc.edu/~ghost/doc/cvs/Ps2pdf.htm

อ่านรายละเอียดทั้งจากในข้อความและในตารางเปรียบเทียบแล้วก็ไม่รู้เรื่องสักเท่าไร แหะแหะๆ เพราะตั้งแต่เกิดมาก็ยังไม่เคยเข้าไปยุ่งกับ Adobe Acrobat Distiller แบบโดยตรงสักที เคยแต่ใช้ผ่าน Adobe Acrobat (ตอนที่ยังใช้โปรแกรมเถื่อนใน Windows) เลยต้องเดาเอาสักอัน ชั่งใจดูสักพักก็ลองเลือก /printer ด้วยเหตุผลที่ว่ามันมีคำว่า Printer อยู่ (ง่ายดีเนอะ) ฉะนั้น คำสั่งอันใหม่ของเราก็คือ

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

คราวนี้ได้ไฟล์ออกมา 8.2 MB ครับ ใหญ่กว่าครั้งแรกพอควร แต่ก็ยังอยู่ในขนาดที่ยอมรับได้ ลองเปิดดูใน Evince ก็ผ่าน ภาพออกมาสวยงามไม่แตกเละเทะเหมือนครั้งแรก เหมาะแก่การเอาไป print เลย (พอมั่วถูก นี่แถไปเลยนะ :-P)


ป.ล. นอกจาก Ghostscript แล้วก็ยังมีอีกสองทางเลือกในการลดขนาดไฟล์ pdf เบ้งๆ ได้แก่ pdftk และ imagemagick

กรณีของ pdftk ใช้

pdftk -compress input.pdf output output.pdf

กรณีของ imagemagick ก็ใช้

convert input.pdf -compress Zip output.pdf

ผมลองแล้วไม่น่าจะประทับใจเท่าไร pdftk ภาพไม่แตกเลย แต่ขนาดไฟล์เท่าเดิมเป๊ะ (compress ยังไงของมันฟระ?) ส่วน imagemagick กลายเป็นว่ามัน convert ทุกอย่างเป็น image สมชื่อเลยครับ ภาพก็แตก ตัวหนังสือ (ที่ convert เป้น image) ก็แตก

ป.ล. อีกที ระหว่างที่ Ghostscript ทำงานจะมีคำเตือนขึ้นเป็นแถบๆ แถมซด CPU เต็ม 100% อย่าไปตกใจนะครับ ไม่มีอะไร

ป.ล. กันอีกรอบ คนที่ใช้ Windows สามารถลดขนาดไฟล์ pdf ได้จากโปรแกรม Adobe Acrobat ครับ (ไม่ใช่ Adobe Reader นะ) ลองหาๆ ดูเอาเองแล้วกัน ไม่ต้องถึงกับลำบากลำบนมานั่งลง Ubuntu ใช้คำสั่งอะไรๆ ให้วุ่นวายอย่างนี้ ทิปนี้สำหรับคนใช้ Ubuntu ครับ

Advertisements

2 Responses to TIP: บีบ pdf โตๆ ให้เล็กลงด้วย ghostscript ใน Ubuntu

  1. เกรียนได้ใจ says:

    เผ่าจอมเทพ post อะไรที่มีประโยชน์เป็นกะเขาด้วยน่าแปลกจิงๆ

  2. bbx says:

    ขอจดใว้ทำตามบ้าง

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: