วันอาทิตย์ที่ 29 ตุลาคม พ.ศ. 2566

การแปลงฟอร์แมตเอกสารด้วยโปรแกรม Pandoc

Pandoc เป็นโปรแกรมฟรีสำหรับแปลงเอกสารในรูปแบบต่างๆ ที่ใช้งานได้ทั้งบน Windows, Mac และ Linux ( ดาวน์โหลด)

รูปแบบเอกสารที่แปลงได้นั้นมีมากมายหลายฟอร์แมต อย่างเช่น markdown, html, ePUB, docx, odt, rtf, LaTeX, csv, pdf หรือแม้แต่เอกสารในรูปแบบที่เราสร้างขึ้นเองก็ยังได้ ( รูปแบบเอกสารที่รองรับ)

วิธีการติดตั้งสำหรับ Linux

sudo apt install pandoc


วิธีใช้งานคือ

pandoc [fileinput] -f [format] -t [format] -o [fileoutput]

-f คือ from หรือจะใช้ -r (read) ก็ได้

-t คือ to หรือจะใช้ -w (write) ก็ได้

-o คือ output

เช่น ต้องการแปลงจาก docx เป็น markdown

pandoc file.docx -f docx -t markdown -o file.md

ถ้าหากแปลงหลายๆ ไฟล์ มันจะจับมารวมต่อกันเป็นไฟล์เดียว

ถ้าย่อหน้านั้นยาว มันจะตัดบรรทัดให้เอง (ไฟล์ชนิด markdown และ text) หากไม่ต้องการให้ตัดย่อหน้า ต้องเพิ่มตัวเลือก --wrap=none ลงไปด้วย

pandoc --wrap=none -f docx -t markdown file.docx -o file.md

การแปลงบางฟอร์แมต (เช่น แปลงเป็น markdown) มันจะแปลงเครื่องหมาย “” ‘’ ให้เป็น "" '' ถ้าไม่ต้องการให้มันแปลง ต้องเปลี่ยนจาก markdown เป็น markdown-smart

pandoc --wrap=none -f docx -t markdown-smart file.docx -o file.md

หรือเขียนในรูปแบบ > แทนการใช้ -o ก็ได้เหมือนกัน

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

และถ้าหากไม่ได้ระบุประเภทของไฟล์ต้นทาง มันจะเดาเอาจากนามสกุลของไฟล์

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

วิธีการใช้งานอย่างละเอียด อ่านได้ที่

https://pandoc.org/MANUAL.html


ในกรณีที่ต้องการจัดการงานเขียนนิยาย ขั้นตอนที่ต้องทำคือ (ข้ามไปทำตามขั้นตอนแบบสั้นที่ด้านล่างได้เลย)

1. การทำต้นฉบับ

» 1.1 ไม่ว่าจะทำต้นฉบับด้วย MS Word, LibreOffice Writer หรือ Google Doc ถ้ากรณีแยกเป็นไฟล์ละ 1 ตอน ในบรรทัดแรกของเนื้อหา ต้องใส่ ‘ตอนที่’ หรือ ‘บทที่’ กำกับไว้ด้วย โดยเลือก style ให้เป็น หัวเรื่อง หรือ Heading 1

» 1.2 ชื่อตอน ต้องมีแค่บรรทัดเดียวเท่านั้น

» 1.3 ถ้าต้องการแยกหมายเลขตอนกับชื่อตอนเป็นคนละบรรทัด เช่น ‘ตอนที่ 1’ แล้วชื่อตอนอยู่อีกบรรทัด ให้เลือกสไตล์โดย ‘ตอนที่ 1’ ใช้ Heading 1 ส่วนชื่อตอนที่อยู่ถัดลงมา ให้ใช้ Heading 2


2. สัญลักษณ์ที่ห้ามใส่ (กรณีที่ทำต้นฉบับเป็นรูปแบบ markdown)

» 2.1 ในเนื้อหา (หรือชื่อตอน) ต้องไม่มีเครื่องหมาย # อยู่ต้นบรรทัด (เป็นสัญลักษณ์ของ heading ใน markdown)

» 2.2 ต้องไม่มีเครื่องหมาย === หรือ --- อยู่ต้นบรรทัด (เป็นสัญลักษณ์ของ heading ใน markdown)

» 2.3 ต้องไม่มีเครื่องหมาย *** (3 ตัวขึ้นไป) อยู่ต้นบรรทัด (เป็นสัญลักษณ์ของ heading ใน markdown)

» 2.4 ต้องไม่มีเครื่องหมาย * หรือ - หรือ + อยู่ต้นบรรทัด (เป็นสัญลักษณ์ของการทำ bullet ใน markdown)

» 2.5 การใส่หัวเรื่องแบบ Heading 1 ให้ใส่ # ไว้ที่ต้นบรรทัด เว้นวรรค แล้วตามด้วยตอนที่

» 2.6 เครื่องหมาย * หรือ _ คร่อมคำ คือการทำ * ตัวเอน*

» 2.7 เครื่องหมาย ** หรือ __ คร่อมคำ คือการทำ ** ตัวหนา**

» 2.8 การใส่เชิงอรรถ ใช้ [^1] [^2] [^3] … ที่คำและที่ด้านล่างตอน

» 2.9 ต้องเว้นบรรทัดทุกย่อหน้า


3. ในส่วนเนื้อหา ส่วนที่เป็นชื่อตอนกับเนื้อหา จะเว้นบรรทัดเพิ่มหรือไม่ก็ได้, ในส่วนเนื้อหา จะเว้นบรรทัดเพิ่มหรือไม่ก็ได้, ในบรรทัดสุดท้ายของตอน จะเว้นบรรทัดหรือไม่ก็ได้ หรือจะเว้นกี่บรรทัดก็ได้


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

