วันเสาร์ที่ 15 มิถุนายน พ.ศ. 2567

แปลงเอกสารด้วย Pandoc (ตอนที่ 2)

ก่อนหน้านี้เขียนบล็อกเรื่อง การแปลงฟอร์แมตเอกสารด้วยโปรแกรม Pandoc เอาไว้ แต่ด้วยความที่เขียนในรูปแบบบันทึกกันลืม และเขียนรวมกับการทำต้นฉบับเพื่อเอาไปทำ ePUB ด้วย เลยอ่านแล้วจะดูงงๆ หน่อย

ตอนนี้เลยมาชำระเขียนใหม่เพื่อให้เข้าใจง่ายขึ้น เน้นเฉพาะการใช้ Pandoc เพื่อแปลงไฟล์โดยตรง

Pandoc คือโปรแกรมเอาไว้สำหรับแปลงเอกสารในรูปแบบต่างๆ ที่ใช้งานได้ฟรี ถึงแม้ว่าต้องพิมพ์คำสั่งเอาเอง ไม่ใช่ปุ่มกดใช้งานแบบสำเร็จรูป แต่สามารถแปลงเอกสารได้หลายฟอร์แมต ทำให้สะดวกต่อการทำ ePUB มาก

คำสั่งต่างๆ มีตัวเลือกเยอะมาก ไปดูรายละเอียดเพิ่มเติมได้ที่ → คู่มือการใช้งานเพิ่มเติม , ชนิดของไฟล์ที่แปลงได้


1. การดาวน์โหลดและติดตั้ง

1.1 ถ้าเป็น Windows หรือ Mac ไปโหลดได้จาก ดาวน์โหลด Pandoc

1.2 ถ้าเป็น Linux ให้ติดตั้งจาก terminal โดยพิมพ์ว่า

sudo apt install pandoc


2. การใช้งาน ให้สร้างโฟลเดอร์ที่เราจะทำงานด้วย แล้วเอาไฟล์ที่ต้องการแปลงไปใส่ในนั้น (ใส่เฉพาะที่ต้องการแปลงในแต่ละครั้ง จะทำงานได้สะดวกกว่าโยนเข้าไปทีเดียวทั้งหมด) เสร็จแล้วก็ cd เพื่อย้ายไปทำงานใน directory ที่กำหนด


3.1 การสั่งงานรูปแบบที่ง่ายที่สุดคือ

pandoc ไฟล์ต้นฉบับ > ไฟล์ที่ต้องการแปลง

โดย pandoc จะเดาเอาจากนามสกุลเอง เช่นจะแปลงไฟล์ docx ให้เป็น html

pandoc a.docx > a.html


3.2 การแปลงบางฟอร์แมต เช่นแปลงเป็น markdown หรือ text ไม่สามารถใช้วิธีตามข้อ 3.1 ได้ มันจะแปลงเป็น html จำเป็นต้องเพิ่มพารามิเตอร์ -t markdown หรือ -t plain ลงไปด้วย (-t หมายถึง to แล้วก็ตามด้วยฟอร์แมตที่เราต้องการแปลง)

pandoc -t markdown a.docx > a.md

pandoc -t plain a.docx > a.txt

แต่การใส่พารามิเตอร์ markdown มีข้อเสียคือมันจะแปลงเครื่องหมายคำพูด “” หรือ ‘’ ให้กลายเป็น " ' ธรรมดา ดังนั้นถ้าไม่ต้องการให้มันแปลง ต้องใช้ markdown-smart แทน

pandoc -t markdown-smart a.docx > a.md


3.3. การแปลงฟอร์แมตปลายทางเป็น markdown กับ text จะมีการตัดขึ้นบรรทัดใหม่เมื่อจำนวนตัวอักษรเกินที่กำหนด (ค่าตั้งต้นคือ 72 ตัวอักขระ) หากไม่ต้องการให้มีการตัดบรรทัด ต้องใส่พารามิเตอร์ --wrap=none ด้วย

pandoc -t markdown-smart --wrap=none a.docx > a.md

pandoc -t plain --wrap=none a.docx > a.txt


4. หากต้องการรวมหลายๆ ไฟล์ให้เป็นไฟล์เดียว (จะแปลงฟอร์แมตหรือไม่ก็ตาม) ใช้ * แทนชื่อไฟล์ (ไม่สามารถใช้ *.* ได้)

pandoc *.docx > a.html


5.1 หากต้องการแปลงหลายๆ ไฟล์ โดยไม่รวมผลลัพธ์ให้เป็นไฟล์เดียว แต่เป็นชื่อตามต้นทางแยกเป็นแต่ไฟล์ กรณี Linux ใช้คำสั่งดังนี้

แปลง html เป็น docx

for f in *.html ; do pandoc "${f}" -f html -t docx -s -o "${f}.docx" ; done

แปลง docx เป็น html

for f in *.docx ; do pandoc "${f}" -f docx -t html -s -o "${f}.htm" ; done

แปลง docx เป็น text + ไม่ตัดบรรทัด

for f in *.docx ; do pandoc "${f}" -f docx -t plain --wrap=none -s -o "${f}.txt" ; done

แปลง docx เป็น markdown + ไม่ตัดบรรทัด

for f in *.docx ; do pandoc "${f}" -f docx -t markdown-smart --wrap=none -s -o "${f}.md" ; done


รูปแบบการแปลง ก็ตามที่อธิบายไว้ด้านบน คือให้ไล่หาไฟล์นามสกุลที่ต้องการในโฟลเดอร์ แล้วแปลงให้เป็นฟอร์แมตปลายทางที่ต้องการ

ตรงพารามิเตอร์ ${f} กับ ${f}.docx ที่ต้องมีเครื่องหมาย "" ครอบไว้ ก็เพื่อป้องกันกรณีที่ชื่อไฟล์มีเว้นวรรคอยู่ในชื่อด้วย


5.2 การแปลงใน Mac ใช้คำสั่งดังนี้

แปลงไฟล์ .md ให้เป็น .pdf

find ./ -iname "*.md" -type f -exec sh -c 'pandoc "${0}" -o "${0%.md}.pdf"' {} \;


หรือถ้าต้องการระบุโฟลเดอร์ปลายทาง ก็กำหนดไปด้วย

แปลงไฟล์ .html ให้เป็น .md

find ./ -iname "*.html" -type f -exec sh -c 'pandoc "${0}" -o "./output/$(basename ${0%.html}.md)"' {} \;


※※※※※

[ Reference ]

Systematic way to convert multiple markdown files to html

Converting all files in a folder to md using pandoc on Mac

[ Keywords ]

แปลงไฟล์

ไม่มีความคิดเห็น:

แสดงความคิดเห็น