From cf2dc247ff5f726238856e9b46a4926a30430e14 Mon Sep 17 00:00:00 2001 From: Tünde Tóth Date: Mon, 4 Apr 2022 11:49:59 +0200 Subject: DOCX export: image deduplication and clean up MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up to commit aea8043bc5f5187498fa450505d6de9d6986e2a6 "tdf#74670 tdf#91286 PPTX XLSX export: save image once". This reverts commit 797fef38612fb2fd62d1f6591619b9361e526bca "tdf#118535 DOCX export: save header image once" and commit 32ada80a9f47b095d7b0c4d16e3422f6ef7f2ac2 "DOCX export: make sure a graphic is only written once" and commit b484e9814c66d8d51cea974390963a6944bc9d73 "tdf#83227 oox: reuse RelId in DML/VML export for the same graphic". Change-Id: I2d90249808174290b6b3e4eb957b3ac87ad41f95 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132506 Tested-by: László Németh Reviewed-by: László Németh --- oox/source/export/drawingml.cxx | 35 +++++------------------------------ oox/source/export/vmlexport.cxx | 20 ++------------------ 2 files changed, 7 insertions(+), 48 deletions(-) (limited to 'oox') diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 78eac3d00f60..87ca05452513 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -1271,7 +1271,7 @@ const char* DrawingML::GetRelationCompPrefix() const return "unknown"; } -OUString DrawingML::WriteImage( const Graphic& rGraphic , bool bRelPathToMedia, OUString* pFileName ) +OUString DrawingML::WriteImage( const Graphic& rGraphic , bool bRelPathToMedia ) { GfxLink aLink = rGraphic.GetGfxLink (); BitmapChecksum aChecksum = rGraphic.GetChecksum(); @@ -1280,8 +1280,8 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic , bool bRelPathToMedia, OUString sRelId; OUString sPath; - // tdf#74670 tdf#91286 Save image only once (this is no problem for DOCX) - if (GetDocumentType() != DOCUMENT_DOCX && !maExportGraphics.empty()) + // tdf#74670 tdf#91286 Save image only once + if (!maExportGraphics.empty()) { auto aIterator = maExportGraphics.top().find(aChecksum); if (aIterator != maExportGraphics.top().end()) @@ -1394,7 +1394,7 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic , bool bRelPathToMedia, .appendAscii(pExtension) .makeStringAndClear(); - if (GetDocumentType() != DOCUMENT_DOCX && !maExportGraphics.empty()) + if (!maExportGraphics.empty()) maExportGraphics.top()[aChecksum] = sPath; } @@ -1402,8 +1402,6 @@ OUString DrawingML::WriteImage( const Graphic& rGraphic , bool bRelPathToMedia, oox::getRelationship(Relationship::IMAGE), sPath ); - if (pFileName) - *pFileName = sPath; return sRelId; } @@ -1566,35 +1564,12 @@ OUString DrawingML::WriteXGraphicBlip(uno::Reference const bool bRelPathToMedia) { OUString sRelId; - OUString sFileName; if (!rxGraphic.is()) return sRelId; Graphic aGraphic(rxGraphic); - if (mpTextExport) - { - BitmapChecksum nChecksum = aGraphic.GetChecksum(); - sRelId = mpTextExport->FindRelId(nChecksum); - sFileName = mpTextExport->FindFileName(nChecksum); - } - if (sRelId.isEmpty()) - { - sRelId = WriteImage(aGraphic, bRelPathToMedia, &sFileName); - if (mpTextExport) - { - BitmapChecksum nChecksum = aGraphic.GetChecksum(); - mpTextExport->CacheRelId(nChecksum, sRelId, sFileName); - } - } - else - { - // Include the same relation again. This makes it possible to - // reuse an image across different headers. - sRelId = mpFB->addRelation( mpFS->getOutputStream(), - oox::getRelationship(Relationship::IMAGE), - sFileName ); - } + sRelId = WriteImage(aGraphic, bRelPathToMedia); mpFS->startElementNS(XML_a, XML_blip, FSNS(XML_r, XML_embed), sRelId); diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index 544a5599c932..32f60ff65c9a 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -718,15 +718,7 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const tools::Rectangle& const uno::Reference& xGraphic = pSdrGrafObj->getSignatureLineUnsignedGraphic(); Graphic aGraphic(xGraphic); - - BitmapChecksum nChecksum = aGraphic.GetChecksum(); - OUString aImageId = m_pTextExport->FindRelId(nChecksum); - if (aImageId.isEmpty()) - { - OUString aFileName; - aImageId = m_pTextExport->GetDrawingML().WriteImage(aGraphic, false, &aFileName); - m_pTextExport->CacheRelId(nChecksum, aImageId, aFileName); - } + OUString aImageId = m_pTextExport->GetDrawingML().WriteImage(aGraphic, false); pAttrList->add(FSNS(XML_r, XML_id), aImageId); imageData = true; } @@ -740,15 +732,7 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const tools::Rectangle& aStream.Seek(0); Graphic aGraphic; GraphicConverter::Import(aStream, aGraphic); - - BitmapChecksum nChecksum = aGraphic.GetChecksum(); - OUString aImageId = m_pTextExport->FindRelId(nChecksum); - if (aImageId.isEmpty()) - { - OUString aFileName; - aImageId = m_pTextExport->GetDrawingML().WriteImage(aGraphic, false, &aFileName); - m_pTextExport->CacheRelId(nChecksum, aImageId, aFileName); - } + OUString aImageId = m_pTextExport->GetDrawingML().WriteImage(aGraphic, false); pAttrList->add(FSNS(XML_r, XML_id), aImageId); imageData = true; } -- cgit