Skip to content

Instantly share code, notes, and snippets.

@whitelynx
Last active October 11, 2017 18:02
Show Gist options
  • Save whitelynx/215b259f9c15373b26ada64115eb6a93 to your computer and use it in GitHub Desktop.
Save whitelynx/215b259f9c15373b26ada64115eb6a93 to your computer and use it in GitHub Desktop.
''' WeasyPrint @font-face test cases
The following test cases are included:
- data-uri-separate-css.pdf: Specifying font src using data URI, using WeasyPrint's CSS class for stylesheet
- data-uri-included-css.pdf: Specifying font src using data URI, using CSS in HTML <style> tag
- google-font-separate-css.pdf: Specifying font src using https URI from Google Fonts, using WeasyPrint's CSS class for stylesheet
- google-font-included-css.pdf: Specifying font src using https URI from Google Fonts, using CSS in HTML <style> tag
Testing:
# virtualenv virtenv
# virtenv/bin/pip install WeasyPrint
# virtenv/bin/python test-font-face.py
'''
import logging
import weasyprint
from weasyprint import CSS, HTML
from weasyprint.fonts import FontConfiguration
logging.basicConfig(level=logging.NOTSET)
print('cairo version: {}'.format(weasyprint.pdf.cairo.cairo_version_string()))
print('pango version: {}'.format(weasyprint.text.pango.pango_version()))
cssDataURI = r'''
@font-face {
font-family: 'progenisis';
src: url('data:application/x-font-ttf;base64,AAEAAAASAQAABAAgTFRTSGo6jsoAAA48AAAAR09TLzJUukPUAAABqAAAAE5WRE1YYvJqpQAARCgAAAXgY21hcMHqdG4AAAygAAABnGN2dCAAzwfIAAAQMAAAABZmcGdtMkRzXQAADswAAAFiZ2FzcAAXAAkAAAH4AAAAEGdseWaOyg63AAAV3AAAIahoZG14u90dgAAAEVQAAASIaGVhZNLlYaYAAAEsAAAANmhoZWEI5wNEAAABZAAAACRobXR40OIBGwAAEEgAAAEMa2VybnF0bMEAADjUAAALUmxvY2ErlDQyAAA3hAAAAIhtYXhwAlEBewAAAYgAAAAgbmFtZVgjWwgAAAIIAAAKmHBvc3SPPm3mAAA4DAAAAMZwcmVwKrOkLQAADoQAAABIAAEAAAABAAAN7xuBXw889QAZCAAAAAAAtrSyIwAAAAC5hmYR//7+4wOBBZoAAAAAAAAAAAAAAAAAAQAABT3+4wApBAD//gAdA4EAAQAAAAAAAAAAAAAAAAAAAEMAAQAAAEMAGAADAAAAAAABAAAAAAAKAAACAAFiAAAAAAAAA0gBkAAFAAABpAGkAAACTAGkAaQAAAJMAGYCAAAAAgAFBgAAAAIABAAAAAEAAAAAAAAAAAAAAABTV0FQAAAAIOAIBGb/NQBQBT0BHQAAAAAAAwAIAAIAEAAB//8AAwAAAB4BbgABAAAAAAAAAQYAAAABAAAAAAABAAoBBgABAAAAAAACAAcBEAABAAAAAAADACEBFwABAAAAAAAEAAoBOAABAAAAAAAFACIBQgABAAAAAAAGAAoBZAABAAAAAAAHAC4BbgABAAAAAAAJABABnAABAAAAAAAMAB4BrAABAAAAAAANAQYBygABAAAAAAAOACMC0AABAAAAAAAQAAoC8wABAAAAAAARAAcC/QABAAAAAAASAAoDBAADAAEECQAAAgwD\
DgADAAEECQABABQFGgADAAEECQACAA4FLgADAAEECQADAEIFPAADAAEECQAEABQFfgADAAEECQAFAEQFkgADAAEECQAGABQF1gADAAEECQAHAFwF6gADAAEECQAJACAGRgADAAEECQAMADwGZgADAAEECQANAgwGogADAAEECQAOAEYIrgADAAEECQAQABQI9AADAAEECQARAA4JCAADAAEECQASABQJFkNvcHlyaWdodCAoYykgRHVzdGluIE5vcmxhbmRlciwgMjAwMi4gDQpUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciBhbnkgbGF0ZXIgdmVyc2lvbi5wcm9nZW5pc2lzUmVndWxhckR1c3Rpbk5vcmxhbmRlcjogcHJvZ2VuaXNpczogMjAwMXByb2dlbmlzaXNWZXJzaW9uIDEuMDsgMjAwMTsgaW5pdGlhbCByZWxlYXNlcHJvZ2VuaXNpc3Byb2dlbmlzaXMgaXMgYSB0cmFkZW1hcmsgb2YgRHVzdGluIE5vcmxhbmRlci5EdXN0aW4gTm9ybGFuZGVyaHR0cDovL3d3dy5jaGVhcHNrYXRlZm9udHMuY29tQ29weXJpZ2h0IChjKSBEdXN0aW4gTm9ybGFuZGVyLCAyMDAyLiANClRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0\
ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIGFueSBsYXRlciB2ZXJzaW9uLmh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0cHJvZ2VuaXNpc1JlZ3VsYXJwcm9nZW5pc2lzAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABjACkAIABEAHUAcwB0AGkAbgAgAE4AbwByAGwAYQBuAGQAZQByACwAIAAyADAAMAAyAC4AIAANAAoAVABoAGkAcwAgAHAAcgBvAGcAcgBhAG0AIABpAHMAIABmAHIAZQBlACAAcwBvAGYAdAB3AGEAcgBlADsAIAB5AG8AdQAgAGMAYQBuACAAcgBlAGQAaQBzAHQAcgBpAGIAdQB0AGUAIABpAHQAIABhAG4AZAAvAG8AcgAgAG0AbwBkAGkAZgB5ACAAaQB0ACAAdQBuAGQAZQByACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIAB0AGgAZQAgAEcATgBVACAARwBlAG4AZQByAGEAbAAgAFAAdQBiAGwAaQBjACAATABpAGMAZQBuAHMAZQAgAGEAcwAgAHAAdQBiAGwAaQBzAGgAZQBkACAAYgB5ACAAdABoAGUAIABGAHIAZQBlACAAUwBvAGYAdAB3AGEAcgBlACAARgBvAHUAbgBkAGEAdABpAG8AbgA7ACAAZQBpAHQAaABlAHIAIAB2AGUAcgBzAGkAbwBuACAAMgAgAG8AZgAgAHQAaABlACAATABpAGMAZQBuAHMAZQAsACAAbwByACAAYQBuAHkAIABsAGEAdABlAHIAIAB2AGUAcgBzAGkAbwBuAC4AcAByAG8AZwBlAG4AaQBzAGkAcwBSAGUA\
ZwB1AGwAYQByAEQAdQBzAHQAaQBuAE4AbwByAGwAYQBuAGQAZQByADoAIABwAHIAbwBnAGUAbgBpAHMAaQBzADoAIAAyADAAMAAxAHAAcgBvAGcAZQBuAGkAcwBpAHMAVgBlAHIAcwBpAG8AbgAgADEALgAwADsAIAAyADAAMAAxADsAIABpAG4AaQB0AGkAYQBsACAAcgBlAGwAZQBhAHMAZQBwAHIAbwBnAGUAbgBpAHMAaQBzAHAAcgBvAGcAZQBuAGkAcwBpAHMAIABpAHMAIABhACAAdAByAGEAZABlAG0AYQByAGsAIABvAGYAIABEAHUAcwB0AGkAbgAgAE4AbwByAGwAYQBuAGQAZQByAC4ARAB1AHMAdABpAG4AIABOAG8AcgBsAGEAbgBkAGUAcgBoAHQAdABwADoALwAvAHcAdwB3AC4AYwBoAGUAYQBwAHMAawBhAHQAZQBmAG8AbgB0AHMALgBjAG8AbQBDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAARAB1AHMAdABpAG4AIABOAG8AcgBsAGEAbgBkAGUAcgAsACAAMgAwADAAMgAuACAADQAKAFQAaABpAHMAIABwAHIAbwBnAHIAYQBtACAAaQBzACAAZgByAGUAZQAgAHMAbwBmAHQAdwBhAHIAZQA7ACAAeQBvAHUAIABjAGEAbgAgAHIAZQBkAGkAcwB0AHIAaQBiAHUAdABlACAAaQB0ACAAYQBuAGQALwBvAHIAIABtAG8AZABpAGYAeQAgAGkAdAAgAHUAbgBkAGUAcgAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGUAIABHAE4AVQAgAEcAZQBuAGUAcgBhAGwAIABQAHUAYgBsAGkAYwAgAEwAaQBjAGUAbgBzAGUAIABhAHMAIABwAHUAYgBsAGkAcwBoAGUAZAAgAGIAeQAgAHQAaABlACAARgByAGUAZQAgAFMAbwBmAHQA\
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\
BAQFBQQFBAQEBAQEAgQEAQIFAgUEBAQEAwQDBAUFBQQEAgIDAgQFAAAFAAUFBQAAAAoGBQAFBQQFBAQGBQIDBQQFBQUEBQUEBAUFBQUFBAUEBAUFAgUEAgIFAgUFBQQFBAQDBQYFBQQEAgMDAgUFAAAFAAUFBQAAAAsGBgAGBgUFBQUGBQIEBQQGBQUFBQUEBQUFBgUFBQUFBQUFAgUFAgMFAgYFBQUFBAQDBQYGBQUEAgMDAgUFAAAGAAYGBgAAAAwGBgAGBgUGBQUGBQMEBQUGBgYFBgUFBQUGBgYGBQYFBQUFAwYFAgMGAwYFBgUFBQUEBQYGBgUFAwMDAgYGAAAGAAYGBgAAAA0HBwAHBwYGBgYGBgMFBgUHBgYGBgYFBgYHBwYGBgYGBgYGAwYGAgMGAwcGBgYGBQUEBgcHBgYFAwMDAgYGAAAHAAcHBwAAAA4HBwAHBwYGBgYGBgMFBgYHBgYGBgYGBgYHBwcGBgcGBgYGAwYGAgMGAwcGBwYGBQYEBgcHBgYGAwQDAgYGAAAHAAcHBwAAAA8ICAAICAYHBwYGBwMFBwYHBwcHBwcGBwcHBwcHBgcHBgcHAwcHAgQHAwcHBwcHBgYEBwcHBwcGAwQEAgcHAAAIAAgICAAAABAICAAICAcHBwcHBwMGBwcIBwcHBwcGBwcICAgHBwcHBwcHAwcHAgQHAwgHCAcHBgYEBwcIBwcGBAQEAgcHAAAIAAgICAAAABEJCQAJCQcICAcHCAQGCAcICAgICAgHCAgICAgHBwgIBwgIBAgIAwQHBAgICAgIBgYECAgIBwcHBAQEAwgIAAAJAAkJCQAAABIJCQAJCQgICAgHCAQGCAcICAgICAgHCAgICAgICAgICAgIBAgIAwQHBAgICAgIBwcFCAgIBwgHBAUEAwgIAAAJAAkJCQAAABMKCgAKCggJCAgJCQQHCQgJCQkICQkICAkJCQkICAkICAkJBAkIAwUJBAkJCQgJBwgFCQkJ\
CQgIBAUFAwkJAAAKAAoKCgAAABQKCgAKCggJCQgJCQQHCQgKCQkJCQkICQkJCgkJCQkJCAkJBAkJAwUJBAoJCQkJCAgFCQkKCQkIBAUFAwkJAAAKAAoKCgAAABULCwALCwkKCQkJCgQHCQkKCQoJCQkICQoKCgoJCQoJCQkKBAoJAwUKBAsKCgkKCAkGCgoKCgkIBQUFAwoJAAALAAsLCwAAABYLCwALCwkKCgkKCgUICgkLCgoKCgoJCgoKCgoJCQoKCQoKBQoKAwUKBQsKCgoKCAkGCgsLCgoJBQYFAwoKAAALAAsLCwAAABcMDAAMDAoLCgoKCwUICgkLCgsKCgoJCgoKCwsKCgsKCgoKBQsKBAYKBQwKCwoKCQkGCgsMCwoJBQYFAwsLAAAMAAwMDAAAABgMDAAMDAoLCwoKCwUICwoMDAsLDAsKCwsLDAsKCgsLCgsLBQsLBAYLBQwLCwsLCQoGCwsMDAsKBQYFAwsMAAAMAAwMDAAAAAACAIEAAAOBBZoAAwAHAFy4AAgvuAAJL7gACBC4AADQuAAAL7gACRC4AAPcuAAAELkABAAC/LgAAxC5AAUAAvwAuAAARVi4AAAvG7kAAAADPlm7AAIAAQAGAAQruAACELgAABC5AAQAAfwwMTMRIRElIREhgQMA/X8CAP4ABZr6ZoEEmgACAAD/MwMtBAAABwAPAGq4ABAvuAARL7gAA9y5AAAAAvy4ABAQuAAN0LgADS+5AAwAAvy4AAjQALgAAEVYuAAOLxu5AA4ABT5ZuwALAAEACAAEK7gACxC7AAUAAQAAAAQruAAFELsABAABAAEABCu4AAQQuAAM0DAxARUzNSM1IRUDITUhESMRMwKHplr+GUYCK/3VpqYDXJXnUqT8VqIDWvuFAAEAAP8zAy0EAAAPAFy4ABAvuAARL7gAEBC4AA3QuAANL7kADAAC/LgAANC4ABEQuAAE3LkACQAC/AC4AABFWLgADi8buQAOAAU+\
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\
BCu4AAEQMDETIRUhNSMTMwUhNSEVMwMjFSE1IagBl/4ZWgKoAdn+ZgHqVAJK/YkCHwFgpFACJ1CkUvxtSKYAAAIAAAAAAwIEZgADAAsAbLgADC+4AA0vuAAMELgAANC4AAAvuQABAAL8uAANELgACdy5AAoAAvwAuAAARVi4AAAvG7kAAAAJPlm4AABFWLgAAi8buQACAAM+WbgAAEVYuAAJLxu5AAkAAz5ZuwAFAAEABAAEK7gABRAwMREzESMTNSEVMxEjEaio3QHTUqQEZvuaAuyjVvzPAuQAAAIAAAACAKgEagADAAcARLsABQACAAQABCu4AAUQuAAEELgAANC4AAUQuAAB0LgAAS8AuAAARVi4AAYvG7kABgADPlm7AAEAAQACAAQruAABEDAxEzMVJxczESMCpqgCpKQEao0CrPzPAAACAAT/NwFqBGYAAwALAGe6AAkABAADK7gACRC5AAcAAvy4AADQuAAJELgAAdC4AAEvuAAIELgAAtC4AAIvALgAAEVYuAAALxu5AAAACT5ZuAAARVi4AAQvG7kABAAFPlm4AAAQuQACAAH8uAAEELkABQAB/DAxEzMVJwM1MxEzESMVxaWnv8GjVARmjQL7XKQDVPxORgACAAL//gMMBGAAAwAPAG+7AAEAAgAAAAQruAABELsABAACAA0ABCu4AAQQugAJAA0ABBESObgACS+5AAgAAvy4ABHcALgAAC+4AABFWLgAAi8buQACAAM+WbgAAEVYuAAILxu5AAgAAz5ZuwAEAAEACgAEK7gABBC4AAzQMDETMxEjATMVMxEjESE1MxEzAqamAntIR6T+efqkBGD7ngISS/49AWujAYoAAAEAAAAAASEEUgAHACy7AAUAAgABAAQruAAFELkAAAAC/AC4AAIvuAAARVi4AAYvG7kABgADPlkwMRMjNTMVMwMje3vdRAKkA66kUvwAAAIAAAAAA2gDfwADABMAdbsAAQACAAAABCu4\
AAEQuwAFAAIABgAEK7gABRC7ABEAAgASAAQruAARELgAFdwAuAAARVi4AAIvG7kAAgADPlm4AABFWLgAES8buQARAAM+WbsADQABAAQABCu4AA0QuAAEELgAB9C4AAcvuAANELgACdAwMREzESMBESMRIzUzFTM1IRUzESMRpqYB06RckTYBgU2jAzP8zQLZ/osBd6REREz8zQLZAAACAAAAAAMQA38AAwALAFu4AAwvuAANL7gADBC4AADQuAAAL7kAAQAC/LgADRC4AAncuQAKAAL8ALgAAEVYuAACLxu5AAIAAz5ZuAAARVi4AAkvG7kACQADPlm7AAUAAQAEAAQruAAFEDAxETMRIxM1IRUzESMRpqbnAddSowMz/M0C26RM/M0C2wACAAQAAAMvA3UABwANAGG4AA4vuAAPL7gABdy5AAAAAvy4AA4QuAAJ0LgACS+5AAwAAvwAuAADL7gAAEVYuAAGLxu5AAYAAz5ZuAAARVi4AAgvG7kACAADPlm4AAMQuQAAAAH8uAAIELkADAAB/DAxASE1JRUzESsBIREzESECif5nAd1iplL9zaQBjwLRogI+/MkDM/1xAAEAAP81AxADfwANAIK4AA4vuAAPL7gADhC4AAnQuAAJL7kAAgAC/LgADxC4AAbcuQADAAL8uAACELgAC9AAuAAARVi4AAovG7kACgAFPlm4AABFWLgABC8buQAEAAM+WbgAAEVYuAAMLxu5AAwAAz5ZuwAJAAEAAgAEK7gACRC4AAQQuQAAAAH8uAAB0DAxJSERIREzESM1IREzNSECK/57AcejUv1CpgGFpAI3/SUDM0z7tssAAQAA/zsDEAOFAA0AT7gADi+4AA8vuAAJ3LkAAAAC/LgADhC4AATQuAAEL7kAAwAC/LgAABC4AAbQALgABy+7AAsAAQAAAAQruAALELsAAgABAAUABCu4AAIQMDEBESERIxEhFTMRIzUhFQJq/jqkAmqmVv46AuH9\
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\
BwALAFu4AAwvuAANL7gADBC4AADQuAAAL7kABwAC/LgAAtC4AA0QuAAF3LkACAAC/LgABRC4AArQuAAKLwC4AAEvuwAGAAEAAwAEK7gABhC7AAsAAQAIAAQruAALEDAxExEzNTM1IxEXMzUjBqbw8EygoARc+od7pARaYqQAAgAM//wBrgU9AAUACQBTuAAKL7gACy+4AAXcuQAAAAL8uAAKELgAAtC4AAIvuQAHAAL8uAACELgACdC4AAkvALsAAgABAAMABCu4AAIQuwAJAAEABgAEK7gACRC4AADQMDEBESMVIREFMzUjAQj0AZr+XqCgBT37Y6QFQaOjAAACAD3++AFvAM0AAwAHADG7AAMAAgAAAAQruAADELgACdwAuwAEAAEABQAEK7gABBC7AAAAAQABAAQruAAAEDAxNxEzEQEVMzXLpP7OpM3+6wEV/qR5eQAAAQAr/74AzwB9AAMAI7sAAwACAAAABCu4AAMQuAAF3AC7AAAAAQABAAQruAAAEDAxNxUzNSukfb+/AAIABv8xAysEAAADAA8AT7gAEC+4ABEvuAAQELgAANC4AAAvuQADAAL8uAARELgAB9y5AAYAAvy4AA3QALgAAS+7AAsAAQAMAAQruAALELsADwABAAQABCu4AA8QMDETETMbASERMxEjNSEHIREhBqQCMQGqpFL+EAIBoP5WA677gwR9/c/+KQQIUqT+xQABAAD/NwM5BAIAFwCAuwAKAAIACwAEK7gAChC7ABYAAgADAAQruAAWELkABwAC/LgAChC4AA3QuAANL7gAFhC4ABHQuAARL7gAFhC4ABncALgAAEVYuAAMLxu5AAwABT5ZuwAJAAEADgAEK7gACRC7AAEAAQACAAQruAABELsABQABAAYABCu4AAUQMDEBIRUhFSEVIREhESMRMzUhNTMRIzUzESMC2f4VAZn+aQGm/g6kogJFUmBSUgQCpPGk/osDWvuJe1AB4UYBhwAAAEIA\
QgBCAEIAlADeATYBdQH0AjcCXAKjAuUDFwNlA7YD+QQ/BJEE5gU3BWwFqgYMBl0GuAcAB2AHwggNCFsIvAkcCVUJownxCiYKcQrGCu0LSQuOC9oMNQx3DKINAQ1LDYIN5A4+DrAO+Q9aD54P3hAKECcQbhDUENQQ1BDUENQQ1BDUENQAAgAAAAAAAP+cADIAAAAAAAAAAAAAAAAAAAAAAAAAAABDAAABAgACAAMAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0ARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAD4AQAAPABEAJAAlAAAAAAACAQMBBAEFAQYFLm51bGwDY2g1A2NoNgdnbHlwaDU2B2dseXBoNTcAAAAAAAEAAAtOAAEB4AYAAAgFQAAEAAQARAAEAAUARAAEAAgARgAEAAsA7AAEAA8ARAAEABAARgAEABIARgAEABMARgAEAB0ASAAEACEARgAEACMARgAEACYARgAEAC8ARgAEADsARgAFAAsBKwAFAB0ATAAFAB4ASAAFACAARgAFACEASgAFACMATAAFACQASAAFACYASgAFACgASgAFACkASgAFACoARgAFAC0ASgAFAC8ASgAFADAATAAFADEARgAFADIASgAGAAQASAAGAAUASAAGAAYASAAGAAcASAAGAAgASAAGAAkARgAGAAoARgAGAAsBOQAGAAwASAAGAA0ASAAGAA4ARgAGAA8ASAAGABAASAAGABEASAAGABIASAAGABMASAAGABYASAAGABgASAAGAB0ATgAGACEATgAGACMATgAGACQASAAGACYATAAGAC8ATAAGADAASAAGADIASAAGADsASgAHAAsATAAHAB0ASAAHACAAOQAHACEASgAHACMASgAHACX/fQAHACYARgAHACoANQAHAC8ARgAIAAsB\
MQAIAB0ATAAIACEASgAIACMATAAIACQARgAIACYASgAIAC8ASgAIADAARgAIADIARAAJAAsBLwAJAB0ATAAJAB4ARgAJACAARAAJACEASgAJACMATAAJACQASAAJACYASgAJACgASAAJACkASAAJACoARAAJAC0ASAAJAC8ASgAJADAASgAJADEARgAJADIASgAKAAgARAAKAAsAtgAKABAARAAKABIARAAKABMARAAKABn/tAAKABz/qAAKAB0ARgAKAB//rAAKACEARgAKACL/rAAKACMARgAKACX/oAAKACYARAAKACr/vAAKACz/qAAKAC7/rAAKAC8ARAAKADP/tgAKADT/nAAKADX/rAAKADsARgALAAYARAALAAcARAALAAgARAALAAsAtgALAA0ARAALABAARAALABIARAALABMARAALABn/tgALABz/qgALAB0ARgALAB//rgALACEARgALACL/rAALACMARgALACX/oAALACYARAALACz/qAALAC7/rAALAC8ARAALADP/uAALADT/nAALADX/rAALADsARgAMAAsBLwAMABX/ewAMAB0ASgAMAB4ASAAMACAARgAMACEASAAMACMASgAMACQARAAMACYASAAMACgASgAMACkASgAMACoARgAMAC0ASgAMAC8ASAAMADAATAAMADIATAANAAQARgANAAUARgANAAYARgANAAcARgANAAgARgANAAsBNQANAAwARgANAA0ARgANAA8ARgANABAARgANABEARgANABIARgANABMARgANABX/CAANABYARgANABgARgANABr/mAANACsARgANADT+uAANADsASAAOAAsBLQAOAB0ATAAOAB4ASAAOACAARgAOACEATAAOACMATAAOACQASAAOACYASgAOACgASAAOACkASAAOACoARAAOAC0ASAAOAC8ASgAOADAATAAOADEARgAOADIASgAPAAsBLwAPAB0ATAAPAB4A\
RgAPACAARAAPACEASgAPACMATAAPACQASAAPACYASgAPACgASAAPACkASAAPACoARAAPAC0ASAAPAC8ASgAPADAASgAPADEARgAPADIASgAQAAsBLwAQABAAPQAQAB0ATAAQAB4ARgAQACAARAAQACEASgAQACMATAAQACQASAAQACYASgAQACgASAAQACkASAAQACoARAAQAC0ASAAQAC8ASgAQADAASgAQADEARgAQADIASgARAAsASAARABwALwARAB0ATAARAB4ARAARACAAQgARACEATgARACMAUAARACQASgARACX/fQARACYASgARACgARgARACkARgARACoAQgARAC0ARgARAC4AMQARAC8ASgARADAASAARADIARgARADoANQASAAsBLwASAB0ATAASAB4ARgASACAARAASACEASgASACMATAASACQASAASACYASgASACgASAASACkASAASACoARAASAC0ASAASAC8ASgASADAASgASADEARgASADIASgATAAsBLwATABX/ewATAB0ASgATAB4ASAATACAARgATACEASAATACMASgATACQARAATACYASAATACgASgATACkASgATACoARgATAC0ASgATAC8ASAATADAATAATADIATAAUAAsBIwAUADsARgAVAAsASgAVABn/ogAVABz/0QAVAB7/fwAVAB//cQAVACD/eQAVACL/aAAVACQAPQAVACX/fwAVACj/fQAVACn/fQAVACr/dQAVACv/fQAVACz/WgAVAC3/fQAVAC7/YgAVADAAOwAVADH/KQAVADIAOQAVADoAOQAWAAsBLwAWAB0ATAAWAB4ARgAWACAARAAWACEASgAWACMATAAWACQASAAWACYASgAWACgASAAWACkASAAWAC0ASAAWAC8ASgAWADAASgAWADEARgAWADIASgAWADoANwAXAAsA6QAXAB0ATAAXAB4ARgAXACAARAAXACEASgAXACMA\
TAAXACQASAAXACX/kwAXACYASgAXACgARgAXACkARgAXACoAQgAXAC0ARgAXAC8ASgAXADAASgAXADIASAAXADoANwAYAAsBLQAYABAAPQAYABwAMwAYAB0ATAAYAB4ASAAYACAARgAYACEATAAYACMATAAYACQASAAYACYASgAYACgASgAYACkASgAYACoARgAYAC0ASgAYAC8ASgAYADAATAAYADEASAAYADIATAAYADoANQAZAAsBLwAZABX/ewAZAB0ASgAZAB4ASgAZACAASAAZACEASgAZACMASgAZACQARAAZACYASAAZACgATAAZACkATAAZACoASAAZAC0ATAAZAC8ASAAZADAATAAZADIATAAaAAsATAAaAB0ASgAaACAAPQAaACEASgAaACMASgAaACQARgAaACX/gQAaACYASAAaACoAOwAaAC8ASAAaADAAQgAaADoAOQAbAAsBMQAbAB0ASgAbACEASAAbACMASgAbACQARgAbACYASAAbAC8ASAAcACX/bwAcACf/vAAdACX/ZAAdACf/uAAeACX/ewAfACX/cQAgACAAMQAgACX/bwAhAB0ATAAhACEASgAhACMATAAhACQASAAhACX/hQAhACYASgAhACgARAAhACkARAAhACsARAAhAC0ARAAhAC8ASgAhADAARgAhADIARgAjACX/ZAAjACf/uAAkACX+tgAmACAAOwAmACX/YgAmACf/ugAmACoAOwAnACX/bwAoACX/bwAoACf/ugApACX/bwApACf/ugAqACX/bwAqACf/ugAqACoALwArAB4ARgArACEASAArACMASAArACX/bwArACgARgArACkARgArAC0ARgArADAASAAtAB4AMQAtAB8ALwAtACAALwAtACX/bwAtACf/ugAtACoALQAtACwAMQAuACX/dwAvACX/bwAwACX/bwAwACf/vAAxACX/cQAxACf/ugAyACX/bwAzACX/bwA0ACX/\
lgA1ACX/bwA1ACf/vAA6AAsBLwA6ABcAKwA6ABgANwA6AB0ATAA6AB4ASAA6ACAARgA6ACEASgA6ACMATAA6ACQARgA6ACYASgA6ACgASAA6ACkASAA6ACoARAA6AC0ASAA6AC8ASgA6ADAASgA6ADEARgA6ADIASgA7AAsBMwA7AB0AUAA7AB4ATgA7ACAATAA7ACEAUgA7ACMAUgA7ACQATAA7ACYATgA7ACgAUAA7ACkAUAA7ACoATAA7AC0AUAA7AC8ATgA7ADAAUgA7ADEATgA7ADIAUAA7ADMARgA7ADsARgAAAAAAAQABAQEBAQAMAPgI/wAIAAb//gAJAAb//gAKAAf//gALAAj//gAMAAj//gANAAn//gAOAAr//gAPAAr//QAQAAv//QARAAz//QASAAz//QATAA3//QAUAA7//QAVAA7//QAWAA///AAXABD//AAYABD//AAZABH//AAaABL//AAbABL//AAcABP//AAdABP/+wAeABT/+wAfABX/+wAgABX/+wAhABb/+wAiABf/+wAjABf/+wAkABj/+gAlABn/+gAmABn/+gAnABr/+gAoABv/+gApABv/+gAqABz/+gArAB3/+gAsAB3/+QAtAB7/+QAuAB//+QAvAB//+QAwACD/+QAxACH/+QAyACH/+QAzACL/+AA0ACP/+AA1ACP/+AA2ACT/+AA3ACX/+AA4ACX/+AA5ACb/+AA6ACb/9wA7ACf/9wA8ACj/9wA9ACj/9wA+ACn/9wA/ACr/9wBAACr/9wBBACv/9gBCACz/9gBDACz/9gBEAC3/9gBFAC7/9gBGAC7/9gBHAC//9gBIADD/9QBJADD/9QBKADH/9QBLADL/9QBMADL/9QBNADP/9QBOADT/9QBPADT/9QBQADX/9ABRADb/9ABSADb/9ABTADf/9ABUADj/9ABVADj/9ABWADn/9ABXADn/8wBYADr/8wBZADv/8wBaADv/8wBbADz/\
8wBcAD3/8wBdAD3/8wBeAD7/8gBfAD//8gBgAD//8gBhAED/8gBiAEH/8gBjAEH/8gBkAEL/8gBlAEP/8QBmAEP/8QBnAET/8QBoAEX/8QBpAEX/8QBqAEb/8QBrAEf/8QBsAEf/8ABtAEj/8ABuAEn/8ABvAEn/8ABwAEr/8ABxAEr/8AByAEv/8ABzAEz/7wB0AEz/7wB1AE3/7wB2AE7/7wB3AE7/7wB4AE//7wB5AFD/7wB6AFD/7wB7AFH/7gB8AFL/7gB9AFL/7gB+AFP/7gB/AFT/7gCAAFT/7gCBAFX/7gCCAFb/7QCDAFb/7QCEAFf/7QCFAFj/7QCGAFj/7QCHAFn/7QCIAFr/7QCJAFr/7ACKAFv/7ACLAFz/7ACMAFz/7ACNAF3/7ACOAF3/7ACPAF7/7ACQAF//6wCRAF//6wCSAGD/6wCTAGH/6wCUAGH/6wCVAGL/6wCWAGP/6wCXAGP/6gCYAGT/6gCZAGX/6gCaAGX/6gCbAGb/6gCcAGf/6gCdAGf/6gCeAGj/6gCfAGn/6QCgAGn/6QChAGr/6QCiAGv/6QCjAGv/6QCkAGz/6QClAG3/6QCmAG3/6ACnAG7/6ACoAG//6ACpAG//6ACqAHD/6ACrAHD/6ACsAHH/6ACtAHL/5wCuAHL/5wCvAHP/5wCwAHT/5wCxAHT/5wCyAHX/5wCzAHb/5wC0AHb/5gC1AHf/5gC2AHj/5gC3AHj/5gC4AHn/5gC5AHr/5gC6AHr/5gC7AHv/5QC8AHz/5QC9AHz/5QC+AH3/5QC/AH7/5QDAAH7/5QDBAH//5QDCAID/5QDDAID/5ADEAIH/5ADFAIH/5ADGAIL/5ADHAIP/5ADIAIP/5ADJAIT/5ADKAIX/4wDLAIX/4wDMAIb/4wDNAIf/4wDOAIf/4wDPAIj/4wDQAIn/4wDRAIn/4gDSAIr/4gDTAIv/4gDUAIv/4gDVAIz/4gDWAI3/4gDXAI3/4gDYAI7/\
4QDZAI//4QDaAI//4QDbAJD/4QDcAJH/4QDdAJH/4QDeAJL/4QDfAJP/4ADgAJP/4ADhAJT/4ADiAJT/4ADjAJX/4ADkAJb/4ADlAJb/4ADmAJf/3wDnAJj/3wDoAJj/3wDpAJn/3wDqAJr/3wDrAJr/3wDsAJv/3wDtAJz/3wDuAJz/3gDvAJ3/3gDwAJ7/3gDxAJ7/3gDyAJ//3gDzAKD/3gD0AKD/3gD1AKH/3QD2AKL/3QD3AKL/3QD4AKP/3QD5AKT/3QD6AKT/3QD7AKX/3QD8AKb/3AD9AKb/3AD+AKf/3AD/AKf/3A==') format('truetype');
}
html {
font-family: 'progenisis';
}
'''
cssGoogleFont = '''
@font-face {
font-family: 'Nova Flat';
src: url(https://fonts.gstatic.com/s/novaflat/v9/vFeor41nvsomiEVSx6n4iqCWcynf_cDxXwCLxiixG1c.ttf) format('truetype');
}
html {
font-family: 'Nova Flat';
}
'''
htmlTemplate = '''
<html>
<head>
<title>test</title>
<style>{css}</style>
</head>
<body>
<h1>This is a test.</h1>
<p>This is only a test.</p>
</body>
</html>
'''
htmlWithoutCSS = htmlTemplate.format(css='')
htmlWithCSSDataURI = htmlTemplate.format(css=cssDataURI)
htmlWithCSSGoogleFont = htmlTemplate.format(css=cssGoogleFont)
with open('data-uri-separate-css.pdf', 'wb') as outFile:
font_config = FontConfiguration()
HTML(string=htmlWithoutCSS).write_pdf(outFile, stylesheets=(CSS(string=cssDataURI, font_config=font_config),), font_config=font_config)
with open('data-uri-included-css.pdf', 'wb') as outFile:
font_config = FontConfiguration()
HTML(string=htmlWithCSSDataURI).write_pdf(outFile, font_config=font_config)
with open('google-font-separate-css.pdf', 'wb') as outFile:
font_config = FontConfiguration()
HTML(string=htmlWithoutCSS).write_pdf(outFile, stylesheets=(CSS(string=cssGoogleFont, font_config=font_config),), font_config=font_config)
with open('google-font-included-css.pdf', 'wb') as outFile:
font_config = FontConfiguration()
HTML(string=htmlWithCSSGoogleFont).write_pdf(outFile, font_config=font_config)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment