Converter · No upload

Convert SVG to PDF on your device

Render each SVG into a PDF at the scale you choose, on a page the size the file declares.

Statusidle Files— OutputPDF Network since file read—

Each file becomes a one-page PDF holding a raster picture of the drawing at the chosen scale (default 3×, 288 dpi). External references the check detects, scripts, <foreignObject> and files with no readable size are refused by name. A page over 200 inches is placed smaller and pixel limits can lower the scale; the row says so. Rows flag recognized SMIL animation; CSS-only animation is not flagged. Takes .svg.

How this converter works

This page turns an SVG into a picture inside a PDF. It reads the SVG text, works out the size from the width and height (in any supported unit) or the viewBox, and writes that size in pixels onto a working copy, since a browser drawing an unsized SVG falls back to 300 × 150. The browser then draws the copy onto a canvas at the scale you picked. Shapes are redrawn at that resolution, so edges stay sharp, but an embedded photo gains no detail. The colour pixels go into a compressed stream and any transparency into a soft mask, and the page is sized from the declared dimensions at 96 pixels per inch and 72 PDF points per inch. None of this uploads your file.

To watch the network yourself on a desktop browser, open developer tools (often F12), select Network and convert a file. A browser drawing an SVG as an image runs no scripts and fetches nothing from outside the file, including images, fonts and stylesheets at web addresses or file paths. A drawing that needs one of those comes out with a placeholder, a blank area or a substitute font, and no request appears, so a zero count can still hide an incomplete drawing. That is why this page refuses a file with an external reference it detects and names the reference on the row; the check can miss some CSS escapes and other reference forms. A link around a shape does not count as an external reference. Script elements are refused too. HTML inside a foreignObject is refused because the browser then stops the page from reading back the drawn pixels, which leaves nothing to write. The methodology page explains the other network checks.

The PDF holds a static raster picture, so shapes and text are no longer editable vectors; keep the SVG for later rendering. The page takes the declared size, with no paper size or margin added. The page allows about 268 million canvas pixels and 32,767 pixels a side. If your scale would pass those limits, it uses the largest scale that fits and says so, and a drawing that cannot fit at 1× is refused. Browser memory can still run out within those limits. Faint, semi-transparent canvas pixels can lose colour precision. Each SVG becomes its own one-page PDF, and Merge PDF combines them in the order you choose. Links around shapes do not become clickable PDF links. SMIL animation (animate, animateTransform, animateMotion and set) is flagged on the row; a CSS animation is not, and which moment of it gets captured was not tested.

Frequently asked questions

Is my SVG uploaded anywhere?
No. The browser draws the SVG you choose, and this page writes the PDF in the tab. The network meter counts resource-timing entries from the moment the file is read, so it leaves out earlier page and code loading and some other network channels. Once the page has loaded, converting a file while offline checks that the conversion runs locally.
Is the PDF still a vector drawing?
No. The shapes and text are drawn into pixels, and the PDF holds that picture, so nothing in it stays an editable vector; every row labels the output rasterised. If you need vectors, try your browser’s print-to-PDF on the SVG. It can keep vectors and fonts for some drawings, depending on the drawing and the browser, so check what it produces.
What page size do I get?
The size the SVG declares, at 96 CSS pixels per inch and 72 PDF points per inch, up to the page cap. A 210 × 297 mm drawing gives an A4-sized page, and a 200 × 100 CSS-pixel drawing gives a page of 150 × 75 points. A file with only a viewBox is sized at one user unit per CSS pixel, and the row says so. A file with no usable declared size is refused; the page does not guess a size from its shapes.
What does the scale control change?
It sets how many pixels the drawing is rendered with; the page size stays the same. The default 3× gives 288 dpi at the declared size, 1× gives 96 dpi, and 2× or 4× scale both pixel dimensions to match. Each page side is capped at 14,400 points (200 inches), and a larger page is placed smaller with every raster pixel kept, which the row reports. The canvas allows about 268 million pixels, so a large drawing can be rendered at a lower scale than you picked; the row gives the scale used, and a drawing that cannot fit at 1× is refused. Browser memory can set a lower limit.
Why was my file refused?
External images, fonts, stylesheets, file paths and CSS @import references are refused by name when the preflight check finds them. The check can miss some CSS escapes and other reference forms, so look over the output for missing pieces. A link wrapped around a shape is fine. Script elements and HTML inside foreignObject are refused too, including the HTML labels in draw.io and diagrams.net exports; export labels as paths or plain SVG text. Gzip-compressed SVGs and malformed XML are refused, and so is a file whose size cannot be read from its width, height or viewBox, though the size check does not validate every viewBox value. Missing fonts are substituted, so check the rendered text.

Related tools