ฉันจะแปลง SVG เป็น PDF บน Linux ได้อย่างไร


126

ฉันจะแปลงและ SVG (มีข้อความภาษาละตินและกราฟิกแบบเวกเตอร์บางส่วน) เป็น PDF บน Linux ได้อย่างไร

ฉันลอง Inkscape 0.47 บน Ubuntu Lucid แต่มันเคลื่อนไหวกราฟิกย่อยบางแบบสุ่มและทำให้บางบรรทัดสั้นลงในไฟล์ PDF ของผลลัพธ์ ดังนั้นเอาต์พุตจึงไร้ประโยชน์เพราะกราฟิกมีลักษณะที่แตกต่างอย่างสิ้นเชิง

ฉันพยายามเปิด SVG ใน Google Chrome 16 และพิมพ์ลงใน PDF แต่มันบิดเบือนสีทั้งหมดและมันก็ลบองค์ประกอบบางอย่างออกไป (SVG ดูดีบนหน้าจอ แต่มันแย่ในตัวอย่างก่อนพิมพ์และ PDF ที่สร้างขึ้นก็ไม่ดีเช่นกัน)

ฉันไม่ต้องการแรสเตอร์หรือแสดง SVG วิธีแก้ปัญหาที่แปลง SVG เป็นภาพบิตแมปแล้วสร้าง PDF ด้วยภาพที่ฝังอยู่ไม่ใช่คำตอบสำหรับคำถามของฉัน (FYI Inscape 0.47 แสดงผลข้อความเป็นวิธีที่น่าเกลียดมากโดยไม่ลดรอยหยักเมื่อเรนเดอร์ไปที่ PNG)

ฉันมีตัวเลือกอื่น ๆ อีกบ้าง?


1
หากคุณมีเพียงไม่กี่ภาพในการแปลงคุณอาจพบว่าการใช้ตัวแปลงออนไลน์บางส่วนทำได้ง่ายขึ้น ฉันลองCloudConvertและใช้งานได้ดีมากโดยใช้ขนาดไฟล์เพียงครึ่งเดียวของ SVG
Frank Breitling

คำตอบ:


134

rsvg-convertทำเคล็ดลับสำหรับ SVG ที่ฉันต้องการแปลง

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

rsvg-convert -f pdfไม่แปลงค่า SVG ให้เป็น rasterize และฝังแบบอักษรและชุดย่อย (อย่างน้อยก็ฝังตัวอักขระที่ใช้ของแบบอักษร Arial) บางครั้งการฝังฟอนต์ล้มเหลว (เช่นสำหรับฟอนต์ LMRoman17) และไฟล์ฟอนต์ทั้งหมดจะถูกคัดลอกไปยัง PDF ที่สร้างขึ้น

การพึ่งพา 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

โดยค่าเริ่มต้น libcairo ต้องการ libX11 ดังนั้นการแปลง rsvg อาจจะยากที่จะติดตั้งกับระบบที่ไม่มีหัว

หมายเหตุ: man page of rsvg-convertstates ที่เครื่องมือ rasterizes เสมอ แต่นี่ไม่เป็นความจริง คู่มือนี้ล้าสมัยไปแล้ว บางครั้งเครื่องมือสร้าง svg ของคุณสามารถ rasterize ภาพ svg บางส่วนซึ่งอาจทำให้คุณเข้าใจผิด


4
นั่นเป็นการพึ่งพาอาศัยกันมากมายที่ฉันได้เห็นที่นี่: ไคโร, libgphoto, gtk3, libsane ... โอเคถ้ามันทำงาน ...
ShiDoiSi

4
@ AyberkÖzgürนั่นเป็นความผิดของ inkscape - เมื่อคุณบันทึกโครงการ Inkscape โดยค่าเริ่มต้นจะบันทึกเป็น SVG แต่ SVG ที่บันทึกจะรวมข้อมูลเฉพาะของ inkscape ที่ทำให้โปรแกรมอื่น ๆ คุณต้องส่งออกเป็น SVG แทนที่จะบันทึกเป็น SVG
AJMansfield

2
อาจบันทึกบางค้นหาเวลา: ใน SUSE ระบบแพคเกจประกอบด้วยการที่เรียกว่าrsvg-convert rsvg-view
Trendfischer

1
มันใช้งานได้สำหรับฉันและคุณภาพของไฟล์ PDF เหมือนกับ svg ก่อนหน้านี้ใช้ imagemagick เพื่อแปลงเป็น pdf และคุณภาพไม่ดีโดยเฉพาะสำหรับ svg
Pratik Soni

