Wednesday, August 10, 2005
gs แปลง PDF ภาษาญี่ปุ่นเป็น PNG
gs (GhostScript) สามารถแปลงไฟล์ PS/PDF ให้เป็นรูปแบบอื่นๆ
เช่น GIF, PNG ฯลฯ ได้อยู่แล้ว โดยกำหนดตัวเลือก -sDEVICE=...
ซึ่งรายชื่อ Device ที่สนับสนุนก็ดูได้จาก gs -help
ส่วนชื่อไฟล์ปลายทางก็ระบุโดย -sOutputFile=... ถ้าเอกสาร PDF มีหลายหน้าก็จะได้ออกมาหลายไฟล์ โดยใส่
%d ไว้ในชื่อไฟล์ gs จะใส่เลขหน้าแทนให้เอง
เช่น ในการแปลง PDF เป็น PNG คำสั่งเต็มๆจะเป็น
gs -dNOPAUSE -sDEVICE=png16m -sOutputFile=my-%d.png -- my.pdfโดย
-dNOPAUSE บอกว่าไม่ต้องหยุดรอทีละหน้า ทำไปเรื่อยๆได้เลย
และ -- ระบุว่าเสร็จงานแล้วให้ Quit ปิดโปรแกรมไปเลย ไม่งั้น
gs จะรอคำสั่งถัดไป
ประเด็นของเรื่องคือ กำลังเอาคำสั่งนี้มาทำ CGI (Servlet) สำหรับแปลง PDF ที่อัพโหลดมาเป็น
PNG (หลายไฟล์) แล้ว ZIP ส่งกลับไป ซึ่งใช้งานได้ดีแล้วกับ PDF อังกฤษ แต่ gs
บนเครื่องที่ใช้ยังไม่สนับสนุนภาษาญี่ปุ่น
เพราะไม่ได้ลงจากชุด Linux ญี่ปุ่น ลองใส่ไฟล์ PDF ญี่ปุ่นเข้าไป มันจะบ่นว่าไม่รู้จักฟอนต์บ้าง
ไม่รู้จัก CMap บ้าง ฯลฯ
เท่าที่ค้นๆดู ไปเจอวิธีการ สำหรับ Debian คือ ให้ติดตั้งแพคเกจ ที่ชื่อ
gs-cjk-resource และ cmap-adobe-japan1
แต่พอดีเห็นว่ามี
cmap-adobe-japan2 ด้วย ก็เลยติดตั้งแถมให้อีกตัว
เริ่มเปิดไฟล์ญี่ปุ่นบางไฟล์ได้แล้ว แต่บางไฟล์ยังติดปัญหา CMAP อยู่ เช่น
"90msp-RKSJ-H undefined"
ลองใช้คำสั่ง strace ดู พบว่าขณะทำงาน gs
หา CMAP จาก /usr/share/ghostscript/CMap
ซึ่งเป็น symlink ไปที่ /var/lib/defoma/gs.d/dirs/CMap/
ก็เลยต้องลอง man defoma เจอว่ามีคำสั่ง
defoma-font register-all
ซึ่งในการเรียกใช้ต้องการ hint file
ลองเปิดดูเนื้อหาของแพคเกจที่เพิ่งติดตั้ง ด้วยคำสั่ง
dpkg -L cmap-adobe-japan1
เห็นว่ามีไฟล์ hints อยู่หลายอัน ปกติเวลาติดตั้งมันน่าจะเรียกคำสั่งติดตั้งที่จำเป็นให้อยู่แล้ว ?
ไม่เป็นไร ลองใหม่ไม่น่าจะเสียหาย
defoma-font register-all /etc/defoma/hints/cmap-adobe-japan1.ext.hintsทุกอย่างผ่านไปอย่างเงียบสงบ ลอง
gs อีกที คราวนี้เปิดไฟล์ญี่ปุ่นได้แล้ว :)
ก็เลยลองทำกับทุกไฟล์ hints
defoma-font register-all /etc/defoma/hints/cmap-adobe-japan1.opt.hints defoma-font register-all /etc/defoma/hints/cmap-adobe-japan1.std.hints defoma-font register-all /etc/defoma/hints/cmap-adobe-japan2.hintsปรากฏว่าสองคำสั่งสุดท้าย มันบอกว่าถูก Register ไว้เรียบร้อยแล้ว อาจจะตอนติดตั้งแพคเกจ
apt-get install
แต่ดันทำให้ไม่ครบ ?
สุดท้ายยังพบว่ามีปัญหากับบางไฟล์ PDF อยู่ดี
ซึ่งบางทีต้องเปิดด้วย gs-gpl (Ghostscript 8.15)
ซึ่งบน Debian เป็นคนละเวอร์ชั่นกับ gs (Ghostscript 7.07.1) เฉยๆ
นอกจากนี้ยังมี gs-afpl อีกอันด้วย เยอะจนใช้ไม่ถูก
ฟอนต์ญี่ปุ่นที่ใส่ไปเมื่อกี้ ดูเหมือนจะไม่มีผลกับ gs-gpl อีกต่างหาก
สงสัยเอา Linux ญี่ปุ่นมาลงแต่แรกน่าจะง่ายกว่า ? เดี๋ยวต้องลองบน Knoppix-JP
