แปลงไฟล์ DOCX เป็น PDF จำนวนมากด้วย LibreOffice CLI

หากคุณมีโฟลเดอร์ไฟล์ Word อยู่ LibreOffice สามารถแปลงไฟล์เหล่านั้นได้ด้วยคำสั่งเดียว จากโฟลเดอร์ที่มีไฟล์ DOCX ให้สร้างโฟลเดอร์เอาต์พุตว่างเปล่า แล้วเรียกใช้คำสั่งนี้ คำสั่งlibreoffice --headless --convert-to pdf:writer_pdf_Export --outdir pdf *.docxนี้จะใช้ตัวกรองการส่งออก PDF ของ Writer และคงไฟล์ต้นฉบับไว้

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

ดำเนินการแปลงข้อมูลแบบกลุ่มอย่างง่าย ๆ

ใน Linux ให้เปิดเทอร์มินัลในไดเร็กทอรีที่มีไฟล์อยู่ ก่อนอื่นให้สร้างไดเร็กทอรีสำหรับเก็บไฟล์เอาต์พุตก่อน:

mkdir -p pdf
libreoffice --headless --convert-to pdf:writer_pdf_Export --outdir pdf *.docx

--headlessคำสั่ง นี้ทำงานโดยไม่เปิดหน้าต่างเดสก์ท็อปตามปกติ--convert-toเลือก PDF เป็นรูปแบบปลายทางwriter_pdf_Exportตั้งชื่อตัวกรองการส่งออก PDF ของ LibreOffice Writer และ--outdir pdfส่งผลลัพธ์ไปยังpdfโฟลเดอร์ที่กำหนด เชลล์จะขยาย*.docxเพื่อค้นหาไฟล์ที่ตรงกันก่อนที่ LibreOffice จะเริ่มทำงาน LibreOffice ได้บันทึกไวยากรณ์การแปลงและชื่อตัวกรองนี้ไว้ในเอกสารอ้างอิงพารามิเตอร์บรรทัดคำสั่งและ รายการ ตัวกรองการแปลงไฟล์

เทอร์มินัล Linux แสดงคำสั่งแบตช์ของ LibreOffice ที่แปลงไฟล์ DOCX เป็น PDF และแสดงรายการไฟล์ PDF ที่ได้
ตัวอย่างผลลัพธ์ที่แสดงในเทอร์มินัลหลังจากส่งไฟล์ DOCX จำนวนเล็กน้อยไปยัง LibreOffice โดยใช้ตัวกรองการส่งออก PDF Writer

เลือกรูปแบบการผลิตที่เหมาะสม

คำสั่ง wildcard เหมาะที่สุดเมื่อไฟล์ DOCX ทั้งหมดอยู่ในโฟลเดอร์อินพุตเดียวกัน คำสั่งนี้จะไม่ค้นหาในโฟลเดอร์ย่อย บน Linux รูปแบบการค้นหาจะคำนึงถึงตัวพิมพ์ใหญ่เล็กโดยค่าเริ่มต้น ดังนั้น*.docxอาจข้ามไฟล์ที่ลงท้ายด้วย.DOCX. หากเชลล์แจ้งว่ารูปแบบไม่ตรงกัน ให้แสดงรายการไฟล์และตรวจสอบนามสกุลของไฟล์ก่อนที่จะเปลี่ยนคำสั่ง

สำหรับเอกสารที่อยู่ในโฟลเดอร์ย่อย การวนซ้ำจะช่วยรักษาสภาพโครงสร้างของไดเร็กทอรีและหลีกเลี่ยงการชนกันเมื่อสองโฟลเดอร์มีไฟล์ชื่อเดียวกัน ตั้งค่าinputให้กับโครงสร้างต้นทางและpdfโครงสร้างปลายทางแยกต่างหาก:

input="$PWD/input"
output="$PWD/pdf"
profile="file:///tmp/lo-batch-profile"

find "$input" -type f -iname '*.docx' -print0 |
while IFS= read -r -d '' file; do
  rel="${file#"$input"/}"
  dest="$output/$(dirname "$rel")"
  mkdir -p "$dest"
  libreoffice --headless \
    -env:UserInstallation="$profile" \
    --convert-to pdf:writer_pdf_Export \
    --outdir "$dest" "$file"
done

-print0และระบบจับคู่read -d ''จะจัดการกับช่องว่างและอักขระผิดปกติส่วนใหญ่ในชื่อไฟล์ได้อย่างปลอดภัย โปรไฟล์แยกต่างหากจะป้องกันไม่ให้งานแบตช์นี้แข่งขันกับเซสชัน LibreOffice บนเดสก์ท็อปที่ใช้โปรไฟล์ผู้ใช้เดียวกัน ดูเอกสารอ้างอิงการเริ่มต้นของ LibreOffice -env:UserInstallationใช้เส้นทางโปรไฟล์ที่ไม่ซ้ำกันหากงานแปลงสองงานอาจทำงานพร้อมกัน เก็บโครงสร้างผลลัพธ์ไว้นอกโครงสร้างอินพุตเพื่อไม่ให้การค้นหาไปรบกวนผลลัพธ์ก่อนหน้า

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

เมื่อ LibreOffice เปิดใช้งานอยู่แล้ว

คำสั่งอาจดูเหมือนเสร็จสิ้นโดยไม่สร้างไฟล์ หรืออาจเชื่อมต่อกับกระบวนการ LibreOffice ที่มีอยู่แล้ว อินสแตนซ์เดสก์ท็อปที่กำลังทำงานอยู่สามารถเก็บโปรไฟล์ผู้ใช้เริ่มต้นได้ ปิด LibreOffice แล้วลองใหม่อีกครั้ง สำหรับงานที่ไม่ต้องมีผู้ดูแล ตัว-env:UserInstallationเลือกการแยกในตัวอย่างแบบเรียกซ้ำเป็นมาตรการป้องกันที่มีประโยชน์ กำหนดไดเร็กทอรีโปรไฟล์ให้กับงานที่ทำงานพร้อมกันแต่ละงาน และรอให้งานหนึ่งเสร็จสิ้นก่อนที่จะนำไดเร็กทอรีนั้นกลับมาใช้ใหม่

หากคำสั่งระบุlibreoffice: command not foundว่า ให้ติดตั้ง LibreOffice ผ่านแหล่งแพ็กเกจที่รองรับของระบบปฏิบัติการของคุณ หรือใช้เส้นทางแบบเต็มของไฟล์ปฏิบัติการ ใน Windows PowerShell สามารถเขียนคำสั่งแบตช์แบบง่ายๆ ที่ไม่ใช้การเรียกซ้ำได้ดังนี้:

$src = (Resolve-Path .).Path
$out = Join-Path $src 'pdf'
New-Item -ItemType Directory -Force -Path $out | Out-Null
$soffice = "$env:ProgramFiles\LibreOffice\program\soffice.exe"
Get-ChildItem -File -Filter *.docx | ForEach-Object {
  & $soffice --headless --convert-to pdf:writer_pdf_Export --outdir $out $_.FullName
}

ปรับเปลี่ยน$sofficeหาก LibreOffice ติดตั้งอยู่ที่อื่น เรียกใช้คำสั่งจากโฟลเดอร์ต้นทาง และใช้โฟลเดอร์ปลายทางใหม่ PowerShell Get-ChildItem -Fileจะค้นหาเฉพาะโฟลเดอร์นั้นเว้นแต่จะร้องขอการค้นหาแบบวนซ้ำ งานแบบวนซ้ำจำเป็นต้องมีลูปที่สร้างโฟลเดอร์ปลายทางที่สอดคล้องกันสำหรับแต่ละเส้นทางต้นทาง

อะไรบ้างที่อาจส่งผลต่อผลลัพธ์?

การแปลงไฟล์ PDF จะรักษาเค้าโครงที่ LibreOffice สามารถตีความได้ แต่ Word และ LibreOffice อาจไม่ได้จัดหน้าเอกสารเหมือนกันเสมอไป ฟอนต์ที่หายไป วัตถุฝังตัวที่ไม่รองรับ การเปลี่ยนแปลงที่ติดตาม ฟิลด์ หรือตารางที่ซับซ้อน อาจทำให้การขึ้นบรรทัดใหม่และจำนวนหน้าคลาดเคลื่อนได้ เพื่อให้ได้รูปแบบตัวอักษรที่สม่ำเสมอ โปรดติดตั้งฟอนต์ที่เอกสารต้องการก่อนทำการแปลง ไฟล์ที่ได้รับการป้องกันหรือเข้ารหัสด้วยรหัสผ่านอาจต้องเปิดด้วยข้อมูลรับรองหรือจัดการด้วยตนเอง และไฟล์ DOCX ที่เสียหายอาจล้มเหลวในการแปลงแม้ว่าไฟล์อื่นจะแปลงได้สำเร็จก็ตาม

อย่าเรียกใช้คำสั่งสร้างชุดไฟล์ซ้ำๆ ลงในโฟลเดอร์ที่มีไฟล์ PDF สำคัญๆ ที่มีชื่อตรงกัน ควรใช้ปลายทางที่สะอาด หรือสำรองข้อมูลผลลัพธ์ที่มีอยู่ก่อน หากมีไฟล์ใดไฟล์หนึ่งสำคัญเป็นพิเศษ ให้เปิดไฟล์นั้นใน LibreOffice Writer และตรวจสอบก่อนที่จะใช้ไฟล์ PDF นั้น หากการกำหนดหมายเลขหน้าให้ตรงกับ Microsoft Word เป็นข้อกำหนดตามสัญญา LibreOffice อาจไม่ใช่โปรแกรมที่เหมาะสม ควรเปรียบเทียบตัวอย่างที่แสดงในโปรแกรมที่กำหนดรูปแบบที่ต้องการ

เทอร์มินัล Linux แสดงภาพ LibreOffice ทำงานแบบไม่มีหน้าจอแสดงผล โดยใช้โปรไฟล์การติดตั้งผู้ใช้แยกต่างหากก่อนการส่งออกไฟล์ PDF
ตัวอย่างคำสั่งที่ใช้โปรไฟล์ผู้ใช้ LibreOffice แยกต่างหากสำหรับการแปลงไฟล์แบบอัตโนมัติ

ตรวจสอบผลลัพธ์ก่อนแชร์

ขั้นแรกให้เปรียบเทียบจำนวนไฟล์ต้นฉบับกับจำนวนไฟล์ PDF บนระบบ Linux คำสั่งเหล่านี้จะนับจำนวนไฟล์ในโฟลเดอร์แบบเรียบ:

find . -maxdepth 1 -type f -iname '*.docx' | wc -l
find pdf -maxdepth 1 -type f -iname '*.pdf' | wc -l

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

ตรวจสอบไฟล์ PDF ตัวอย่างในโปรแกรมดูไฟล์ PDF ตรวจสอบหน้าแรกและหน้าสุดท้าย จำนวนหน้า ระยะขอบ ตาราง ส่วนหัวและส่วนท้าย รูปภาพ และตัวแบ่งหน้าต่างๆ ที่สำคัญ หากpdfinfoติดตั้งโปรแกรม ดูไฟล์ PDF ไว้ pdfinfo pdf/Report.pdfโปรแกรมจะให้ข้อมูลเมตา เช่น จำนวนหน้าและขนาดหน้า แต่จะไม่ประเมินความถูกต้องของภาพ แปลงไฟล์อีกครั้งหลังจากแก้ไขปัญหาเฉพาะ เช่น การติดตั้งฟอนต์ที่หายไปหรือการเปลี่ยนไดเร็กทอรีเอาต์พุต จากนั้นตรวจสอบไฟล์ PDF ที่ได้รับผลกระทบอีกครั้ง

เทอร์มินัล Linux จะแสดงผลลัพธ์จากคำสั่ง pdfinfo ซึ่งแสดงจำนวนหน้า ขนาดหน้า และขนาดไฟล์ของไฟล์ PDF ที่แปลงแล้ว
ตัวอย่างมุมมองการตรวจสอบที่แสดงข้อมูลเมตาของไฟล์ PDF เช่น จำนวนหน้าและขนาดกระดาษ

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

ฝากความเห็น

สร้างไฟล์ PDF ที่กรอกข้อมูลได้จากแบบฟอร์มใน LibreOffice Writer

สร้างไฟล์ PDF ที่กรอกข้อมูลได้จากแบบฟอร์มใน LibreOffice Writer

เพิ่มช่องข้อความที่ใช้งานได้ ช่องทำเครื่องหมาย และเมนูแบบเลื่อนลงใน Writer จากนั้นส่งออกเป็นไฟล์ PDF ที่ผู้รับสามารถกรอกข้อมูลและบันทึกได้

สร้างไฟล์ PDF ด้วย LibreOffice โดยคงแบบอักษรที่คุณใช้ไว้

สร้างไฟล์ PDF ด้วย LibreOffice โดยคงแบบอักษรที่คุณใช้ไว้

แก้ไขปัญหาฟอนต์หายไปหรือถูกแทนที่ในไฟล์ PDF ที่สร้างด้วย LibreOffice Writer เลือกโปรไฟล์การส่งออกที่ถูกต้อง และตรวจสอบว่าฟอนต์ใดบ้างที่ฝังอยู่ในไฟล์ก่อนที่จะแชร์

แปลงไฟล์ DOCX เป็น PDF จำนวนมากด้วย LibreOffice CLI

แปลงไฟล์ DOCX เป็น PDF จำนวนมากด้วย LibreOffice CLI

แปลงโฟลเดอร์เอกสาร Word เป็นไฟล์ PDF ด้วยคำสั่งของ LibreOffice จัดการโฟลเดอร์ย่อยได้อย่างปลอดภัย และตรวจสอบผลลัพธ์ก่อนแชร์

ใช้เทมเพลตของคุณสำหรับเอกสารที่เขียนขึ้นใหม่ทุกฉบับ

ใช้เทมเพลตของคุณสำหรับเอกสารที่เขียนขึ้นใหม่ทุกฉบับ

ตั้งค่าเทมเพลต LibreOffice Writer แบบกำหนดเองเป็นค่าเริ่มต้น เพื่อให้เอกสารใหม่เปิดขึ้นด้วยสไตล์และเค้าโครงหน้ากระดาษที่คุณต้องการ

ตั้งค่า LibreOffice ให้รู้จัก Java Runtime ของคุณ

ตั้งค่า LibreOffice ให้รู้จัก Java Runtime ของคุณ

ติดตั้ง Java runtime ที่เข้ากันได้ เปิดใช้งานใน LibreOffice และแก้ไขปัญหาเมื่อรายการ JRE ว่างเปล่า โดยไม่ต้องเปลี่ยนแปลงการตั้งค่าที่ไม่เกี่ยวข้อง

เรียกใช้งาน LibreOffice Headless ใน Docker เพื่อแปลงไฟล์ PDF

เรียกใช้งาน LibreOffice Headless ใน Docker เพื่อแปลงไฟล์ PDF

สร้างคอนเทนเนอร์ LibreOffice ขนาดเล็ก แปลงเอกสารสำนักงานโดยไม่ต้องใช้ GUI และตรวจสอบความถูกต้องของไฟล์ PDF ที่ส่งออก พร้อมทั้งจำกัดการเข้าถึงไฟล์จากเครื่องโฮสต์

ลดขนาดไฟล์ LibreOffice Impress โดยไม่ทำให้ภาพเบลอ

ลดขนาดไฟล์ LibreOffice Impress โดยไม่ทำให้ภาพเบลอ

ลดขนาดไฟล์งานนำเสนอ LibreOffice ที่มีขนาดใหญ่เกินไป โดยการบีบอัดรูปภาพที่ฝังอยู่ เลือกการตั้งค่าภาพที่เหมาะสม และตรวจสอบคุณภาพของสไลด์ก่อนแชร์

หยุดการตัดขอบภาพพิมพ์ขนาดกำหนดเองใน LibreOffice

หยุดการตัดขอบภาพพิมพ์ขนาดกำหนดเองใน LibreOffice

ตรวจสอบขนาดหน้ากระดาษของ LibreOffice ให้ตรงกับเครื่องพิมพ์ของคุณ ตรวจสอบระยะขอบที่พิมพ์ได้ และปรับมาตราส่วนให้ถูกต้องก่อนพิมพ์เอกสารขนาดกำหนดเอง

เร่งความเร็วมาโคร Calc ด้วยการอ่านและเขียนข้อมูลเป็นชุด

เร่งความเร็วมาโคร Calc ด้วยการอ่านและเขียนข้อมูลเป็นชุด

แทนที่การเข้าถึงเซลล์ซ้ำๆ ด้วยการอ่านและเขียนช่วงข้อมูลจำนวนมาก จากนั้นทำการวัดประสิทธิภาพผลลัพธ์และปกป้องสูตรในเวิร์กบุ๊ก Calc ขนาดใหญ่

จัดระเบียบหนังสือ LibreOffice ด้วยเอกสารหลักที่เชื่อมโยงกัน

จัดระเบียบหนังสือ LibreOffice ด้วยเอกสารหลักที่เชื่อมโยงกัน

แบ่งต้นฉบับยาวๆ ออกเป็นบทๆ รวบรวมบทเหล่านั้นในโปรแกรม Writer และรักษาความสม่ำเสมอของรูปแบบ เนื้อหา และการตรวจสอบการส่งออก