Bagaimana cara mengonversi SVG ke PDF di Linux

126

Bagaimana saya mengonversi dan SVG (berisi beberapa kata teks latin dan beberapa grafik vektor sederhana) ke PDF di Linux?

Saya mencoba Inkscape 0.47 pada Ubuntu Lucid, tetapi memindahkan beberapa sub-grafis secara acak, dan membuat beberapa baris lebih pendek dalam output PDF. Jadi outputnya tidak berguna, karena gambarnya terlihat sangat berbeda.

Saya mencoba membuka SVG di Google Chrome 16 dan mencetaknya ke PDF, tetapi itu mendistorsi semua warna, dan itu juga menghilangkan beberapa elemen. (SVG tampak bagus di layar, tetapi sudah buruk dalam pratinjau cetak dan PDF yang dihasilkan juga buruk.)

Saya tidak ingin melakukan rasterisasi atau membuat SVG. Solusi yang mengubah SVG menjadi gambar bitmap dan kemudian membuat PDF dengan gambar yang tertanam bukan jawaban untuk pertanyaan saya. (FYI Inscape 0.47 menerjemahkan teks adalah cara yang sangat jelek, tanpa antialiasing, saat merender ke PNG.)

Opsi apa lagi yang saya miliki?

Poin
sumber
1
Jika Anda hanya memiliki beberapa gambar untuk dikonversi, Anda mungkin merasa lebih mudah menggunakan beberapa konverter online. Saya mencoba CloudConvert dan melakukan pekerjaan yang sangat baik dengan setengah ukuran file SVG.
Frank Breitling

Jawaban:

134

rsvg-convert melakukan trik untuk SVG yang ingin saya konversi:

$ sudo apt-get install librsvg2-bin
$ rsvg-convert -f pdf -o t.pdf t.svg

rsvg-convert -f pdftidak meraster SVG, dan menanamkan dan menset huruf font (setidaknya itu telah menyematkan karakter yang digunakan dari font Arial). Terkadang penyisipan font gagal (mis. Untuk font LMRoman17), dan seluruh file font disalin ke PDF yang dihasilkan.

Ketergantungan pada Lucid Ubuntu:

  • libcairo.so.2
  • libgobject-2.0.so.0
  • libgthread-2.0.so.0
  • libglib-2.0.so.0
  • librsvg-2.so.2
  • libpthread.so.0
  • libc.so.6

Secara default, libcairo membutuhkan libX11, jadi rsvg-convert mungkin sulit dipasang ke sistem tanpa kepala.

Catatan: Halaman manual rsvg-convertmenyatakan bahwa alat selalu diraster, tetapi ini tidak benar. Manual ini sudah usang. Terkadang alat pembuat svg Anda dapat meraster sebagian gambar svg, yang juga dapat menyesatkan Anda.

Poin
sumber
4
Itu banyak ketergantungan yang saya lihat di sini: cairo, libgphoto, gtk3, libsane ... Oh well, jika berhasil, ...
ShiDoiSi
4
@ AyberkÖzgür Itu kesalahan inkscape - ketika Anda menyimpan proyek Inkscape, itu akan secara default menyimpannya sebagai SVG, tetapi SVG yang disimpannya mencakup sekelompok data spesifik inkscape yang tidak standar yang sering dapat mengacaukan program lain. Anda perlu mengekspor sebagai SVG daripada hanya menyimpan sebagai SVG.
AJMansfield
2
Mungkin menghemat waktu pencarian: Pada Suse-Systems paket yang berisi rsvg-convertdipanggil rsvg-view.
Trendfischer
1
Ini bekerja untuk saya dan kualitas pdf sama dengan svg. Sebelum ini menggunakan imagemagick untuk mengkonversi ke pdf dan kualitasnya buruk terutama untuk svg.
Pratik Soni
1
Sayangnya, ini tidak menyematkan font pada macOS.
oarfish
79

Ini berfungsi di Ubuntu Lucid:

$ sudo apt-get install inkscape
$ inkscape t.svg --export-pdf=t.pdf

Doa Inkscape baris perintah di atas berfungsi bahkan dalam mode tanpa kepala, tanpa GUI ( DISPLAY=). Namun, menginstal Inscape menginstal banyak dependensi, termasuk X11.

Harap dicatat bahwa status keluar dari Inskscape selalu 0, bahkan jika terjadi kesalahan - jadi waspadalah terhadap stderrnya.

Ada juga inkscape --shell, cocok untuk mengonversi banyak dokumen dalam satu batch. Ini menghindari waktu startup Inkscape yang lambat untuk setiap file:

$ (echo t.svg --export-pdf=t.pdf;
   echo u.svg --export-pdf=u.pdf) |
  DISPLAY= inkscape --shell

Inkscape juga berguna untuk menyederhanakan SVG:

$ DISPLAY= inkscape t.svg --export-plain-svg=t.plain.svg
Poin
sumber
2
Sayangnya ini sepertinya tidak berfungsi pada OS X. Namun, jawaban yang bagus.
Konrad Rudolph
3
OP menetapkan bahwa Inkscape memiliki render bug; ini cocok dengan pengalaman saya.
Dylan Thurston
3
Pada OSX menggunakan Homebrew, Anda dapat menginstal Inkscape menggunakan brew install inkscapehari ini. Hasilnya /usr/local/bin/inkscapeberhasil bagi saya tanpa harus menjalankan X11.app.
Alex Schröder
2
Inkscape dapat diinstal pada OS X dari dmgdidistribusikan di situs web sendiri, dan kemudian dipanggil dari baris perintah setelah membuat dua tautan simbolis: ln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscapedan juga untuk inkscape-bin(dengan asumsi ~/binada di Anda $PATH).
Ioannis Filippidis
2
Anda dapat menggunakan bendera -z(atau --without-gui) dengan Inkscape untuk menjalankannya dalam mode batch saja (tidak ada jendela yang terbuka sama sekali).
Artefact2
8

