One-page typeset report
- Input
- sample.pdf, one Letter page, 21,438 bytes, Libertinus Serif text, a three-column table and a rule.
- Output
- 142,855-byte SVG in 8 ms with 94 outline paths and no text elements; visually identical to the page at any zoom.
PDF → SVG is a vector export, not a trace: page geometry, rules and glyph outlines are copied into an SVG with a 612×792 point viewBox for a Letter page.
From real runs
| Element | Result | What happens |
|---|---|---|
| Page geometry | Kept | The SVG root carries viewBox 0 0 612 792 in PDF points, so the page scales without rounding and margins match the original. |
| Text | Changed | By default every glyph is exported as an outline path (94 paths for a one-page report), which renders identically anywhere but cannot be selected or searched. |
| Text with textAsPath=false | Changed | The page became 27 text elements and one path at 8,380 bytes, but they reference font-family LibertinusSerif without embedding it, so other machines substitute a font. |
| Vector rules and shapes | Kept | The horizontal rule under the table heading stayed a precise line rather than a row of pixels. |
| Embedded images | Kept | Raster images inside a PDF are carried as embedded image elements at their placed size; they are not re-traced. |
| Links and form fields | Lost | Link annotations, bookmarks and interactive fields have no SVG equivalent and are dropped. |
| File size | Changed | Outlined text made the SVG 142,855 bytes from a 21,438-byte PDF; keeping text as text shrank it to 8,380 bytes. |
The SVG root carries viewBox 0 0 612 792 in PDF points, so the page scales without rounding and margins match the original.
By default every glyph is exported as an outline path (94 paths for a one-page report), which renders identically anywhere but cannot be selected or searched.
The page became 27 text elements and one path at 8,380 bytes, but they reference font-family LibertinusSerif without embedding it, so other machines substitute a font.
The horizontal rule under the table heading stayed a precise line rather than a row of pixels.
Raster images inside a PDF are carried as embedded image elements at their placed size; they are not re-traced.
Link annotations, bookmarks and interactive fields have no SVG equivalent and are dropped.
Outlined text made the SVG 142,855 bytes from a 21,438-byte PDF; keeping text as text shrank it to 8,380 bytes.
We converted our PDF sample (21 KB) with Image engine on 2026-09-11. It took 7 ms and produced a 140 KB SVG file, 6.7× larger than the input. The engine raised 1 warning, listed below.
Input · sample.pdf · 21 KB
PDF 1.7, 1 page, selectable text (LibertinusSerif-Bold-Identity-H, LibertinusSerif-Bold, LibertinusSerif-Regular-Identity-H, LibertinusSerif-Regular), 0 image objects
Output · sample.svg · 140 KB
SVG viewBox 0 0 612 792, 94 paths
First lines of the output
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" width="612" height="792" viewBox="0 0 612 792">
<defs>
<path id="font_1_1" d="M.24198914 .1219635V.29882813H.32299806C.3919983 .29882813 .41099549 .27983094 .4139862 .23487854 .41999818 .22888184 .45098878 .22888184 .45700074 .23487854 .45498658 .26985169 .45498658 .29981996 .45498658 .32281495 .45498658 .3458252 .45599366 .379776 .45700074 .40875245 .45098878 .4147339 .41999818 .4147339 .4139862 .40875245 .41099549 .35380555 .3899994 .34481813 .32299806 .34481813H.24198914V.5535736C.24198914 .5775604 .25898744 .6025238 .2829895 .602523…A scanned PDF has no vector content, so PDF → SVG wraps the page image in an SVG with no gain in quality or searchability. Detect a scan by trying to select text in a viewer; if nothing selects, use PDF → TXT or PDF → DOCX with AI Deep Read (1 credit per page).
PyMuPDF
import fitz
for i, page in enumerate(fitz.open("in.pdf")):
open(f"page-{i + 1}.svg", "w").write(page.get_svg_image(text_as_path=True))text_as_path=False keeps text elements but does not embed fonts; check the result on a machine without the originals.
Inkscape
inkscape in.pdf --pdf-page=1 --export-type=svg --export-filename=page-1.svgInkscape converts one page per run and may rewrite fonts to its own substitutes.
The HTTP API and the MCP server run the exact engine this page uses (Image engine); the response carries the same warnings the web converter shows. Check support first with GET /api/v1/pairs?from=pdf&to=svg.
curl -X POST https://filetypeconverters.com/api/v1/convert \
-H "Authorization: Bearer $FTC_API_KEY" \
-F "file=@input.pdf" -F "from=pdf" -F "to=svg" \
-F 'options={"dpi":96}' \
--output output.svg| Key | Applies to | Type | Default |
|---|---|---|---|
| dpi | Reading PDF | number | 96 |
| width | Writing SVG | number | 0 |
| height | Writing SVG | number | 0 |
| fit | Writing SVG | contain · cover · fill | contain |
| quality | Writing SVG | number | 90 |
| background | Writing SVG | string | #ffffff |
| stripMetadata | Writing SVG | boolean | true |
Text is exported as outline paths by default so the page renders identically without the PDF's embedded fonts. Set textAsPath to false to keep text elements, accepting that the viewing machine must supply a matching font.
Each glyph outline is written as coordinates in plain XML, and the PDF stored the same shapes once in a compressed font. A page of prose grows several times; a page of drawings stays close to the PDF size.
A ZIP containing one SVG per page, named sample-page-1.svg, sample-page-2.svg and so on. Use max_pages to cap how many are exported.