Trying to get this code working:
import cairosvg import os path = "D:/PyProjects/Bla/Temp" os.chdir(path) cairosvg.svg2pdf(url='Pic.svg', write_to='image.pdf')
but get errors along similar to this post:
Traceback (most recent call last): File "D:/work/lean_python/pdf/other.py", line 2, in <module> import cairosvg File "D:env_python352libsite-packagescairosvg__init__.py", line 29, in <module> from . import surface File "D:env_python352libsite-packagescairosvgsurface.py", line 24, in <module> import cairocffi as cairo File "D:env_python352libsite-packagescairocffi__init__.py", line 46, in <module> cairo = dlopen(ffi, 'cairo', 'cairo-2') File "D:env_python352libsite-packagescairocffi__init__.py", line 43, in dlopen raise OSError("dlopen() failed to load a library: %s" % ' / '.join(names)) OSError: dlopen() failed to load a library: cairo / cairo-2
The post mentions:
CairoSVG (the python library and bindings) needs Cairo (The C library, part of GTK+) to run. It appears you don't have it an it's headers installed on your system.
So I followed step 1 – 5 described here. I now have cairo header files in:
I also installed pycairo recommended by another source:
pip install pycairo-1.15.2-cp36-cp36m-win_amd64.whl
I still get the above errors. Any ideas?
I just do not get cairosvg to work. I found an alternative way to transform an svg into a png using the svglib package.
from svglib.svglib import svg2rlg from reportlab.graphics import renderPDF, renderPM import os path = "D:/Bla/Temp" os.chdir(path) drawing = svg2rlg("Pic.svg") renderPM.drawToFile(drawing, "Pic.png")
Please check the path of
libcairo-2.dll with the
In my case, It was a directory of old software called
python >>> import ctypes.util >>> path = ctypes.util.find_library('libcairo-2') >>> print(path) C:Program Files (x86)Graphviz 2.28binlibcairo-2.dll
python >>> import ctypes.util >>> path = ctypes.util.find_library('libcairo-2') >>> print(path) C:msys64mingw64binlibcairo-2.dll
The following workaround works for me:
python -m pip install cairosvg)
import cairosvgin a script.
OSError: no library called "cairo" was found):
libcairo-2.dllwas installed to.
os.environ['path'] += r';C:pathcairodlls'
import cairosvgshould now succeed and work.
(Assumes you are running 64bit version of Python, otherwise use
You can first install cairocffi package first using a built binary package, then install cairosvg. That will resolve the problem.
I adopted a different way but discovered in the process a fix that allowed
cairosvg to work on Windows 11 and Python 3.10. Even with the GTK3 Runtime Win64 installed the dll could not be loaded and generated an error. This resolved the issue. Add this code before
import cairosvg. Source of idea was jcupitt, https://github.com/libvips/pyvips:
import os gtkbin = r'C:Program FilesGTK3-Runtime Win64bin' add_dll_dir = getattr(os, 'add_dll_directory', None) if callable(add_dll_dir): add_dll_dir(gtkbin) else: os.environ['PATH'] = os.pathsep.join((gtkbin, os.environ['PATH'])) import cairosvg cairosvg.svg2pdf(url='banana-coloured.svg', write_to='image.pdf')
The following worked for me:
I had GIMP for Windows installed in my Program Files folder.
I copied the bin folder in to cairo folder in the root of my folder and then added it to path before importing the cairo package in Python.
import os folder_path = os.path.abspath("./cairo/bin/") path_env_var = os.environ["PATH"] if folder_path not in path_env_var: os.environ["PATH"] = folder_path + os.pathsep + path_env_var import cairosvg