1
1
mirror of https://github.com/Kozea/WeasyPrint.git synced 2024-10-04 07:57:52 +03:00

Fix images embedded from multiple pages

Fix #1486.
This commit is contained in:
Guillaume Ayoub 2021-11-05 21:59:09 +01:00
parent d62974e0b4
commit ce44a72318
2 changed files with 20 additions and 5 deletions

View File

@ -14,6 +14,8 @@ from codecs import BOM_UTF16_BE
import pytest import pytest
from weasyprint import Attachment from weasyprint import Attachment
from weasyprint.document import Document, DocumentMetadata
from weasyprint.text.fonts import FontConfiguration
from weasyprint.urls import path2url from weasyprint.urls import path2url
from .testing_utils import ( from .testing_utils import (
@ -505,6 +507,21 @@ def test_embed_image_once():
''').write_pdf().count(b'/Filter /DCTDecode') == 1 ''').write_pdf().count(b'/Filter /DCTDecode') == 1
@assert_no_logs
def test_embed_images_from_pages():
page1, = FakeHTML(
base_url=resource_filename('dummy.html'),
string='<img src="blue.jpg">').render().pages
page2, = FakeHTML(
base_url=resource_filename('dummy.html'),
string='<img src="not-optimized.jpg">').render().pages
document = Document(
(page1, page2), metadata=DocumentMetadata(),
font_config=FontConfiguration(), url_fetcher=None,
optimize_size=()).write_pdf()
assert document.count(b'/Filter /DCTDecode') == 2
@assert_no_logs @assert_no_logs
def test_document_info(): def test_document_info():
pdf = FakeHTML(string=''' pdf = FakeHTML(string='''

View File

@ -96,10 +96,8 @@ class SVGImage:
def get_image_from_uri(cache, url_fetcher, optimize_size, url, def get_image_from_uri(cache, url_fetcher, optimize_size, url,
forced_mime_type=None, context=None): forced_mime_type=None, context=None):
"""Get an Image instance from an image URI.""" """Get an Image instance from an image URI."""
missing = object() if url in cache:
image = cache.get(url, missing) return cache[url]
if image is not missing:
return image
try: try:
with fetch(url_fetcher, url) as result: with fetch(url_fetcher, url) as result:
@ -137,7 +135,7 @@ def get_image_from_uri(cache, url_fetcher, optimize_size, url,
raster_exception) raster_exception)
else: else:
# Store image id to enable cache in Stream.add_image # Store image id to enable cache in Stream.add_image
image_id = len(cache) image_id = hash(url)
image = RasterImage(pillow_image, image_id, optimize_size) image = RasterImage(pillow_image, image_id, optimize_size)
except (URLFetchingError, ImageLoadingError) as exception: except (URLFetchingError, ImageLoadingError) as exception: