Làm cách nào để chuyển đổi SVG thành PDF trên Linux


126

Làm cách nào để chuyển đổi và SVG (chứa một vài từ văn bản Latin và một số đồ họa vector đơn giản) thành PDF trên Linux?

Tôi đã thử Inkscape 0.47 trên Ubuntu Lucid, nhưng nó di chuyển một số đồ họa phụ một cách ngẫu nhiên và nó làm cho một số dòng ngắn hơn trong bản PDF đầu ra. Vì vậy, đầu ra của nó là vô ích, bởi vì đồ họa trông hoàn toàn khác nhau.

Tôi đã thử mở SVG trong Google Chrome 16 và in nó thành PDF, nhưng nó làm biến dạng tất cả các màu và nó cũng loại bỏ một số yếu tố. (SVG xuất hiện tốt trên màn hình, nhưng nó đã bị lỗi trong bản xem trước in và PDF được tạo cũng xấu.)

Tôi không muốn rasterize hoặc kết xuất SVG. Một giải pháp chuyển đổi SVG thành hình ảnh bitmap và sau đó tạo tệp PDF với hình ảnh được nhúng không phải là câu trả lời cho câu hỏi của tôi. (FYI Inscape 0.47 biểu hiện văn bản là một cách rất xấu, không có khử răng cưa, khi kết xuất thành PNG.)

Tôi có những lựa chọn nào khác?


1
Nếu bạn chỉ có một vài hình ảnh để chuyển đổi, bạn có thể thấy việc sử dụng một số trình chuyển đổi trực tuyến dễ dàng hơn. Tôi đã thử CloudConvert và nó đã làm rất tốt với một nửa kích thước tệp của SVG.
Frank Breitling

Câu trả lời:


134

rsvg-convert đã thực hiện thủ thuật cho SVG mà tôi muốn chuyển đổi:

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

rsvg-convert -f pdfkhông rasterize SVG, và nó nhúng và tập hợp các phông chữ (ít nhất là nó đã nhúng các ký tự được sử dụng của phông chữ Arial). Đôi khi, việc nhúng phông chữ không thành công (ví dụ: phông chữ LMRoman17) và toàn bộ tệp phông chữ được sao chép vào tệp PDF được tạo.

Phụ thuộc vào Ubuntu Lucid:

  • 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

Theo mặc định, libcairo cần libX11, vì vậy rsvg-convert có thể khó cài đặt vào hệ thống không đầu.

Lưu ý: Trang hướng dẫn các rsvg-converttrạng thái mà công cụ luôn raster, nhưng điều này không đúng. Hướng dẫn đơn giản là lỗi thời. Đôi khi công cụ tạo svg của bạn có thể raster một phần hình ảnh svg, điều này cũng có thể đánh lừa bạn.


4
Đó là rất nhiều sự phụ thuộc mà tôi thấy ở đây: cairo, libgphoto, gtk3, libsane ... Ồ, nếu nó làm được việc ...
ShiDoiSi

4
Nếu Bạn cần xuất dưới dạng SVG thay vì chỉ lưu dưới dạng SVG.
AJMansfield 7/11/2015

2
Có thể tiết kiệm thời gian tìm kiếm: Trên Suse-Systems, gói chứa rsvg-convertđược gọi rsvg-view.
Trendfischer

1
Nó làm việc cho tôi và chất lượng của pdf giống như svg. Trước đây, điều này đã được sử dụng hình ảnh để chuyển đổi sang pdf và chất lượng rất kém, đặc biệt là đối với svg.
Pratik Soni

1
Thật không may, điều này không nhúng các phông chữ trên macOS.
oarfish

79

Điều này hoạt động trên Ubuntu Lucid:

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

Lệnh gọi Inkscape dòng lệnh ở trên hoạt động ngay cả trong chế độ không đầu, không có GUI ( DISPLAY=). Tuy nhiên, cài đặt Inscape sẽ cài đặt rất nhiều phụ thuộc, bao gồm X11.

Xin lưu ý rằng trạng thái thoát của Inskscape luôn là 0, ngay cả khi xảy ra lỗi - vì vậy hãy coi chừng stderr của nó.

Ngoài ra inkscape --shell, phù hợp để chuyển đổi nhiều tài liệu trong một lô. Điều này tránh thời gian khởi động Inkscape chậm cho mỗi tệp:

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

Inkscape cũng hữu ích để đơn giản hóa một SVG:

$ DISPLAY= inkscape t.svg --export-plain-svg=t.plain.svg

2
Thật không may, điều này dường như không hoạt động trên OS X. Tuy nhiên, câu trả lời hay.
Konrad Rudolph

3
OP chỉ định rằng Inkscape có lỗi kết xuất; Điều này phù hợp với kinh nghiệm của tôi.
Dylan Thurston

3
Trên OSX sử dụng Homebrew, bạn có thể cài đặt Inkscape trong brew install inkscapenhững ngày này. Kết quả /usr/local/bin/inkscapeđã làm việc cho tôi mà không phải chạy X11.app.
Alex Schröder

2
Inkscape có thể được cài đặt trên OS X từ dmgphân phối tại trang web riêng của mình và sau đó được gọi từ dòng lệnh sau khi tạo hai liên kết tượng trưng: ln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscapevà tương tự cho inkscape-bin(giả sử ~/binlà trong của bạn $PATH).
Ioannis Filippidis

