def test_python_render(): """Test rendering with the Python API.""" html = TestHTML(string='<body><img src=pattern.png>', base_url=resource_filename('dummy.html')) css = CSS(string=''' @page { margin: 2px; size: 8px; background: #fff } body { margin: 0; font-size: 0 } img { image-rendering: optimizeSpeed } ''') png_bytes = html.write_png(stylesheets=[css]) pdf_bytes = html.write_pdf(stylesheets=[css]) assert png_bytes.startswith(b'\211PNG\r\n\032\n') assert pdf_bytes.startswith(b'%PDF') check_png_pattern(png_bytes) # TODO: check PDF content? How? class fake_file(object): def __init__(self): self.chunks = [] self.write = self.chunks.append def getvalue(self): return b''.join(self.chunks) png_file = fake_file() html.write_png(png_file, stylesheets=[css]) assert png_file.getvalue() == png_bytes pdf_file = fake_file() html.write_pdf(pdf_file, stylesheets=[css]) assert pdf_file.getvalue() == pdf_bytes with temp_directory() as temp: png_filename = os.path.join(temp, '1.png') pdf_filename = os.path.join(temp, '1.pdf') html.write_png(png_filename, stylesheets=[css]) html.write_pdf(pdf_filename, stylesheets=[css]) assert read_file(png_filename) == png_bytes assert read_file(pdf_filename) == pdf_bytes png_filename = os.path.join(temp, '2.png') pdf_filename = os.path.join(temp, '2.pdf') with open(png_filename, 'wb') as png_file: html.write_png(png_file, stylesheets=[css]) with open(pdf_filename, 'wb') as pdf_file: html.write_pdf(pdf_file, stylesheets=[css]) assert read_file(png_filename) == png_bytes assert read_file(pdf_filename) == pdf_bytes x2_png_bytes = html.write_png(stylesheets=[css], resolution=192) check_png_pattern(x2_png_bytes, x2=True) pages = list(html.get_png_pages(stylesheets=[css])) assert pages == [(8, 8, png_bytes)] pages = list(html.get_png_pages(stylesheets=[css], resolution=192)) assert pages == [(16, 16, x2_png_bytes)]
def test_python_render(): """Test rendering with the Python API.""" base_url = resource_filename('dummy.html') html_string = '<body><img src=pattern.png>' css_string = ''' @page { margin: 2px; size: 8px; background: #fff } body { margin: 0; font-size: 0 } img { image-rendering: optimizeSpeed } @media screen { img { transform: rotate(-90deg) } } ''' html = TestHTML(string=html_string, base_url=base_url) css = CSS(string=css_string) png_bytes = html.write_png(stylesheets=[css]) pdf_bytes = html.write_pdf(stylesheets=[css]) assert png_bytes.startswith(b'\211PNG\r\n\032\n') assert pdf_bytes.startswith(b'%PDF') check_png_pattern(png_bytes) # TODO: check PDF content? How? class fake_file(object): def __init__(self): self.chunks = [] self.write = self.chunks.append def getvalue(self): return b''.join(self.chunks) png_file = fake_file() html.write_png(png_file, stylesheets=[css]) assert png_file.getvalue() == png_bytes pdf_file = fake_file() html.write_pdf(pdf_file, stylesheets=[css]) assert pdf_file.getvalue() == pdf_bytes with temp_directory() as temp: png_filename = os.path.join(temp, '1.png') pdf_filename = os.path.join(temp, '1.pdf') html.write_png(png_filename, stylesheets=[css]) html.write_pdf(pdf_filename, stylesheets=[css]) assert read_file(png_filename) == png_bytes assert read_file(pdf_filename) == pdf_bytes png_filename = os.path.join(temp, '2.png') pdf_filename = os.path.join(temp, '2.pdf') with open(png_filename, 'wb') as png_file: html.write_png(png_file, stylesheets=[css]) with open(pdf_filename, 'wb') as pdf_file: html.write_pdf(pdf_file, stylesheets=[css]) assert read_file(png_filename) == png_bytes assert read_file(pdf_filename) == pdf_bytes x2_png_bytes = html.write_png(stylesheets=[css], resolution=192) check_png_pattern(x2_png_bytes, x2=True) pages = list(html.get_png_pages(stylesheets=[css])) assert pages == [(8, 8, png_bytes)] pages = list(html.get_png_pages(stylesheets=[css], resolution=192)) assert pages == [(16, 16, x2_png_bytes)] screen_css = CSS(string=css_string, media_type='screen') rotated_png_bytes = html.write_png(stylesheets=[screen_css]) check_png_pattern(rotated_png_bytes, rotated=True) assert TestHTML(string=html_string, base_url=base_url, media_type='screen').write_png( stylesheets=[io.BytesIO(css_string.encode('utf8')) ]) == rotated_png_bytes assert TestHTML(string='<style>%s</style>%s' % (css_string, html_string), base_url=base_url, media_type='screen').write_png() == rotated_png_bytes
def test_python_render(): """Test rendering with the Python API.""" base_url = resource_filename('dummy.html') html_string = '<body><img src=pattern.png>' css_string = ''' @page { margin: 2px; size: 8px; background: #fff } body { margin: 0; font-size: 0 } img { image-rendering: optimizeSpeed } @media screen { img { transform: rotate(-90deg) } } ''' html = TestHTML(string=html_string, base_url=base_url) css = CSS(string=css_string) png_bytes = html.write_png(stylesheets=[css]) pdf_bytes = html.write_pdf(stylesheets=[css]) assert png_bytes.startswith(b'\211PNG\r\n\032\n') assert pdf_bytes.startswith(b'%PDF') check_png_pattern(png_bytes) # TODO: check PDF content? How? class fake_file(object): def __init__(self): self.chunks = [] self.write = self.chunks.append def getvalue(self): return b''.join(self.chunks) png_file = fake_file() html.write_png(png_file, stylesheets=[css]) assert png_file.getvalue() == png_bytes pdf_file = fake_file() html.write_pdf(pdf_file, stylesheets=[css]) assert pdf_file.getvalue() == pdf_bytes with temp_directory() as temp: png_filename = os.path.join(temp, '1.png') pdf_filename = os.path.join(temp, '1.pdf') html.write_png(png_filename, stylesheets=[css]) html.write_pdf(pdf_filename, stylesheets=[css]) assert read_file(png_filename) == png_bytes assert read_file(pdf_filename) == pdf_bytes png_filename = os.path.join(temp, '2.png') pdf_filename = os.path.join(temp, '2.pdf') with open(png_filename, 'wb') as png_file: html.write_png(png_file, stylesheets=[css]) with open(pdf_filename, 'wb') as pdf_file: html.write_pdf(pdf_file, stylesheets=[css]) assert read_file(png_filename) == png_bytes assert read_file(pdf_filename) == pdf_bytes x2_png_bytes = html.write_png(stylesheets=[css], resolution=192) check_png_pattern(x2_png_bytes, x2=True) pages = list(html.get_png_pages(stylesheets=[css])) assert pages == [(8, 8, png_bytes)] pages = list(html.get_png_pages(stylesheets=[css], resolution=192)) assert pages == [(16, 16, x2_png_bytes)] screen_css = CSS(string=css_string, media_type='screen') rotated_png_bytes = html.write_png(stylesheets=[screen_css]) check_png_pattern(rotated_png_bytes, rotated=True) assert TestHTML( string=html_string, base_url=base_url, media_type='screen' ).write_png( stylesheets=[io.BytesIO(css_string.encode('utf8'))] ) == rotated_png_bytes assert TestHTML( string='<style>%s</style>%s' % (css_string, html_string), base_url=base_url, media_type='screen' ).write_png() == rotated_png_bytes