# pdf2svg

Under Linux there aren’t many freely available vector graphics editors and as far as I know there are none that can edit EPS (encapsulated postscript) and PDF (portable document format) files. I produce lots of these files in my day-to-day work and I would like to be able to edit them. The best vector graphics editor I have found so far is Inkscape but it only reads SVG files… (Edit: recent versions can import PDFs but I’m not entirely happy with how text is imported; in particular, that fonts are not imported from the PDF.)

To overcome this problem I have written a very small utility to convert PDF files to SVG files using Poppler and Cairo. Version 0.2.3 is available here (with modifications by Matthew Flaschen and Ed Grace). This appears to work on any PDF document that Poppler can read (try them in XPDF or Evince since they both use Poppler).

So now it is possible to easily edit PDF documents with your favourite SVG editor! One other alternative would be to use pstoedit but the commercial SVG module costs (unsurprisingly!) and the free SVG module is not very good at handling text… To install

      tar -zxf pdf2svg-0.2.3.tar.gz
cd pdf2svg-0.2.3
./configure --prefix=/usr/local
make
make install

To use

pdf2svg <input.pdf> <output.svg> [<pdf page no. or "all" >]

Note: if you specify all the pages you must give a filename with %d in it (which will automatically be replaced by the appropriate page number). E.g.

pdf2svg input.pdf output_page%d.svg all

### Source code

A Git repository is also available on GitHub.

### Binaries

pdf2svg is packaged for various Linux distributions (including Ubuntu and Fedora) and is available via the different package managers.

Windows binaries are available from GitHub; both 32 bit and 64 bit versions are available.

To cross compile for Windows under Linux, simply install the relevant cross-compiler packages (for Fedora this is mingw32-cairo and mingw32-poppler and their dependencies) and then replace “./configure” in the compilation instructions above with “mingw32-configure”.

• 2013-07-18 (v0.2.2): Updated to use the correct renderer call — bitmaps should now appear at full resolution.

Copyright © 2007 Matthew Flaschen; Updated to allow conversion of all pages at once.

## 11 thoughts on “pdf2svg”

1. Shlomit A says:

I need to compile pdf2svg with statis library, so in run it will not look for poppler library. How can I do it?

1. David Barton says:

Unfortunately I haven’t had much success in producing a statically compiled version yet. The normal options for doing it don’t seem to work for some reason.

2. Shlomit A says:

Thanks a lot.
If you will success – send me private note.

3. Shlomit A says:

Hi,

Installing pdf2svg required installation of poppler, cario & pixman.

It order to fix the dynamic problem, I decide to install it locally on another RedHat 6.4 machine. I set all environment variable as I did in my successfully installation, but when
I run in Poppler:
./configure –enable-poppler-glib
I get :
checking for CAIRO… no
configure: error: “Cairo output is required to build glib frontend”

1. David Barton says:

You need to have installed Cairo before installing Poppler and make sure that “pkg-config –modversion cairo” returns a sensible version of Cairo (it gives 1.14.2 on my machine). Note: pkg-config is the mechanism by which other packages can work out what the correct compilation flags are to link against that library.

4. Shlomit A says:

Thanks a lot!
I working now.

5. Hi there,

thank you for that awesome tool! I’m working on MacOS and just want to let you know (and everyone who’s interested) how to install pdf2svg on a Mac.

Just use Homebrew (http://brew.sh/) and install needed packages before installing pdf2svg.
In case of doubt which packages are actually missing just try “./configure –prefix=/usr/local”… the process will then check all required packages, an error will be thrown if any package is missing.

In my case only poppler and cairo have been missing. So, you only have to install them using Homebrew.

For example call in your terminal:

brew install cairo
brew install poppler

All dependencies will be installed automatically. That’s it.
Afterwards you can install pdf2svg as explained in the article above.

Thanks again for sharing your knowledge and this useful tool. …This reply is all I can give you in return.

Keep up the good work!

Arvid

1. …Ok, I’m stupid. Forget everything I wrote in my last comment.

I just mentioned that even pdf2svg is part of Homebrew. Therefore you can install everything by just calling:

brew install pdf2svg

Cheers. And best wishes from Hamburg, Germany.

Arvid

6. caizheng says:

I use Linux Linbertine O as the main font in some of my pdf files.
I tried to convert them to svg files using your program
but I found the text is slightly different from the original
as if they were bolden.

http://stackoverflow.com/questions/28797418/replace-all-font-glyphs-in-a-pdf-by-converting-them-to-outline-shapes

And it handled the conversion well. The result looks exactly the same as the original with all the text being vectorized.

7. I want use pdf2svg for a multi-page PDF. With all the resources occur only once under defs and the pages in multiple Groups or intrinsically tags like “page”.
There is also the command-line option all. But SVG contains always only the last page.
Can you give me a hint how I can solve this problem with pdf2svg.
Many thanks

1. David Barton says:

Hi, unfortunately pdf2svg only supports extracting pages as separate files. I’m not sure whether you can do what you want with the current version of Cairo. (Which is used to generate the SVG output.)