ไม่มีใครรู้วิธีแปลงODT
ไฟล์ (LibreOffice) เป็นPDF
อย่างไร
ไม่มีใครรู้วิธีแปลงODT
ไฟล์ (LibreOffice) เป็นPDF
อย่างไร
คำตอบ:
เพียงเปิดเอกสารที่มี libre office แล้วเลือกส่งออกเป็น PDF ... :
สำหรับโซลูชันบรรทัดคำสั่งมีunoconv ที่แปลงไฟล์จากบรรทัดคำสั่ง:
unoconv -f pdf mydocument.odt
หมายเหตุ:เฉพาะการเริ่มต้นจาก Ubuntu 11.10 unoconv ขึ้นอยู่กับ Libre Office เวอร์ชัน unoconv ก่อนหน้า (จาก Ubuntu <= 11.04) ขึ้นอยู่กับ Open Office (แต่จะทำงานด้วย Libre Office)
unoconv
มันเยี่ยมมาก!
unoconv: Cannot find a suitable office installation on your system.
ดังนั้นจึงใช้ไม่ได้ :(
คุณยังสามารถใช้บรรทัดคำสั่งของlibreoffice
เพื่อวัตถุประสงค์ของคุณ ที่ให้ประโยชน์จากการแปลงแบทช์ แต่ไฟล์เดียวก็เป็นไปได้ ตัวอย่างนี้แปลงไฟล์ ODT ทั้งหมดในไดเรกทอรีปัจจุบันเป็น PDF:
libreoffice --headless --convert-to pdf *.odt
รับข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกบรรทัดคำสั่งด้วย:
man libreoffice
--env:UserInstallation=file:///path/to/some/directory
แต่มีวิธีแก้ปัญหานี้คุณสามารถเปิดตัวอย่างใหม่:
unoconv
เช่นกัน ตัวอย่างเช่นฉันใช้สายunoconv -f pdf *.ppt
สำเร็จ
ต่อไปนี้เป็นรายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับวิธีการ "ไม่ใช่ GUI"
คุณสามารถใช้วิธีนี้ไม่เพียง แต่จะแปลงไฟล์ ODT เป็น PDF มันจะทำงานกับไฟล์ MS Word DOCX (มันจะทำงานเช่นเดียวกับ LibreOffice สามารถจัดการ ODT โดยเฉพาะ) และโดยทั่วไปทุกประเภทไฟล์ที่ LibreOffice สามารถเปิดได้
ฉันไม่คิดว่ามีชื่อไบนารีlibreoffice
เป็นหนึ่งในคำตอบอื่น ๆ ที่แนะนำ อย่างไรก็ตามมีsoffice(.bin)
- ไบนารีที่สามารถใช้เพื่อเริ่ม LibreOffice จากบรรทัดคำสั่ง มันมักจะอยู่ใน/usr/lib/libreoffice/program/
; และบ่อยครั้งที่ symlink /usr/bin/soffice
ชี้ไปยังตำแหน่งนั้น
จากนั้นในกรณีส่วนใหญ่พารามิเตอร์--headless --convert-to pdf
ไม่เพียงพอ มันจะต้องเป็น:
--headless --convert-to pdf:writer_pdf_Export
อย่าลืมทำตามตัวพิมพ์ใหญ่ให้แน่ชัด!
ถัดไปคำสั่งจะไม่ทำงานหากมีอินสแตนซ์ LibreOffice GUI อยู่แล้วและทำงานบนระบบของคุณ มันเกิดจากข้อผิดพลาด# 37531 หรือที่รู้จักกันตั้งแต่ 2011 เพิ่มพารามิเตอร์เพิ่มเติมนี้ในคำสั่งของคุณ:
"-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
สิ่งนี้จะสร้างสภาพแวดล้อมใหม่แยกจากกันซึ่งสามารถใช้งานโดยอินสแตนซ์ LO ที่สองและไม่มีส่วนหัวโดยไม่รบกวนการทำงานของอินสแตนซ์ GUI LO แรกที่เริ่มต้นโดยผู้ใช้รายเดียวกัน
ตรวจสอบให้แน่ใจว่า--outdir /pdf
คุณระบุมีอยู่และคุณมีสิทธิ์ในการเขียน หรือค่อนข้างใช้เอาท์พุทที่แตกต่างกัน แม้ว่าจะเป็นเพียงการทดสอบครั้งแรกและการดีบัก
$ mkdir ${HOME}/lo_pdfs
ดังนั้น:
/path/to/soffice \
--headless \
"-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}" \
--convert-to pdf:writer_pdf_Export \
--outdir ${HOME}/lo_pdfs \
/path/to/test.docx
สิ่งนี้ใช้ได้กับฉันใน Mac OS X Yosemite 10.10.5 กับ LibreOffice v5.1.2.2 (โดยใช้เส้นทางเฉพาะของฉันสำหรับไบนารีsoffice
ซึ่งจะแตกต่างบน Ubuntu ต่อไป ... ) มันยังใช้งานได้กับ Debian Jessie 8.0 (โดยใช้ path /usr/lib/libreoffice/program/soffice
) ขออภัยไม่สามารถทดสอบบน Ubuntu ได้ในขณะนี้ ....
หากสิ่งนี้ไม่ทำงานเมื่อคุณพยายามประมวลผล DOCX:
อาจเป็นปัญหากับไฟล์ DOCX เฉพาะที่คุณลองใช้คำสั่งด้วย ... ดังนั้นให้สร้างเอกสาร DOCX แบบง่าย ๆ ของคุณเองก่อน ใช้ LibreOffice เพื่อสิ่งนี้ เขียน "Hello World!" ในหน้าว่างอย่างอื่น บันทึกเป็น DOCX
ลองอีกครั้ง. ใช้งานกับ DOCX แบบง่าย ๆ ได้หรือไม่
หากไม่สามารถใช้งานได้อีกให้ทำซ้ำขั้นตอนที่ 7 แต่ให้บันทึกเป็น ODT ในเวลานี้
ทำซ้ำขั้นตอนที่ 8 แต่อย่าลืมอ้างอิง ODT ในครั้งนี้
สุดท้าย: ใช้พา ธ เต็มไปsoffice
ยังsoffice.bin
ไปยังlibreoffice
และและเรียกใช้แต่ละรายการด้วย-h
พารามิเตอร์:
$ /path/to/libreoffice -h # if that path exists, which I doubt!
$ /path/to/soffice -h
$ /path/to/soffice.bin -h
เปรียบเทียบกับบรรทัดคำสั่งที่คุณใช้:
สำหรับการเปรียบเทียบผลลัพธ์ของฉัน (Mac OS X) อยู่ที่นี่:
$ /Applications/LibreOffice.app/Contents/MacOS/soffice -h
LibreOffice 5.1.2.2 d3bf12ecb743fc0d20e0be0c58ca359301eb705f
Usage: soffice [options] [documents...]
Options:
--minimized keep startup bitmap minimized.
--invisible no startup screen, no default document and no UI.
--norestore suppress restart/restore after fatal errors.
--quickstart starts the quickstart service
--nologo don't show startup screen.
--nolockcheck don't check for remote instances using the installation
--nodefault don't start with an empty document
--headless like invisible but no user interaction at all.
--help/-h/-? show this message and exit.
--version display the version information.
--writer create new text document.
--calc create new spreadsheet document.
--draw create new drawing.
--impress create new presentation.
--base create new database.
--math create new formula.
--global create new global document.
--web create new HTML document.
-o open documents regardless whether they are templates or not.
-n always open documents as new files (use as template).
--display <display>
Specify X-Display to use in Unix/X11 versions.
-p <documents...>
print the specified documents on the default printer.
--pt <printer> <documents...>
print the specified documents on the specified printer.
--view <documents...>
open the specified documents in viewer-(readonly-)mode.
--show <presentation>
open the specified presentation and start it immediately
--accept=<accept-string>
Specify an UNO connect-string to create an UNO acceptor through which
other programs can connect to access the API
--unaccept=<accept-string>
Close an acceptor that was created with --accept=<accept-string>
Use --unnaccept=all to close all open acceptors
--infilter=<filter>[:filter_options]
Force an input filter type if possible
Eg. --infilter="Calc Office Open XML"
--infilter="Text (encoded):UTF8,LF,,,"
--convert-to output_file_extension[:output_filter_name[:output_filter_options]] [--outdir output_dir] files
Batch convert files (implies --headless).
If --outdir is not specified then current working dir is used as output_dir.
Eg. --convert-to pdf *.doc
--convert-to pdf:writer_pdf_Export --outdir /home/user *.doc
--convert-to "html:XHTML Writer File:UTF8" *.doc
--convert-to "txt:Text (encoded):UTF8" *.doc
--print-to-file [-printer-name printer_name] [--outdir output_dir] files
Batch print files to file.
If --outdir is not specified then current working dir is used as output_dir.
Eg. --print-to-file *.doc
--print-to-file --printer-name nasty_lowres_printer --outdir /home/user *.doc
--cat files
Dump text content of the files to console
Eg. --cat *.odt
--pidfile=file
Store soffice.bin pid to file.
-env:<VAR>[=<VALUE>]
Set a bootstrap variable.
Eg. -env:UserInstallation=file:///tmp/test to set a non-default user profile path.
Remaining arguments will be treated as filenames or URLs of documents to open.
เพิ่มอาร์กิวเมนต์อีกหนึ่งบรรทัดในบรรทัดคำสั่งของคุณเพื่อบังคับใช้แอปพลิเคชันของตัวกรองอินพุตเมื่อsoffice
เปิดไฟล์ DOCX ของคุณ:
--infilter="Microsoft Word 2007/2010/2013 XML"
หรือ
--infilter="Microsoft Word 2007/2010/2013 XML"
--infilter="Microsoft Word 2007-2013 XML"
--infilter="Microsoft Word 2007-2013 XML Template"
--infilter="Microsoft Word 95 Template"
--infilter="MS Word 95 Vorlage"
--infilter="Microsoft Word 97/2000/XP Template"
--infilter="MS Word 97 Vorlage"
--infilter="Microsoft Word 2003 XML"
--infilter="MS Word 2003 XML"
--infilter="Microsoft Word 2007 XML Template"
--infilter="MS Word 2007 XML Template"
--infilter="Microsoft Word 6.0"
--infilter="MS WinWord 6.0"
--infilter="Microsoft Word 95"
--infilter="MS Word 95"
--infilter="Microsoft Word 97/2000/XP"
--infilter="MS Word 97"
--infilter="Microsoft Word 2007 XML"
--infilter="MS Word 2007 XML"
--infilter="Microsoft WinWord 5"
--infilter="MS WinWord 5"
สคริปต์ Nautilus
สคริปต์นี้ใช้ libreOffice เพื่อแปลงไฟล์ที่เข้ากันได้กับ LibreOffice เป็น PDF
#!/bin/bash
## PDFconvert 0.1
## by Glutanimate (https://askubuntu.com/users/81372/)
## License: GPL 3.0
## depends on python, libreoffice
## Note: if you are using a non-default LO version (e.g. because you installed it
## from a precompiled package instead of the official repos) you might have to change
## 'libreoffice' according to the version you're using, e.g. 'libreoffice3.6'
# Get work directory
base="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`"
#Convert documents
while [ $# -gt 0 ]; do
document=$1
libreoffice --headless --invisible --convert-to pdf --outdir "$base" "$document"
shift
done
สำหรับคำแนะนำในการติดตั้งดูที่นี่: ฉันจะติดตั้งสคริปต์ Nautilus ได้อย่างไร
หมายเหตุ: ผมตัดสินใจที่จะลบคำตอบของฉันจากคำถามนี้และจะโพสต์ฉบับแก้ไขได้ที่นี่เมื่อฉันตระหนักว่าunoconv
ไม่ได้จัดการกับpsw
ไฟล์ที่ทุกคนดีและไม่แปลงพวกเขาประสบความสำเร็จในรูปแบบอื่น ๆ อาจมีปัญหากับdocx
และxlsx
รูปแบบ
อย่างไรก็ตามLibreoffice
รองรับไฟล์หลายประเภทอย่างสมบูรณ์ เอกสารฉบับเต็มมีอยู่ในเว็บไซต์อย่างเป็นทางการซึ่งมีรายละเอียดรูปแบบอินพุตและเอาต์พุตที่ถูกต้อง
คุณสามารถใช้libreoffice
ยูทิลิตี้แปลงบรรทัดคำสั่งหรือunoconvซึ่งมีอยู่ในที่เก็บ ฉันพบว่าunoconv
มีประโยชน์มากและอาจเป็นสิ่งที่คุณต้องการ แม้ว่าTakkatได้กล่าวไว้สั้น ๆunoconv
แต่ฉันคิดว่ามันจะมีประโยชน์ในการให้รายละเอียดเพิ่มเติมและการแปลงแบตช์หนึ่งซับ
การใช้เทอร์มินัลคุณสามารถcd
ไปที่ไดเรกทอรีที่มีไฟล์ของคุณจากนั้นแบตช์จะแปลงไฟล์ทั้งหมดด้วยการรันหนึ่งซับไลน์เช่นนี้:
for f in *.odt; do unoconv -f pdf "${f/%pdf/odt}"; done
(หนึ่งบรรทัดนี้เป็นการดัดแปลงสคริปต์แปลของฉันที่แสดงในคำตอบนี้)
หากภายหลังคุณต้องการใช้รูปแบบไฟล์อื่นให้แทนที่odt
และpdf
สำหรับรูปแบบอินพุตและเอาต์พุตอื่นที่สนับสนุน unoconv -f odt --show
คุณสามารถหารูปแบบการสนับสนุนสำหรับชนิดแฟ้มโดยการป้อน unoconv -f pdf myfile.odt
การแปลงการใช้งานไฟล์เดียวตัวอย่างเช่น
ข้อมูลเพิ่มเติมเกี่ยวกับและตัวเลือกสำหรับโปรแกรมที่สามารถพบได้โดยการป้อนใน terminal man unoconv
หรือโดยไปที่manpages อูบุนตูออนไลน์
Nautilus Script ที่เรียบง่ายและน้ำหนักเบานี้ใช้unoconv
เพื่อแปลงไฟล์ที่เลือกซึ่งเข้ากันได้กับ LibreOffice เป็นรูปแบบ PDF:
#!/bin/sh
#Nautilus Script to convert selected LibreOffice-compatible file(s) to PDF
#
OLDIFS=$IFS
IFS="
"
for filename in $@; do
unoconv --doctype=document --format=pdf "$filename"
done
IFS=$OLDIFS
ฉันกำลังเพิ่มคำตอบใหม่เพราะเมื่อไม่นานมานี้ชุดของเส้นทางการแปลงใหม่เปิดขึ้นโดยPandocได้รับความสามารถในการอ่านไฟล์ ODT
เมื่อ Pandoc อ่านในรูปแบบไฟล์มันจะแปลงเป็นรูปแบบภายใน "ดั้งเดิม" (ซึ่งเป็นรูปแบบของ JSON)
จากรูปแบบเนทิฟมันสามารถส่งออกเอกสารไปเป็นรูปแบบอื่น ๆ ทั้งหมด ไม่เพียง แต่เป็น PDF เท่านั้น แต่ยังรวมถึง DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki และอะไร ...
เนื่องจากที่นี่เป็นรูปแบบการส่งออกที่ต้องการเป็นไฟล์ PDF, เรามีทางเลือกของเส้นทางที่แตกต่างให้กับสิ่งที่ Pandoc จะเรียกอีกแบบ pdf เครื่องยนต์ นี่คือรายการของเอ็นจิน PDF ที่มีอยู่ในปัจจุบัน (ใช้ได้กับ Pandoc v2.7.2 และใหม่กว่า - เวอร์ชันก่อนหน้านี้อาจรองรับเฉพาะรายการขนาดเล็กกว่า):
pdflatex:ต้องใช้LaTeXเพื่อติดตั้งนอกเหนือจาก Pandoc
xelatex:นี้ต้องXeLaTeXจะติดตั้งในนอกจาก Pandoc (ยังมีเป็นแพคเกจเพิ่มเติมเพื่อทั่วไปกระจายเท็กซ์ )
บริบท:สิ่งนี้ต้องการConTeXtที่จะติดตั้งนอกเหนือจาก Pandoc; ConTeXt มีให้เป็นแพ็คเกจเพิ่มเติมสำหรับการแจกแจงแบบ TeXทั่วไปส่วนใหญ่)
lualatex:นี้ต้องLuaTeXจะติดตั้งในนอกจาก Pandoc (ยังมีเป็นแพคเกจเพิ่มเติมเพื่อทั่วไปกระจายเท็กซ์ )
pdfroff:สิ่งนี้ต้องการGNU Roffที่จะติดตั้งเพิ่มเติมจาก Pandoc
wkhtml2pdf:นี้ต้องwkhtmltopdfจะติดตั้งในนอกจาก Pandoc
prince:ต้องมีการติดตั้งPrinceXMLเพิ่มเติมจาก Pandoc
weasyprint:นี้ต้องweasyprintจะติดตั้งในนอกจาก Pandoc
: มีบางมากขึ้นและเครื่องมือใหม่รูปแบบไฟล์ PDF ในขณะนี้รวมอยู่ใน Pandoc ซึ่งผมยังไม่ได้นำมาใช้กับตัวเองและที่ฉันยังไม่สามารถอธิบายในรายละเอียดมากขึ้นเปลือกโลกและlatexmk
คำเตือน:อย่าคาดหวังว่าการปรากฏตัวของเอกสารต้นฉบับของคุณจะเหมือนกันในผลลัพธ์ PDF ทั้งหมดไปยังตัวอย่างก่อนพิมพ์หรือการส่งออก PDF ของ ODT! Pandoc เมื่อการแปลงไม่รักษาเค้าโครงมันจะรักษาเนื้อหาและโครงสร้างของเอกสาร: ย่อหน้ายังคงอยู่ในย่อหน้าย่อหน้าที่เน้นคำยังคงเน้นอยู่ส่วนหัวยังคงเป็นหัวเรื่อง ฯลฯ แต่ลักษณะโดยรวมสามารถเปลี่ยนแปลงได้อย่างมาก
pdflatex:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdflatex
XeLaTeX:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=xelatex
LuaLaTeX:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=lualatex
บริบท:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=context
tru GNU:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=pdfroff
wkhtmltopdf:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=wkhtml2pdf
PrinceXML:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=prince
weasyprint:
pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=weasyprint
คำสั่งข้างต้นเป็นพื้นฐานที่สุดสำหรับการแปลง ขึ้นอยู่กับเอ็นจิ้น PDF ที่คุณเลือกอาจมีตัวเลือกอื่น ๆ อีกมากมายที่สามารถควบคุมลักษณะที่ปรากฏของไฟล์ PDF เอาต์พุต ตัวอย่างเช่นอาจมีการเพิ่มพารามิเตอร์เพิ่มเติมต่อไปนี้ในเส้นทางทั้งหมดที่กำหนดเส้นทางผ่าน LaTeX:
-V geometry:"paperwidth=23.3cm, paperheight=1000pt, margin=11.2mm, top=2cm"
ซึ่งจะใช้ขนาดหน้าที่กำหนดเอง (ใหญ่กว่า DIN A4 เล็กน้อย) โดยมีระยะขอบ 2 ซม. ที่ขอบด้านบนและ 1.12 ซม. ที่อีกสามขอบ