Skip to content

Instantly share code, notes, and snippets.

@arkadiusz-wieczorek
Forked from s417-lama/svg2pdf.bash
Created August 3, 2020 05:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arkadiusz-wieczorek/e74d6cbefd541cec03a6e435ba0e44a6 to your computer and use it in GitHub Desktop.
Save arkadiusz-wieczorek/e74d6cbefd541cec03a6e435ba0e44a6 to your computer and use it in GitHub Desktop.
Reliable way to convert an SVG file to a PDF file using headless Chrome
#!/bin/bash
#
# Convert an SVG file to a PDF file by using headless Chrome.
#
if [ $# -ne 2 ]; then
echo "Usage: ./svg2pdf.bash input.svg output.pdf" 1>&2
exit 1
fi
INPUT=$1
OUTPUT=$2
HTML="
<html>
<head>
<style>
body {
margin: 0;
}
</style>
<script>
function init() {
const element = document.getElementById('targetsvg');
const positionInfo = element.getBoundingClientRect();
const height = positionInfo.height;
const width = positionInfo.width;
const style = document.createElement('style');
style.innerHTML = \`@page {margin: 0; size: \${width}px \${height}px}\`;
document.head.appendChild(style);
}
window.onload = init;
</script>
</head>
<body>
<img id=\"targetsvg\" src=\"${INPUT}\">
</body>
</html>
"
tmpfile=$(mktemp XXXXXX.html)
trap "rm -f $tmpfile" EXIT
echo $HTML > $tmpfile
google-chrome --headless --disable-gpu --print-to-pdf=$OUTPUT $tmpfile
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment