Fastest Way to Convert Svg to Emf Repeatably Using Inkscape and Python
Python 3.9.0 Inkscape 0.92 I Use Inkscape to Convert Svg to Emf, However It Takes Too Much Time. Simple Example Code Import Subprocess Def...
Python 3.9.0 Inkscape 0.92
I use Inkscape to convert SVG to EMF, however it takes too much time.
Simple example code
import subprocess
def convert_svg_to_emf(input_svg_path, output_emf_path):
# This method takes ~1 seconds
subprocess.run([
"C:\\Inkscape\\Inkscape.exe", # Inkscape executor path
input_svg_path, # Input SVG file
"--export-emf",
output_emf_path # Output EMF file
])
# Assume I have 100 files to convert
for i in range(100):
convert_svg_to_emf(f"svg{i}.svg", f"emf{i}.emf")
# This script takes ~100 seconds
Although it depends on input files, but every single call of 'convert_svg_to_emf' takes at least few seconds. But when I try converting it from Inkscape directly, a output file appears almost immediately. So I presume 'opening' and 'quitting' of the application by subprocess.run charges most processing time.
Is there any method to make this faster?
My expectation
inkscape = open_inkscape() # Keep opening Inkscape app
for i in range(100):
inkscape.convert_svg_to_emf(f"svg{i}.svg", f"emf{i}.emf")
inkscape.quit() # Quit the app after all work done
# This script conducts 'opening' and 'quitting' just once regardless of number of files.
1 Answer
Inkscape offers some commandline options. The most efficient way is to use the pipe command, or to run Inkscape in Shell Mode. From the examples:
cat my_file.svg | inkscape --pipe --export-filename=my_file.pdf