Saya telah menggunakan CairoSVG dengan sukses di OSX dan Ubuntu.

pip install cairosvg
cairosvg in.svg -o out.pdf

Dokumentasi CairoSVG

SYK
sumber
Bahkan ada python-binding yang bisa Anda gunakan. Sayangnya saya menemukan bahwa metode ini agak terbatas, yaitu banyak fitur svg tidak didukung.
Bodo
7

Saya mendapatkan hasil yang baik dari mencetak dari Inkscape (0,47 juga) ke PDF, dan untuk menyimpan sebagai PDF (tetapi sedikit berbeda), tetapi ini mungkin tergantung pada grafik yang ada.

Alternatif dengan resolusi lebih rendah (saya tidak mencoba switch untuk memperbaikinya) adalah

 convert file.svgz file.pdf 

convertadalah bagian dari ImageMagickpaket. Rasterizer adalah program lain:

 rasterizer -m application/pdf file.svgz -d file.pdf 

Untuk mengetahuinya, program mana yang menangani svgs yang diinstal pada sistem Anda, coba saja

 apropos -s 1 svg

Halaman manual untuk program-program ini harus menjelaskan, apakah program tersebut berguna untuk mengkonversi svg ke pdf.

Pengguna tidak diketahui
sumber
18
Terima kasih atas saran Anda. FYI convertbukan jawaban untuk pertanyaan awal, karena convertmerasterisasi SVG ke gambar bitmap, dan pertanyaan awal mencari solusi yang tidak melakukannya.
Poin
5

https://superuser.com/a/79064/19956 menyebutkan gsvg , bagian dari GhostPDL.

Saya sudah mencoba gsvg ghostpdl-9.06 di Ubuntu Lucid, tetapi gagal untuk dua SVG yang dihasilkan oleh Inkscape. Satu SVG memiliki teks di dalamnya, yang lain hanya memiliki grafik vektor. Itu juga gagal untuk grafik sederhana tanpa ekstensi Inkscape atau clip-path. Jadi saya tidak menganggap gsvg sebagai konverter SVG-ke-PDF yang dapat digunakan.

Poin
sumber
3

Di Mac OS (mengingat Anda sudah menginstal bir) saya lakukan:

$ brew install cairo libffi python3
$ pip3 install cairosvg

$ cairosvg -o blah.pdf ./blah.svg 

Sama harus bekerja di Linux, tetapi dengan apt-get saja.

Adriel Jr
sumber
1
Ini berfungsi dengan output pdf juga. Berbeda dengan svg2pdfdan rsvg-convert, ini mempertahankan font.
oarfish
Terima kasih, saya meletakkan ekstensi yang salah. Saya memperbarui contoh.
Adriel Jr
Bekerja seperti pesona!
mayrop
1

Saya bertanya-tanya mengapa belum disebutkan sebelumnya, tetapi saya menguji sekelompok konverter pdf svg-> yang berbeda dan menemukan bahwa yang terbaik adalah Chrome Tanpa Kepala . Ini menghasilkan hasil yang paling tepat untuk saya. Sebelum beralih ke Chrome, saya mencoba untuk berkelahi dengan bug Inkscape, tetapi banyak dari mereka terlalu serius dan saya tidak bisa berbuat banyak tentang hal itu (bug transparansi, font yang salah, dll).

 chrome --headless --disable-gpu --print-to-pdf="output.pdf" "input.svg"

Perlu beberapa penyesuaian untuk menggunakan ukuran PDF khusus (A4 adalah default), tetapi saya dapat mengatur ukuran khusus setelah beberapa googling dan bermain dengan atribut CSS dan SVG (lihat jawaban ini di stackoverflow )

Avael Kross
sumber
Selamat Datang di Pengguna Super! Tautan eksternal dapat dipecah atau tidak tersedia, dalam hal ini jawaban Anda hanya akan menjadi penggoda. Meskipun tautan masih berfungsi, konten tidak dapat diindeks untuk membantu orang menemukan solusinya. Harap sertakan informasi penting dalam jawaban Anda dan gunakan tautan untuk atribusi dan bacaan lebih lanjut. Terima kasih.
fixer1234
dari WSL, Anda perlu beberapa bendera tambahanchromium --no-sandbox --disable-setuid-sandbox --headless --disable-gpu --print-to-pdf=output.pdf input.svg
ticapix
0

Buka file svg dengan Image Viewer(Juga disebut Eye of Gnome eog) dan cetak ke file PDF (katakanlah image.pdf) dan konversikan pdf itu menjadi eps menggunakan pdf2psperintah. Sederhana!

Langkah-langkah yang diuraikan:

  1. Instal Image Viewerjika belum dilakukan (langkah yang sangat tidak mungkin jika Anda gunakan gnome)

    sudo apt-get install eog
    
  2. Buka file svg dengan eogdan cetak ke image.pdffile.

  3. (Opsional) Hapus spasi putih sekitar dari file pdf:

    pdfcrop image.pdf
    

    Ini akan menghasilkan image-crop.pdfdengan spasi putih di sekitarnya dihapus.

  4. Konversi pdf yang dipotong menjadi eps (gunakan image.pdflangsung jika Anda tidak memotong pdf)

    pdf2ps image-crop.pdf image.eps
    

Itu dia!

codeman48
sumber