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

HtmlBrowserSvgRendering

Html Problem Overview


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.

Html Solutions


Solution 1 - Html

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

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

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

Solution 4 - Html

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

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

Solution 6 - Html

you can use foreignObject in your svg to define html element in svg.

   <svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
  <foreignObject x="20" y="20" width="160" height="160">
    <div xmlns="http://www.w3.org/1999/xhtml">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit.
      Sed mollis mollis mi ut ultricies. Nullam magna ipsum,
      porta vel dui convallis, rutrum imperdiet eros. Aliquam
      erat volutpat.
    </div>
  </foreignObject>
</svg>

If you want to convert your html elements to svg elements like rect,text,image you can use htmlsvg.js to do that.

live demo: https://htmlsvg.netlify.app/

Solution 7 - Html

The easiest way that I use is printing the website from Google Chrome in PDF, usually using the biggest Pagesize, Portrait mode, and Background Graphics Checked. Sometimes it has some minor bugs, but it is far better than all the solutions from the other answers.

Solution 8 - Html

You can try http://www.letime.net/alpha/glm.html

it do text to HTML5 draws in css3

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEsteisView Question on Stackoverflow
Solution 1 - HtmlMeatFlavourDevView Answer on Stackoverflow
Solution 2 - HtmlBmize729View Answer on Stackoverflow
Solution 3 - HtmlAmiya BeheraView Answer on Stackoverflow
Solution 4 - HtmlEsteisView Answer on Stackoverflow
Solution 5 - HtmlAndrew UlrichView Answer on Stackoverflow
Solution 6 - HtmlhasankzlView Answer on Stackoverflow
Solution 7 - HtmldrabView Answer on Stackoverflow
Solution 8 - Htmlpierre jocelyn andreView Answer on Stackoverflow