» 4.1 แปลงด้วยเว็บแบบออนไลน์ที่เว็บ  https://products.aspose.app/words/conversion/docx-to-md ซึ่งไฟล์ที่ได้มาจะมีรหัสบรรทัดใหม่เป็น \r\n

เมื่อได้ไฟล์มาแล้ว จะ จับมารวมกัน ก็ใช้คำสั่งรวมไฟล์ เสร็จแล้วเปลี่ยนนามสกุล output.xxx เป็น output.md

for file in *.md; do (cat "${file}"; echo) >> output.xxx; done

» 4.2 แปลงด้วยโปรแกรม Pandoc ทุกไฟล์จะรวมอยู่ใน output.md เดียวกันหมด ต้องใส่ตัวเลือก --wrap=none และ markdown-smart เพื่อไม่ให้ใน .md ถูกตัดบรรทัดและแปลงเครื่องหมายคำพูด

pandoc --wrap=none -t markdown-smart *.docx -o output.md

หรือ

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


5. แปลง .md ให้เป็น .html

» 5.1 การแปลง md ให้เป็น html ด้วย Pandoc นั้น ในส่วนที่เป็นชื่อตอน ที่เลือกรูปแบบเป็นหัวเรื่อง จะถูกใส่ id กำกับเอาไว้ด้วยโดยใช้เป็นชื่อตอน แต่โดนตัดสระกับวรรณยุกต์ทิ้ง และเนื้อหาจะติดกันไม่มีการเว้นบรรทัด (Pandoc แปลงรูปแบบ md เป็น html ในส่วนการทำเชิงอรรถได้ค่อนข้างดี)

pandoc -t html output.md > output.html

» 5.2. การแปลงด้วยโปรแกรม markdown (ในบล็อก แปลง Markdown ให้เป็น HTML บน Ubuntu) จะไม่มี id ติดมาใน h1 และเนื้อหาทุกบรรทัดจะถูกเว้นวรรค ดูสวยกว่า แต่ปัญหาคือเครื่องหมายคำพูด “” ‘’ ที่ถูก Pandoc แปลงเป็น "" '' ตอนสร้างไฟล์ md จะไม่ถูกแก้ไขคืน (ตอนใช้ Pandoc แปลงเป็น md ต้องใส่ -smart ด้วย)

markdown output.md > output.html


6. ใช้ Pandoc แปลงจาก html เป็น docx อีกที วิธีนี้จะลดพวก tag ส่วนเกินทิ้งไปได้เยอะ รูปแบบ (style) ที่แปลงมา ย่อหน้าแรกจะเป็น First Paragraph ย่อหน้าที่เหลือจะเป็น Body Text

pandoc -t docx output.html > output.docx


7. ไฟล์ html ในขั้นตอนที่ 5 เอาไปใส่ในโปรแกรมสร้าง ePUB (เช่น Sigil) ได้เลย ในกรณีที่ทำชื่อตอนเป็นรูปแบบ h1 ให้สั่งค้นหา <h1> แล้วแทนที่ด้วย <hr class="sigil_split_marker" /><h1> เพื่อเป็นการใส่ Split Maker ให้กับทุกๆ หัวเรื่องของแต่ละตอน จากนั้นเมนู Edit / Splite At Markers (หรือกด F6) จะเป็นการตัดไฟล์ออกเป็นไฟล์ย่อยๆ ของแต่ละตอน ทำให้แต่ละตอนมีขนาดไฟล์ที่ไม่ใหญ่มาก


กรณีที่ต้นฉบับ (docx / odt) ทำได้เรียบร้อย และต้องการทำไฟล์ html เพียงอย่างเดียว (เพื่อเอาไปทำ ePUB) จะทำแบบขั้นตอนสั้นๆ ก็คือ

1. จับไฟล์ docx มารวมกันเป็นไฟล์เดียว ด้วย Pandoc

pandoc -t docx *.docx > output.docx


2. จะแปลงเป็น md ก่อน หรือจะแปลงเป็น html เลยก็ได้ แต่การแปลงเป็น html จาก docx โดยตรง มันจะไม่ลบช่องว่างหน้าและหลังบรรทัดให้

ถ้าแปลงเป็น html เลย ก็สั่งไปว่า

pandoc -t html *.docx > output.html

แต่ถ้าจะทำเป็น md ก่อน ก็สั่งว่า

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

จากนั้นก็เอาไฟล์ .md มาสร้างเป็น .html

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

pandoc -t html output.md > output.html

หรือ

markdown output.md > output.html


3. ไฟล์ output.html ที่ได้มา เอาเข้าไปทำ ePUB ใน Sigil ได้เลย


กรณีที่ทำต้นฉบับใน Google Doc ในรูปแบบ markdown

ตอนดาวน์โหลดแบบหลายๆ ไฟล์ จะได้เป็น .docx มา ดังนั้นจำเป็นต้องแปลงให้อยู่ในรูปแบบของ text ธรรมดาเสียก่อน

แปลงด้วย Pandoc

pandoc --wrap=none -t plain *.docx > output.md

หรือแปลงด้วยโปรแกรม LibreOffice จะได้ไฟล์ชื่อเดียวกับไฟล์ต้นฉบับ แต่มีนามสกุล .txt

libreoffice --headless --convert-to "txt:Text (encoded):UTF8" file.docx

ถ้าต้องการแปลงหลายๆ ไฟล์ ก็สั่งเป็น *.docx ได้เลย

libreoffice --headless --convert-to "txt:Text (encoded):UTF8" *.docx


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



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

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