1
ขออภัยนี่ไม่ได้ฝังแบบอักษรบน macOS
oarfish

79

สิ่งนี้ใช้ได้กับ Ubuntu Lucid:

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

การเรียกใช้ Inkscape บรรทัดรับคำสั่งด้านบนใช้งานได้แม้ในโหมดหัวขาดโดยไม่มี GUI ( DISPLAY=) อย่างไรก็ตามการติดตั้ง Inscape จะติดตั้งการพึ่งพาจำนวนมากรวมถึง X11

โปรดทราบว่าสถานะทางออกของ Inskscape จะเป็น 0 เสมอแม้ว่าจะมีข้อผิดพลาดเกิดขึ้นดังนั้นโปรดระวัง stderr

นอกจากนี้ยังinkscape --shellเหมาะสำหรับการแปลงเอกสารจำนวนมากในชุด นี่เป็นการหลีกเลี่ยงเวลาเริ่มต้น Inkscape ที่ช้าสำหรับแต่ละไฟล์:

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

Inkscape ยังมีประโยชน์สำหรับการทำให้ SVG ง่ายขึ้น:

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

2
น่าเสียดายที่นี่ดูเหมือนจะใช้งานไม่ได้กับ OS X แต่ยังเป็นคำตอบที่ดี
Konrad Rudolph

3
OP ระบุว่า Inkscape มีการแสดงผลบั๊ก สิ่งนี้ตรงกับประสบการณ์ของฉัน
Dylan Thurston

3
บน OSX โดยใช้ Homebrew คุณสามารถติดตั้ง Inkscape ได้โดยใช้brew install inkscapeวันนี้ ผลที่/usr/local/bin/inkscapeได้สำหรับฉันโดยไม่ต้องเรียกใช้ X11.app
Alex Schröder

2
Inkscape สามารถติดตั้งบน OS X จากการdmgแจกจ่ายที่เว็บไซต์ของตัวเองแล้วเรียกจากบรรทัดคำสั่งหลังจากสร้างลิงก์สัญลักษณ์สองลิงก์: ln -s ~/Applications/Inkscape.app/Contents/Resources/bin/inkscape ~/bin/inkscapeและคล้ายกันสำหรับinkscape-bin(สมมติว่า~/binอยู่ในของคุณ$PATH)
Ioannis Filippidis

2
คุณสามารถใช้การตั้งค่าสถานะ-z(หรือ--without-gui) กับ Inkscape เพื่อเรียกใช้ในโหมดแบตช์เท่านั้น (ไม่มีหน้าต่างจะเปิดเลย)
Artefact2

8

ฉันใช้ CairoSVG ได้สำเร็จบน OSX และ Ubuntu

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

เอกสาร CairoSVG


มีแม้แต่การผูกหลามที่คุณสามารถใช้ได้ น่าเสียดายที่ฉันพบว่าวิธีนี้ค่อนข้าง จำกัด เช่นคุณสมบัติ svg จำนวนมากไม่ได้รับการสนับสนุน
bodo

7

ฉันได้รับผลลัพธ์ที่ดีจากการพิมพ์จาก Inkscape (0.47 ด้วย) ถึง PDF และสำหรับการบันทึกเป็น PDF (แต่แตกต่างกันเล็กน้อย) แต่สิ่งนี้อาจขึ้นอยู่กับกราฟิกในมือ

ทางเลือกที่มีความละเอียดต่ำกว่า (ฉันไม่ได้ลองสวิตช์ใด ๆ เพื่อปรับปรุงให้ดีขึ้น) คือ

 convert file.svgz file.pdf 

convertเป็นส่วนหนึ่งของImageMagickแพ็คเกจ Rasterizer เป็นโปรแกรมอื่น:

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

หากต้องการทราบว่ามีโปรแกรมใดบ้างที่จัดการ svgs ติดตั้งอยู่ในระบบของคุณเพียงลอง

 apropos -s 1 svg

manpage สำหรับโปรแกรมเหล่านี้ควรอธิบายว่าโปรแกรมนี้มีประโยชน์สำหรับการแปลง svg เป็น pdf


18
ขอขอบคุณสำหรับคำแนะนำของคุณ. FYI convertไม่ใช่คำตอบสำหรับคำถามเดิมเนื่องจากconvertแปลง SVG เป็นภาพบิตแมปให้เป็นรูปแบบเดิมและคำถามเดิมกำลังมองหาวิธีแก้ปัญหาที่ไม่ได้ทำเช่นนั้น
pts

5

https://superuser.com/a/79064/19956กล่าวถึงgsvgซึ่งเป็นส่วนหนึ่งของ GhostPDL

