diff --git a/weasyprint/document.py b/weasyprint/document.py index de43a89bd..b72e3b090 100644 --- a/weasyprint/document.py +++ b/weasyprint/document.py @@ -17,7 +17,7 @@ from .layout import LayoutContext, layout_document from .logger import PROGRESS_LOGGER from .matrix import Matrix -from .pdf import generate_pdf +from .pdf import VARIANTS, generate_pdf from .text.fonts import FontConfiguration @@ -391,17 +391,25 @@ def write_pdf(self, target=None, zoom=1, finisher=None, **options): identifier = options['pdf_identifier'] compress = not options['uncompressed_pdf'] + version = options['pdf_version'] + variant = options['pdf_variant'] + + # Set default PDF version for PDF variants. + if version is None and variant: + _, properties = VARIANTS[variant] + if 'version' in properties: + version = properties['version'] if finisher: finisher(self, pdf) if target is None: output = io.BytesIO() - pdf.write(output, pdf.version, identifier, compress) + pdf.write(output, version, identifier, compress) return output.getvalue() if hasattr(target, 'write'): - pdf.write(target, pdf.version, identifier, compress) + pdf.write(target, version, identifier, compress) else: with open(target, 'wb') as fd: - pdf.write(fd, pdf.version, identifier, compress) + pdf.write(fd, version, identifier, compress) diff --git a/weasyprint/pdf/__init__.py b/weasyprint/pdf/__init__.py index da6845e64..019954587 100644 --- a/weasyprint/pdf/__init__.py +++ b/weasyprint/pdf/__init__.py @@ -115,16 +115,13 @@ def generate_pdf(document, target, zoom, **options): # Set properties according to PDF variants mark = False - variant, version = options['pdf_variant'], options['pdf_version'] + variant = options['pdf_variant'] if variant: variant_function, properties = VARIANTS[variant] - if 'version' in properties: - version = properties['version'] if 'mark' in properties: mark = properties['mark'] - identifier = options['pdf_identifier'] - pdf = pydyf.PDF((version or '1.7'), identifier) + pdf = pydyf.PDF() states = pydyf.Dictionary() x_objects = pydyf.Dictionary() patterns = pydyf.Dictionary() @@ -268,9 +265,8 @@ def generate_pdf(document, target, zoom, **options): # Embedded fonts subset = not options['full_fonts'] - hinting = options['hinting'] pdf_fonts = build_fonts_dictionary( - pdf, document.fonts, compress, subset, hinting) + pdf, document.fonts, compress, subset, options) pdf.add_object(pdf_fonts) if 'AcroForm' in pdf.catalog: # Include Dingbats for forms diff --git a/weasyprint/pdf/fonts.py b/weasyprint/pdf/fonts.py index 5d6276c8f..69c795802 100644 --- a/weasyprint/pdf/fonts.py +++ b/weasyprint/pdf/fonts.py @@ -7,7 +7,7 @@ from ..logger import LOGGER -def build_fonts_dictionary(pdf, fonts, compress_pdf, subset, hinting): +def build_fonts_dictionary(pdf, fonts, compress_pdf, subset, options): pdf_fonts = pydyf.Dictionary() fonts_by_file_hash = {} for font in fonts.values(): @@ -24,7 +24,7 @@ def build_fonts_dictionary(pdf, fonts, compress_pdf, subset, hinting): if subset and not font.used_in_forms: for file_font in file_fonts: cmap = {**cmap, **file_font.cmap} - font.clean(cmap, hinting) + font.clean(cmap, options['hinting']) # Include font if font.type == 'otf': @@ -115,7 +115,7 @@ def build_fonts_dictionary(pdf, fonts, compress_pdf, subset, hinting): 'StemH': font.stemh, font_file: font_references_by_file_hash[font.hash], }) - if pdf.version <= b'1.4': + if str(options['pdf_version']) <= '1.4': # Cast for bytes and None cids = sorted(font.widths) padded_width = int(ceil((cids[-1] + 1) / 8)) bits = ['0'] * padded_width * 8