ODT dosyasını bir PDF'ye nasıl dönüştürebilirim?


Yanıtlar:


68

Sadece belgeyi libre office ile açın ve PDF olarak dışa aktar ... 'ı seçin :

görüntü tanımını buraya girin

Bir komut satırı çözümü için, dosyaları komut satırından dönüştüren unoconv ADI yükle var:

unoconv -f pdf mydocument.odt

Not: Yalnızca Ubuntu 11.10'dan itibaren unoconv Libre Office'e bağlıdır. Önceki unoconv sürümleri (Ubuntu'dan <= 11.04) Open Office'e bağlıdır (ancak Libre Office ile de çalışır).


3
söz için thx unoconv, bu harika!
Boris Däppen

1
Unoconv vs Libreoffice komut satırının artılarını ve eksilerini merak edenler için bu konuda yardımcı olabilir: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber

@Takkat unoconv MacOS Sierra'da libreoffice5 konumunu bulamadı gibi görünüyor unoconv: Cannot find a suitable office installation on your system., bu yüzden kullanılamaz diyor :(
SebMa 20:17

87

libreofficeAmacınız için komut satırını da kullanabilirsiniz . Bu size toplu dönüştürme avantajını sağlar. Ancak tek dosyalar da mümkündür. Bu örnek, geçerli dizindeki tüm ODT dosyalarını PDF'ye dönüştürür:

libreoffice --headless --convert-to pdf *.odt

Komut satırı seçenekleri hakkında daha fazla bilgi edinin:

man libreoffice

Komut satırı kullanımı için başka bir argüman, örneğin benim durumumda gui'nin aniden hatalı pdf'leri üretmeye başladığını, ancak komut satırının hala bir cazibe gibi çalıştığını gösteriyor.
Hermann Ingjaldsson

4
Thi9s çalışıyor, ancak bir sorunu var: GUI açıksa komut hiçbir şey yapmaz (bir hata bile göstermez). Çirkin ama bu geçici çözüm, yeni bir örneğini açabilirsiniz: --env:UserInstallation=file:///path/to/some/directory.
tokland

1
@tokland: Bunun için bir hata raporu var: bugs.freedesktop.org/show_bug.cgi?id=37531
Mekanik salyangoz

1
Toplu dönüştürme de yapmayı başardım unoconv. Mesela hattı unoconv -f pdf *.pptbaşarıyla kullandım.
XavierStuvw

2
Unoconv vs Libreoffice komut satırının artılarını ve eksilerini merak edenler için, bu sorun yardımcı olabilir: github.com/dagwieers/unoconv/issues/364
Sebastien Lorber

8

"GUI olmayan" yöntemiyle ilgili birkaç ayrıntı.

  1. ODT dosyalarını yalnızca PDF'ye dönüştürmek için bu yöntemi kullanabilirsiniz. Ayrıca, MS Word DOCX dosyaları için de çalışacaktır (LibreOffice'in belirli ODT'leri kullanabildiği gibi çalışacaktır) ve genel olarak LibreOffice'in açabileceği tüm dosya tipleri.

  2. libreofficeÖnerilen diğer cevaplardan biri olarak adlandırılan bir ikili olduğunu sanmıyorum . Ancak, soffice(.bin)LibreOffice'i komut satırından başlatmak için kullanılabilecek bir ikili dosya vardır. Genellikle içinde bulunur /usr/lib/libreoffice/program/; ve çok sık, bir bağlantı /usr/bin/sofficeo yere işaret eder.

  3. Sonra, çoğu durumda parametreler --headless --convert-to pdfyeterli değildir. Olması gereken:

    --headless --convert-to pdf:writer_pdf_Export
    

    Bu büyük harfleri tam olarak takip ettiğinizden emin olun!

  4. Ardından, sisteminizde zaten çalışıyor ve çalışıyorsa bir LibreOffice GUI örneği varsa, komut çalışmaz. 2011'den beri bilinen # 37531 numaralı hataya neden oluyor . Bu ek parametreyi komutunuza ekleyin:

     "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"
    

    Bu, aynı kullanıcı tarafından başlatılan ve çalışan ilk GUI LO örneğine müdahale etmeden ikinci, başsız bir LO örneği tarafından kullanılabilecek yeni, ayrı bir ortam yaratacaktır.

  5. Ayrıca, --outdir /pdfbelirttiğinizin var olduğundan ve yazma izninizin olduğundan emin olun . Veya farklı bir çıktı dir. Sadece ilk test ve hata ayıklama turu için olsa bile:

    $ mkdir ${HOME}/lo_pdfs
    
  6. Dolayısıyla:

    /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
    

    Bu benim için, Mac OS X Yosemite 10.10.5'te LibreOffice v5.1.2.2 ile çalışıyor soffice. Aynı zamanda Debian Jessie 8.0 (yolu kullanarak /usr/lib/libreoffice/program/soffice) üzerinde de çalışır . Üzgünüz, şu anda Ubuntu'da test edemiyorum ....

    Bütün bunlar işe yaramazsa, DOCX'i işlemeye çalıştığınızda:

  7. Komutu denediğiniz belirli bir DOCX dosyasıyla ilgili bir sorun olabilir ... Bu nedenle, ilk önce çok basit bir DOCX belgesi oluşturun. Bunun için LibreOffice'in kendisini kullanın. "Merhaba Dünya!" Yazın. aksi halde boş bir sayfada. DOCX olarak kaydedin.

  8. Tekrar deneyin. Basit DOCX ile çalışıyor mu?

  9. Tekrar işe yaramazsa, 7. adımı tekrarlayın, ancak bu kez ODT olarak kaydedin.

  10. 8. adımı tekrarlayın, ancak ODT'ye bu sefer başvurduğunuzdan emin olun.

  11. Son: Her birini parametre ile çalıştırmak soffice, ile soffice.binyapmak libreofficeve çalıştırmak için tam yol kullanın -h:

    $ /path/to/libreoffice -h  # if that path exists, which I doubt!
    $ /path/to/soffice -h
    $ /path/to/soffice.bin -h
    
    • Burada bir çıktı alıyor musunuz?
    • Üç ikili / sembolikten hangisi için?
    • Çıkışları kaydedin.
    • Bize çıktılarınızı söyleyin !!!
       

    Bunları kullandığınız komut satırıyla karşılaştırın:

    • Parametre adlarında, büyük harf kullanımlarında, kullanılan tire sayısında vb. Herhangi bir değişiklik var mı?
       

    Karşılaştırma için kendi (Mac OS X) çıkışı burada:

     $ /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.
    
  12. sofficeDOCX uzantılı dosyanızın açılması sırasında bir giriş filtresinin uygulanmasını zorlamak için komut satırınıza bir değişken daha ekleyin :

    --infilter="Microsoft Word 2007/2010/2013 XML"
    

    veya

    --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"
    

fwiw, tdf bug 37531 çözüldü / düzeltildi olarak işaretlendi
myrdd

4

Nautilus Betiği

Bu komut dosyası, LibreOffice ile uyumlu dosyaları PDF'ye dönüştürmek için libreoffice'i kullanır.

#!/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

Kurulum talimatları için buraya bakın: Bir Nautilus betiğini nasıl kurabilirim?


2
Umarım "lipreoffice" gibi bir işlev de OSX’te olur. Bazen, Mac kullanmam gerektiğinde ellerimi çok kısa hissediyorum.
Léo Léopold Hertz 준영

2

Not: cevabımı silmeye karar bu sorudan ve ben fark edince konuyu burada değiştirilmiş bir sürümünü göndermeye unoconvile uğraşmaz pswHiç iyi dosyalarına ve diğer biçimlere başarıyla dönüştürmez. Ayrıca docxve xlsxbiçimlerinde de sorunlar olabilir .


Ancak, Libreofficepek çok dosya türünü tam olarak destekler; Geçerli girdi ve çıktı biçimlerini ayrıntılandıran resmi sitede tam belgeler bulunur .

Komut satırı libreofficeconvert yardımcı programını veya depolarda bulunan unoconv dosyasını kullanabilirsiniz. unoconvÇok yararlı buluyorum ve muhtemelen istediğin de bu. Takkat kısaca bahsetmiş olsa da unoconv, biraz daha ayrıntılı bilgi vermenin ve toplu bir dönüşüm elde etmenin yararlı olacağını düşündüm.

Terminali kullanarak cddosyalarınızı içeren dizine gidebilir ve daha sonra toplu iş, hepsini böyle bir liner çalıştırarak dönüştürebilirsiniz:

for f in *.odt; do unoconv -f pdf "${f/%pdf/odt}"; done

(Bu tek astar, bu yanıtta yer alan çeviri komut dosyamın bir modifikasyonudur .)

Daha sonra başka herhangi bir dosya formatı kullanmak istiyorsanız, sadece odtve pdfdiğer desteklenen giriş ve çıkış formatları ile değiştirin. Bir dosya türü için desteklenen formatları girerek bulabilirsiniz unoconv -f odt --show. Örneğin, tek bir dosya kullanımını dönüştürmek için, unoconv -f pdf myfile.odt.

Programla ilgili daha fazla bilgi ve seçenekler, terminale girerek man unoconvveya Ubuntu man sayfalarına çevrimiçi olarak gidilerek bulunabilir .


1

Başka Nautilus Senaryosu

Bu çok basit ve hafif Nautilus Script, unoconvLibreOffice ile uyumlu seçilen dosyaları PDF formatına dönüştürmek için kullanılır:

#!/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

1

Yeni bir cevap ekliyorum, çünkü son zamanlarda Pandoc tarafından ODT dosyalarını okuma yeteneği kazandırarak bir dizi yeni dönüşüm yolu açıldı .

Pandoc bir dosya biçiminde okuduğunda, onu "native" (JSON'un bir biçimi) olan dahili bir biçime dönüştürür.

Yerel biçiminden sonra, belgeyi bir dizi başka biçime aktarabilir. Sadece PDF değil, aynı zamanda DocBook, HTML, EPUB, DOCX, ASCIIdoc, DokuWiki, MediaWiki ve olmasın ...

Burada istenen çıktı formatı PDF olduğu için, Pandoc'un pdf motor olarak adlandırdığı şeyin sağladığı başka bir farklı yol seçeneğimiz var . Şu anda mevcut olan PDF motorlarının listesi (Pandoc v2.7.2 ve üstü için geçerlidir - önceki sürümler yalnızca daha küçük bir listeyi destekleyebilir):

  • pdflatex: Bu gerektirir LaTeX Pandoc ek olarak kurulacak.

  • xelatex: Bu, Pandoc'a ek olarak XeLaTeX'in kurulmasını gerektirir (ayrıca genel TeX dağıtımlarına ek bir paket olarak bulunur ).

  • bağlamı: Bu, Pandoc'a ek olarak ConTeXt'in kurulmasını gerektirir ; ConTeXt, çoğu genel TeX dağıtımına ek bir paket olarak mevcuttur ).

  • lualatex: Bu, Pandoc'a ek olarak LuaTeX'in kurulmasını gerektirir (ayrıca genel TeX dağıtımlarına ek bir paket olarak bulunur ).

  • pdfroff: Bu Pandoc'a ek olarak GNU Roff'un kurulmasını gerektirir .

  • wkhtml2pdf: Bu, Pandoc'a ek olarak wkhtmltopdf programının yüklenmesini gerektirir .

  • Prens: Bu, Pandoc'a ek olarak PrinceXML'in kurulmasını gerektirir .

  • weasyprint: Bu Pandoc'a ek olarak weasyprint'in kurulmasını gerektirir .

Pandoc'a entegre edilmiş, henüz kendimi kullanmadığım ve şu anda daha ayrıntılı olarak tanımlayamadığım bazı yeni ve daha yeni PDF motorları var: tektonik ve lateksmk .

UYARI: Orijinal belgenizin görünümünün, tüm PDF çıktılarında, baskı önizlemesinde veya ODT'nin PDF dışa aktarmasında aynı olmasını beklemeyin! Pandoc, dönüştürme , mizanpajları korumadığında, belgelerin içeriğini ve yapısını korur : paragraf paragrafları kalır, vurgulanan kelimeler vurgulanır, başlıklar başlık olarak kalır, vb. Ancak genel görünüm önemli ölçüde değişebilir.

Örnek komutlar

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

bağlam:

 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

Yukarıdaki komutlar dönüşüm için en temel olanıdır. Seçtiğiniz PDF motoruna bağlı olarak, çıkış PDF dosyasının görünümünü kontrol etmek için başka birçok seçenek olabilir. Örneğin, LaTeX üzerinden yönlendirilen tüm bu yollara aşağıdaki ek parametreler eklenebilir:

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

Özel bir sayfa boyutu (DIN A4'ten biraz daha büyük) üst kenarda 2 cm ve diğer üç kenarda 1,12 cm kenar boşluklarıyla kullanacak).


Lütfen üstten dördüncü paragrafı kontrol edin. Eksik görünüyor.
DK Bose

@DKBose: Tamam, tamam.
Kurt Pfeifle
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.