DOCX Input: Add support for SVG images

This commit is contained in:
Kovid Goyal 2023-06-09 09:23:41 +05:30
parent e0d2c5cfcf
commit 4c4cfb843c
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 11 additions and 5 deletions

View File

@ -10,7 +10,7 @@ from lxml.html.builder import HR, IMG
from calibre import sanitize_file_name
from calibre.constants import iswindows
from calibre.ebooks.docx.names import barename
from calibre.ebooks.docx.names import SVG_BLIP_URI, barename
from calibre.utils.filenames import ascii_filename
from calibre.utils.img import image_to_data, resize_to_fit
from calibre.utils.imghdr import what
@ -236,9 +236,12 @@ class Images:
name = image_filename(name)
alt = pr.get('descr') or alt
for a in XPath('descendant::a:blip[@r:embed or @r:link]')(pic):
rid = get(a, 'r:embed')
if not rid:
rid = get(a, 'r:link')
rid = get(a, 'r:embed') or get(a, 'r:link')
for asvg in XPath(f'./a:extLst/a:ext[@uri="{SVG_BLIP_URI}"]/asvg:svgBlip[@r:embed or @r:link]')(a):
svg_rid = get(asvg, 'r:embed') or get(asvg, 'r:link')
if svg_rid and svg_rid in self.rid_map:
rid = svg_rid
break
if rid and rid in self.rid_map:
try:
src = self.generate_filename(rid, name)

View File

@ -63,7 +63,9 @@ TRANSITIONAL_NAMESPACES = {
'pr': 'http://schemas.openxmlformats.org/package/2006/relationships',
# Dublin Core document properties
'dcmitype': 'http://purl.org/dc/dcmitype/',
'dcterms': 'http://purl.org/dc/terms/'
'dcterms': 'http://purl.org/dc/terms/',
# SVG embeds
'asvg': 'http://schemas.microsoft.com/office/drawing/2016/SVG/main',
}
STRICT_NAMESPACES = {
@ -73,6 +75,7 @@ STRICT_NAMESPACES = {
'http://schemas.openxmlformats.org/drawingml/2006', 'http://purl.oclc.org/ooxml/drawingml')
for k, v in iteritems(TRANSITIONAL_NAMESPACES)
}
SVG_BLIP_URI = '{96DAC541-7B7A-43D3-8B79-37D633B846F1}'
# }}}