เคยได้ยินมาว่าปัญหาที่เราเจอในการทำงานส่วนมากหรือเกือบทั้งหมด เคยมีคนเจอมาแล้วทั้งนั้น โดยเฉพาะอย่างยิ่งเกี่ยวกับการใช้โปรแกรมคอมพิวเตอร์ สิ่งที่เราต้องการให้โปรแกรมทำ ปัญหาที่พบ หรือช่วยทำให้ง่ายขึ้น เคยมีคนคิดทำมาแล้วเป็นส่วนใหญ่
ช่วงนี้กำลังทำงานด้านเอกสาร คือต้องแปลงไฟล์จากประเภทหนึ่งไปเป็นอีกประเภทหนึ่ง หากใช้วิธีปกติ ก็ต้องเปิดโปรแกรม Office ขึ้นมา แล้วเลือกเมนู Save as ระบุชนิดไฟล์ที่เราต้องการจะแปลง หากมีไม่กี่ไฟล์ก็ไม่เท่าไร แต่ถ้ามีเป็น 100 ไฟล์ คงใช้เวลานาน และค่อนข้างน่าเบื่อกันเลยทีเดียว
เลยหาวิธีการแปลงไฟล์โดยการรันคำสั่งแบบ command line หรือรันเป็นแบตช์ไฟล์ ค้นหาจาก google สักพัก นำมาทดลอง ก็ได้วิธีที่อยู่ใกล้ตัวมาก คือใช้คำสั่ง soffice ของโปรแกรม LibreOffice ตามด้วยออปชั่น ก็สามารถใช้แปลงไฟล์ได้เลย ไม่จำเป็นต้องเปิดโปรแกรมแต่อย่างใด เห็นว่าน่าจะมีประโยชน์เลยนำมาแชร์ แนะนำกัน
ในที่นี้ทดสอบบน CentOS 6.3 ตอนติดตั้งเลือกติดตั้ง Packages ชื่อ “Office Suite and Productivity” หรือใช้ yum ติดตั้งภายหลังก็ได้
หมายเหตุ การใช้คำสั่ง soffice นี้ สามารถนำไปใช้กับโปรแกรม LibreOffice ที่ติดตั้งบน Windows ได้ แต่ต้องระบุ path ให้ถูกต้อง เช่น C:\Program Files (x86)\LibreOffice 3.6\program\soffice.exe
ตัวอย่างไฟล์ที่จะทดสอบ
[user1@cent6 ~]$ ls -l total 12 -rw-r--r--. 1 user1 users 9216 Feb 28 16:38 test-file.doc
ถ้าต้องการรันคำสั่ง แบบไม่ต้องแสดงโปรแกรม (X Window) ขึ้นมา สำหรับ soffice ต้องระบุออปชั่น –headless
ระบุออปชั่น –convert-to ตามด้วยประเภทของไฟล์ที่ต้องการแปลง สำหรับการแปลงเป็น txt ให้ระบุเป็น txt:text
ตามด้วยชื่อไฟล์ที่ต้องการแปลง
ตัวอย่างเช่น
[user1@cent6 ~]$ soffice --headless --convert-to txt:text test-file.doc
/usr/lib64/libreoffice/program/soffice.bin X11 error: Can't open display:
Set DISPLAY environment variable, use -display option
or check permissions of your X-Server
(See "man X" resp. "man xhost" for details)
หากขึ้นข้อความแบบนี้ แปลว่าการแปลงไฟล์ไม่สำเร็จ เพราะตอนนี้ soffice ไม่สามารถรันในโหมด headless ที่ไม่ต้องใช้ X Window ได้
วิธีการแก้ไข ให้ soffice รันโหมด headless ได้ ต้องลงไฟล์ rpm ชื่อ libreoffice-headless
ล็อกอินเป็น root แล้วติดตั้งไฟล์ rpm เพิ่มเติม
[root@cent6 ~]# mount /dev/cdrom /mnt/ mount: block device /dev/sr0 is write-protected, mounting read-only [root@cent6 ~]# cd /mnt/Packages/ [root@cent6 Packages]# rpm -i libreoffice-headless-3.4.5.2-16.el6.x86_64.rpm
ลองรันคำสั่ง soffice แปลงใหม่อีกครั้ง
[user1@cent6 ~]$ soffice --headless --convert-to txt:text test-file.doc convert /home/user1/test-file.doc -> /home/user1/test-file.txt using text
หากแปลงไฟล์สำเร็จ จะมีไฟล์เกิดขึ้น นามสกุล .txt
[user1@cent6 ~]$ ls -l
total 16
-rw-r--r--. 1 user1 users 9216 Feb 28 16:38 test-file.doc
-rw-r--r--. 1 user1 users 213 Feb 28 17:19 test-file.txt
ไฟล์ txt ที่ได้
[user1@cent6 ~]$ cat test-file.txt ทดสอบการแปลงไฟล์เอกสารจาก doc ไปเป็น txt เนื้อหาในไฟล์เอกสารบรรทัดที่ 2 document content
สำหรับการแปลงไฟล์ประเภทอื่นๆ ลองเปลี่ยนจาก txt:text เป็นชื่อไฟล์ประเภทอื่นๆ กันครับ