2
Bạn có thể sử dụng cờ -z(hoặc --without-gui) với Inkscape để chỉ chạy ở chế độ hàng loạt (không có cửa sổ nào mở cả).
Artefact2

8

Tôi đã sử dụng CairoSVG thành công trên OSX và Ubuntu.

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

Tài liệu CairoSVG


Thậm chí có những ràng buộc python bạn có thể sử dụng. Thật không may, tôi thấy rằng phương pháp này khá hạn chế, tức là rất nhiều tính năng của Svg không được hỗ trợ.
Bodo

7

Tôi nhận được kết quả tốt từ việc in từ Inkscape (0,47 cũng vậy) sang PDF và để lưu dưới dạng PDF (nhưng hơi khác), nhưng điều này có thể phụ thuộc vào đồ họa trong tay.

Một thay thế với độ phân giải thấp hơn (tôi đã không thử bất kỳ công tắc nào để cải thiện nó) là

 convert file.svgz file.pdf 

convertlà một phần của ImageMagickgói. Rasterizer là một chương trình khác:

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

Để tìm hiểu, chương trình nào xử lý các Svss được cài đặt trên hệ thống của bạn, chỉ cần thử

 apropos -s 1 svg

Trang hướng dẫn cho các chương trình này sẽ giải thích, khi chương trình này hữu ích cho việc chuyển đổi svg sang pdf.


18
Cám ơn bạn đã đóng góp ý kiến. FYI convertkhông phải là một câu trả lời cho câu hỏi ban đầu, bởi vì convertraster SVG thành hình ảnh bitmap, và câu hỏi ban đầu là tìm kiếm một giải pháp không làm được điều đó.
pts

5

https://superuser.com/a/79064/19956 đề cập đến gsvg , một phần của GhostPDL.

Tôi đã thử gsvg ghostpdl-9.06 trên Ubuntu Lucid, nhưng không thành công với hai SVG do Inkscape tạo ra. Một SVG có văn bản trong đó, cái còn lại chỉ có đồ họa vector. Nó cũng thất bại đối với đồ họa đơn giản mà không có phần mở rộng Inkscape hoặc đường dẫn clip. Vì vậy, tôi không coi gsvg là trình chuyển đổi SVG-to-PDF có thể sử dụng được.


3

Trên Mac OS (xem xét rằng bạn đã cài đặt brew) Tôi làm:

$ brew install cairo libffi python3
$ pip3 install cairosvg

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

Tương tự sẽ hoạt động trên Linux, nhưng với apt-get thay thế.


1
Điều này làm việc với đầu ra pdf là tốt. Ngược lại svg2pdfrsvg-convert, điều này bảo tồn các phông chữ.
oarfish

Cảm ơn, tôi đặt phần mở rộng sai. Tôi đã cập nhật ví dụ.
Adriel Jr

Làm việc như người ở!
mayrop

1

Tôi tự hỏi tại sao nó chưa được đề cập trước đây, nhưng tôi đã thử nghiệm một loạt các trình chuyển đổi svg-> pdf khác nhau và thấy rằng cái tốt nhất là Chrome không đầu . Nó tạo ra kết quả chính xác nhất cho tôi. Trước khi chuyển sang Chrome, tôi đã cố gắng chiến đấu với các lỗi Inkscape, nhưng nhiều lỗi trong số đó quá nghiêm trọng và tôi không thể làm gì nhiều về nó (lỗi trong suốt, phông chữ sai, v.v.).

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

Nó cần một số điều chỉnh để sử dụng kích thước PDF tùy chỉnh (A4 là mặc định), nhưng tôi đã có thể đặt kích thước tùy chỉnh sau khi một số googling và chơi với các thuộc tính CSS và SVG (xem câu trả lời này trên stackoverflow )


Chào mừng bạn đến với Siêu người dùng! Liên kết bên ngoài có thể bị hỏng hoặc không có sẵn, trong trường hợp đó, câu trả lời của bạn sẽ chỉ là một lời trêu ghẹo. Ngay cả khi các liên kết vẫn hoạt động, nội dung không thể được lập chỉ mục để giúp mọi người tìm giải pháp. Vui lòng bao gồm các thông tin cần thiết trong câu trả lời của bạn và sử dụng liên kết để ghi nhận và đọc thêm. Cảm ơn.
fixer1234

từ WSL, bạn cần thêm một số cờchromium --no-sandbox --disable-setuid-sandbox --headless --disable-gpu --print-to-pdf=output.pdf input.svg
ticapix

0

Mở tệp svg bằng Image Viewer(Còn được gọi là Eye of Gnome eog) và in nó thành tệp PDF (giả sử image.pdf) và chuyển đổi pdf thành eps bằng pdf2pslệnh. Đơn giản!

Các bước xây dựng:

  1. Cài đặt Image Viewernếu chưa được thực hiện (bước rất khó xảy ra nếu bạn sử dụng gnome)

    sudo apt-get install eog
    
  2. Mở tập tin svg với eogvà in nó thành image.pdftập tin.

  3. (Tùy chọn) Xóa khoảng trắng xung quanh khỏi tệp pdf:

    pdfcrop image.pdf
    

    Điều này sẽ tạo ra image-crop.pdfvới khoảng trắng xung quanh được loại bỏ.

  4. Chuyển đổi pdf đã cắt thành eps (sử dụng image.pdftrực tiếp nếu bạn không cắt pdf)

    pdf2ps image-crop.pdf image.eps
    

Đó là nó!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.