ฉันได้ลอง gsvg ghostpdl-9.06 บน Ubuntu Lucid แล้ว แต่มันล้มเหลวสำหรับ SVG สองตัวที่สร้างโดย Inkscape SVG หนึ่งมีข้อความอยู่ในนั้นอีกหนึ่งมีกราฟิกแบบเวกเตอร์เท่านั้น นอกจากนี้ยังล้มเหลวในการทำกราฟิกอย่างง่ายโดยไม่ต้องใช้ Inkscape extension หรือ clip-path ดังนั้นฉันจึงไม่พิจารณา gsvg ตัวแปลง SVG เป็น PDF ที่ใช้งานได้


3

บน Mac OS (พิจารณาว่าคุณได้ติดตั้งชงแล้ว) ฉัน:

$ brew install cairo libffi python3
$ pip3 install cairosvg

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

เดียวกันควรทำงานบน Linux แต่มีฉลาด - รับแทน


1
ใช้งานได้กับเอาต์พุต PDF เช่นกัน ตรงกันข้ามกับsvg2pdfและrsvg-convertสิ่งนี้จะรักษาแบบอักษร
oarfish

ขอบคุณฉันใส่นามสกุลผิด ฉันอัปเดตตัวอย่าง
Adriel Jr

ทำงานเหมือนจับใจ!
mayrop

1

ฉันสงสัยว่าทำไมมันยังไม่ได้รับการกล่าวถึงมาก่อน แต่ผมทดสอบพวงของ svg-> ไฟล์ PDF แปลงที่แตกต่างกันและพบว่าที่ดีที่สุดคือหัวขาด Chrome มันให้ผลลัพธ์ที่แม่นยำที่สุดสำหรับฉัน ก่อนที่จะเปลี่ยนมาใช้ Chrome ฉันพยายามต่อสู้กับข้อบกพร่องของ Inkscape แต่มีอยู่หลายตัวที่ร้ายแรงเกินไปและฉันไม่สามารถทำอะไรได้มากนัก (ข้อบกพร่องโปร่งใสแบบอักษรผิด ฯลฯ )

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

ต้องการ tweaks บางอย่างเพื่อใช้ขนาด PDF ที่กำหนดเอง (A4 เป็นค่าเริ่มต้น) แต่ฉันสามารถตั้งค่าขนาดที่กำหนดเองหลังจากเล่น googling และเล่นกับ CSS และ SVG (ดูคำตอบนี้ใน stackoverflow )


ยินดีต้อนรับสู่ Super User! ลิงก์ภายนอกสามารถทำลายหรือไม่สามารถใช้งานได้ซึ่งในกรณีนี้คำตอบของคุณจะเป็นแค่ทีเซอร์ แม้ในขณะที่ลิงก์ยังใช้งานได้ แต่เนื้อหาก็ไม่สามารถจัดทำดัชนีเพื่อช่วยให้ผู้คนค้นพบวิธีแก้ปัญหา โปรดใส่ข้อมูลที่จำเป็นภายในคำตอบของคุณและใช้ลิงก์สำหรับการระบุแหล่งที่มาและการอ่านเพิ่มเติม ขอบคุณ
fixer1234

จาก WSL คุณต้องมีการตั้งค่าสถานะพิเศษเพิ่มเติมchromium --no-sandbox --disable-setuid-sandbox --headless --disable-gpu --print-to-pdf=output.pdf input.svg
ticapix

0

เปิดไฟล์ svg ด้วยImage Viewer(เรียกอีกอย่างว่า Eye of Gnome eog) และพิมพ์เป็นไฟล์ PDF (พูดimage.pdf) และแปลงไฟล์ PDF เป็น eps โดยใช้pdf2psคำสั่ง Simple!

ขั้นตอนอย่างละเอียด:

  1. ติดตั้งImage Viewerถ้ายังไม่ได้ทำ (ขั้นตอนไม่น่าจะสูงมากถ้าคุณใช้gnome)

    sudo apt-get install eog
    
  2. เปิดไฟล์ svg ด้วยeogและพิมพ์ลงในimage.pdfไฟล์

  3. (ไม่บังคับ) ลบช่องว่างโดยรอบออกจากไฟล์ pdf:

    pdfcrop image.pdf
    

    สิ่งนี้จะสร้างขึ้นimage-crop.pdfเมื่อลบช่องว่างโดยรอบออก

  4. แปลงไฟล์ PDF ที่ถูกครอบตัดเป็น eps (ใช้image.pdfโดยตรงหากคุณไม่ได้ครอบตัด PDF)

    pdf2ps image-crop.pdf image.eps
    

แค่นั้นแหละ!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.