Cum să convertiți libreoffice ODT în PDF în bash (Unix, Pdf, Libreoffice)

Johan a intrebat.

Folosesc libreoffice sub CentOS 6. Pot să convertesc fișierele ODT în PDF cu:

libreoffice --headless --convert-to pdf *.odtdar problema este că funcționează doar atunci când nu este deschis niciun document în libreoffice.

Când specific --env:UserInstallation=file:///path/to/some/directoryașa cum se sugerează într-unul din comentariile la această întrebare , nu ajută.

Ce fac greșit? Este o pacoste să închid toate instanțele libreoffice înainte de a executa comanda before.

3 răspunsuri
Anthon

Este puțin probabil ca acest lucru să funcționeze, deoarece sugestia din comentariu este atât incompletă (nu puteți specifica doar un anumit director), cât și incorectă (--env:... ar trebui să fie -env:... Iată ce vă recomand să faceți:

  1. Opriți toate instanțele de libreoffice
  2. Porniți libreoffice din linia de comandă fără a specifica --headless:

    libreoffice -env:UserInstallation=file:///home/username/.config/libreoffice-alt
    

    ar trebui să înlocuiți /home/username cu directorul dvs. personal (și ajustați .config dacă nu îl aveți pe CentOS, eu am făcut acest lucru pe Ubuntu și Linux Mint). Cele de mai sus vor crea un nou director de configurare pentru libreoffice alternativ în directorul dvs. .config, fără de care ați primi o eroare despre faptul că java nu este găsit.

  3. Ieșiți din acea instanță de libreoffice
  4. Acel director /home/username/.config/libreoffice-alt ar trebui să fi fost creat acum pentru dvs.

Acum porniți o altă aplicație libreoffice de la linia de comandă (în acest fel puteți vedea unele mesaje utile în cazul în care lucrurile nu merg bine la pornirea celei de-a doua instanțe), fără -env:..., și, în timp ce aceasta încă rulează, porniți conversia folosind:

libreoffice -env:UserInstallation=file:///home/username/.config/libreoffice-alt --headless --convert-to pdf *.odt

Comentarii

  • PS Am și eu .config pe CentOS –  > Por Johan.
  • În loc să opriți toate instanțele, puteți pur și simplu să vă conectați ca utilizator diferit, să creați fișierele .config și să le copiați în propriul dir. de acasă – -.  > Por Ole Tange.
  • Pe o mașină Ubuntu 16.04, am rulat pur și simplu libreoffice --headless --convert-to pdf <filename>.odt și a făcut-o, fără acei pași de pregătire. A afișat un avertisment cu privire la Java, însă. –  > Por Kyle.
JJoao

O posibilă abordare este să instalați unoconv (dacă nu este deja instalat) și

unoconv file.odt

Vă rugăm să consultați man unoconv pentru detalii

unoconv este un utilitar de linie de comandă care poate converti orice format de fișier pe care LibreOffice îl poate importa, în orice format de fișier pe care LibreOffice este capabil să îl exporte. unoconv utilizează legăturile UNO ale LibreOffice pentru conversia non-interactivă….

Pe unele platforme este necesară și instalarea libreoffice-headless mersi{Aaron}

Comentarii

  • Sub CentOS7, a trebuit să adaug și pachetul libreoffice-headless pentru ca acesta să fie automatizat. Dacă utilizatorul nu l-a mai folosit niciodată, primul apel către unoconv eșuează cu eroarea 81 după ce creează o mulțime de fișiere în ~/.config/. –  > Por Aaron D. Marasco.
  • @AaronD.Marasco, vă mulțumesc foarte mult pentru aceste informații importante! Probabil că lipsește o dependență în fișierul de specificații. Voi adăuga sfatul dvs. la răspuns. –  > Por JJoao.
  • @JJoao, dacă sunteți utilizator CentOS, ar trebui să raportați constatarea dvs. ca raport de eroare. –  > Por vonbrand.
  • Nu este o dependență de specificații… doar un caz de utilizare. Problema eroare 81 se presupune că este rezolvată dar nu știu ce versiune; cred că CentOS nu o are încă. –  > Por Aaron D. Marasco.
Kurt Pfeifle

Iată o abordare total diferită.

Este posibilă, deoarece în ultima vreme au fost deschise o serie de noi căi de conversie de către Pandoc capacitatea recent dobândită de Pandop de a citi fișiere ODT.

Atunci când Pandoc citește un format de fișier, îl convertește într-un format intern, „nativ” (care este o formă de JSON).

Din forma sa nativă, poate apoi exporta documentul într-o gamă întreagă de alte formate. Nu numai PDF, ci și DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki și altele…

Deoarece aici formatul de ieșire dorit este PDF, avem o altă alegere de căi diferite, oferită de ceea ce Pandoc numește un pdf-engine. Iată lista motoarelor PDF disponibile în prezent (valabilă pentru Pandoc v2.7.2 și ulterior – versiunile anterioare pot suporta doar o listă mai mică):

  • pdflatex: Acest lucru necesită LaTeX să fie instalat în plus față de Pandoc.

  • xelatex: Acest lucru necesită XeLaTeX să fie instalat în plus față de Pandoc (disponibil, de asemenea, ca un pachet suplimentar la pachetul general distribuții TeX).

  • context: Acest lucru necesită ConTeXt să fie instalat în plus față de Pandoc; ConTeXt este disponibil ca un pachet suplimentar pentru majoritatea pachetelor generale distribuții TeX).

  • lualatex: Aceasta necesită LuaTeX să fie instalat în plus față de Pandoc (de asemenea, este disponibil ca pachet suplimentar la pachetul general distribuții TeX).

  • pdfroff: Aceasta necesită GNU Roff să fie instalat în plus față de Pandoc.

  • wkhtml2pdf: Acest lucru necesită wkhtmltopdf să fie instalat în plus față de Pandoc.

  • Prince: Acest lucru necesită PrinceXML să fie instalat în plus față de Pandoc.

  • weasyprint: Acest lucru necesită weasyprint să fie instalat în plus față de Pandoc.

Există câteva motoare PDF mai multe și mai noi, integrate acum în Pandoc, pe care nu le-am folosit încă și pe care nu le pot descrie în prezent mai detaliat: tectonic și latexmk.

AVERTISMENT: Nu vă așteptați ca aspectul documentului dvs. original să fie identic în toate ieșirile PDF la previzualizarea imprimării sau la exportul PDF al ODT! Pandoc, atunci când se convertește nu păstrează modelele, , ci păstrează conținutul și structura documentelor: paragrafele rămân paragrafe, cuvintele subliniate rămân subliniate, titlurile rămân titluri, etc. Dar aspectul general se poate schimba considerabil.

Exemple de comenzi

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

ConTeXt:

 pandoc -f odt -o mydoc.pdf mydoc.odt --pdf-engine=context

GNU troff:

 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

Comenzile de mai sus sunt cele mai de bază pentru conversie. În funcție de motorul PDF pe care îl alegeți, pot exista multe alte opțiuni posibile pentru a controla aspectul fișierului PDF de ieșire. De exemplu, următorii parametri suplimentari pot fi adăugați la toate acele căi de rutare prin LaTeX:

 -V geometry:"paperwidth=23.3cm, paperheight=1000pt, margin=11.2mm, top=2cm"

care va utiliza o dimensiune de pagină personalizată (puțin mai mare decât DIN A4) cu margini de 2 cm pe marginea superioară și de 1,12 cm pe celelalte trei margini).

Comentarii

  • Din păcate, pandoc nu suportă toate formatele libreoffice; de exemplu .ods (formatul de foaie de calcul) nu este suportat. –  > Por Granitosaurus.
  • @Granitosaurus: Întrebarea se referea la ODT, de aceea acest răspuns este potrivit. –  > Por Kurt Pfeifle.
  • Oh, nu am insinuat niciodată că nu este adecvat, doar că este regretabil că pandoc nu suportă multe alte formate libreoffice. –  > Por Granitosaurus.
  • @Granitosaurus: Pandoc este un proiect de software OpenSource. Deci puteți contribui cu ușurință. Dacă nu vă interesează să programați caracteristici suplimentare în Pandoc, cel puțin puteți găsi proiectul lor pe Github și sunteți liber să trimiteți un cerere de funcționalitate în trackerul lor de erori. Aceasta a fost, de asemenea, ceea ce a declanșat adăugarea suportului Pandoc pentru ieșirea PowerPoint… –  > Por Kurt Pfeifle.