Can I export part of an HTML page to an SVG image?

74,770

Solution 1

I've come across the same need and found the following free utilities which hold promise that this is possible:

  1. WebVector is an HTML to SVG or PNG convertor. It converts a HTML document into a vector image in SVG format or a bitmap image in PNG format. The Standard Vector Graphics (SVG) files can be further edited by a variety of vector graphics editors such as Inkscape.
    http://cssbox.sourceforge.net/webvector/

  2. CutyCapt is a small cross-platform command-line utility to capture WebKit's rendering of a web page into a variety of vector and bitmap formats, including SVG, PDF, PS, PNG, JPEG, TIFF, GIF, and BMP. See IECapt for a similar tool based on Internet Explorer.
    http://cutycapt.sourceforge.net/

  3. wkhtmltopdf and wkhtmltoimage are open source (LGPL) command line tools to render HTML into PDF and various image formats using the QT Webkit rendering engine. These run entirely "headless" and do not require a display or display service. There is also a C library, if you're into that kind of thing.
    http://wkhtmltopdf.org/

--

Unanswered Questions: I know that you can use something like rasterize.js to render DOM objects into <canvas>, but how are these libraries built such that they are able to export SVG? Specifically, can WebKit itself be used to output "pixel-perfect" editable SVG of web content and HTML snippets? Is this a relatively simple task for a library or is this something significantly more complex?

Solution 2

I managed to find a website that will do the conversion for you. All you have to do is paste the HTML in between line breaks and it does the rest. The URL is: http://www.hiqpdf.com/demo/ConvertHtmlToSvg.aspx

Solution 3

You can try wkhtmltoimage It can convert HTML to SVG and many different formats

Solution 4

Tried xthexder's advice: printing to file. (And then converting PDF to SVG.) I tried Opera, Firefox, and Chromium under Linux; overview below. Real pity about Opera's bugs.

I've made this answer community wiki; additions for other OSes welcome.

Opera 11.61 (Linux)

  • supports printing to SVG(!), PDF, and PS
  • uses author style sheet (unless you choose a different style sheet from the View menu, or disable CSS)
  • With PDF and PS output, no text is put in the file! This is v. strange and must be a bug.
  • If I choose SVG output, Opera produce a .svg file but writes PostScript code in it. :-(

Firefox 11.0 (Linux)

  • supports printing to PDF and PS
  • ignores author style sheet, prints in black and white
  • Uses DejaVu Serif font in a somewhat large size

Chromium 17 (Linux)

  • supports printing to PDF only
  • ignores author style sheet, prints in black and white
  • Uses Times New Roman

Solution 5

As mentioned in the accepted answer, the wkhtmltoimage library is a decent solution, though it isn't always perfect. I was at first a little confused about how to use it, so I'd like to share my current workflow:

  1. install wkhtmltopdf and add it to your path env var
  2. open your web app and put it in whatever state you want to capture
  3. use the SingleFile browser extension to make a static html snapshot of it
  4. run wkhtmltoimage mySnapshot.html mySnapshot.svg
  5. open it in Inkscape, ungroup the image and extract the part of the now-vectorized page you're interested in
Share:
74,770
Esteis
Author by

Esteis

Updated on March 24, 2021

Comments

  • Esteis
    Esteis about 3 years

    I need a vector image of a Wikipedia navbox. Unfortunately, Inkscape can't open the HTML file, and neither Opera nor Chromium can save the page as SVG. Googling, googling, and yet more googling turned up nothing; in particular, 'HTML2svg' seems to mean functionality where the HTML 'talks to' an SVG image inside it. Does anybody how to turn HTML into SVG, either the entire page or a div on the page? I need the styled HTML, CSS and all.

  • Erik Dahlström
    Erik Dahlström over 11 years
    Opera doesn't itself produce SVG output when printing, but the printer driver (not controlled by Opera) may translate the drawing commands and allow saving to different file formats e.g svg.
  • David Silva Smith
    David Silva Smith over 9 years
    so perfect! Just saved me HOURS! And improved the quality of what I was doing! So nice it gets the text as font and everything! I couldn't be happier
  • MeatFlavourDev
    MeatFlavourDev over 9 years
    I don't like that it's not a free solution :( Boo expensive licences.
  • Esteis
    Esteis over 9 years
    Ow. 395 US$ for a one-person license is incredibly expensive. That was certainly not in place when I accepted this answer. I'll still leave this answer accepted, but if something comparable and less expensive (or libre) comes along I expect I shall change the accepted answer over.
  • IKavanagh
    IKavanagh over 8 years
    Welcome to Stack Overflow! While this may answer the question, it would be preferable to include the essential parts of the answer here, and provide the link for reference.
  • Esteis
    Esteis over 8 years
    Hi Pierre, thank you very much for your answer. glm seems to be a program to turn text into HTML, right? My question is looking for a way to turn HTML+CSS into a vector image, so I cannot accept your answer; but have an upvote, and enjoy Stack Overflow!
  • Maciej Paprocki
    Maciej Paprocki over 8 years
    Can we change accepted answer then? It's shame to have to scroll to third answer :)
  • Newton Sheikh
    Newton Sheikh about 6 years
    @Bmize729 God bless you
  • krassowski
    krassowski almost 6 years
    I would add using chrome in the headless mode to this (great) list; see stackoverflow.com/a/50050884/6646912 for more info
  • Randall Whitman
    Randall Whitman about 5 years
    See my comments on these three methods at - superuser.com/questions/579933/…
  • Randall Whitman
    Randall Whitman about 5 years
    This method produces a nice all-vector result. It also produces the largest file, of the methods I've tried out on a small HTML form with radio buttons.
  • Esteis
    Esteis almost 5 years
    @MaciejPaprocki: Done. I'm sorry it took me so long to get around to it, I felt I had to test the solutions before accepting, and never found the time.
  • Maciej Paprocki
    Maciej Paprocki almost 5 years
    @Esteis you should get an award for xoming back after 4 years!
  • Esteis
    Esteis almost 5 years
    @MaciejPaprocki And you should get one for being enthusiastic and supportive! :D Thanks again for the comment pointing at the newer&better answer, and I hope you have a lovely weekend. <3
  • Ian Mackinnon
    Ian Mackinnon about 2 years
    It's worth noting that this converts text to paths, which may or may not be desirable, depending on the use case.