summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTushar Bende <tushar.bende@synerzip.com>2014-07-22 11:40:49 +0530
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-08-01 10:42:54 +0200
commit194c17a7c7c00f966b0256a1e90d50d8dd49f2bc (patch)
treeba314b9fec2a1b7c594b555367167fdfdd727840
parent0a6e0840526175de78a84b95871131664f634744 (diff)
fdo#80895 : Shape in Header&Footer is getting lost after RT
If there is a shape in Header or footer in a docx created in MSO-2010 that shape was getting lost after RT(actually shape was there but it's properties were getting missed). Root cause was : When LO processes Header it has msRelationFragmentPath= header.xml in ShapeContextHandler::startFastElement() and searches for theme as there is No theme specific to header or footer, aThemeFragmentPath becomes empty in that case. This is because MS office shares same theme for both documentBody as well as Header or footer. To fix Get Target for Type = "officeDocument" from _rels/.rels file this target is "word/document.xml" for docx & to "ppt/presentation.xml" for pptx and use this Target for fetching correct theme.xml. Tested group shapes in header/footer,previously was not getting rendred and not preserved after RT.After this patch it's now working correctly. Tested chart in header/footer previously chart colour was not coming properly both during rendering as well as after RT.after this patch it's working correctly. Reviewed on: https://gerrit.libreoffice.org/10451 Change-Id: Id47008550da90c0d697b434b676765230e3258a7
-rw-r--r--oox/source/shape/ShapeContextHandler.cxx10
-rw-r--r--sw/qa/extras/ooxmlexport/data/fdo80895.docxbin0 -> 23133 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx18
3 files changed, 27 insertions, 1 deletions
diff --git a/oox/source/shape/ShapeContextHandler.cxx b/oox/source/shape/ShapeContextHandler.cxx
index d9ae6949bdca..aed94381a41b 100644
--- a/oox/source/shape/ShapeContextHandler.cxx
+++ b/oox/source/shape/ShapeContextHandler.cxx
@@ -290,8 +290,16 @@ void SAL_CALL ShapeContextHandler::startFastElement
// Parse the theme relation, if available; the diagram won't have colors without it.
if (!msRelationFragmentPath.isEmpty())
{
- FragmentHandlerRef rFragmentHandler(new ShapeFragmentHandler(*mxFilterBase, msRelationFragmentPath));
+ // Get Target for Type = "officeDocument" from _rels/.rels file
+ // aOfficeDocumentFragmentPath is pointing to "word/document.xml" for docx & to "ppt/presentation.xml" for pptx
+ FragmentHandlerRef rFragmentHandlerRef(new ShapeFragmentHandler(*mxFilterBase, "/"));
+ OUString aOfficeDocumentFragmentPath = rFragmentHandlerRef->getFragmentPathFromFirstTypeFromOfficeDoc( "officeDocument" );
+
+ // Get the theme DO NOT use msRelationFragmentPath for getting theme as for a document there is a single theme in document.xml.rels
+ // and the same is used by header and footer as well.
+ FragmentHandlerRef rFragmentHandler(new ShapeFragmentHandler(*mxFilterBase, aOfficeDocumentFragmentPath));
OUString aThemeFragmentPath = rFragmentHandler->getFragmentPathFromFirstTypeFromOfficeDoc( "theme" );
+
if(!aThemeFragmentPath.isEmpty())
{
uno::Reference<xml::sax::XFastSAXSerializable> xDoc(mxFilterBase->importFragment(aThemeFragmentPath), uno::UNO_QUERY_THROW);
diff --git a/sw/qa/extras/ooxmlexport/data/fdo80895.docx b/sw/qa/extras/ooxmlexport/data/fdo80895.docx
new file mode 100644
index 000000000000..711882fd4e03
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/fdo80895.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx
index 20f7fd7a4e28..a6b73427b1e1 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlsdrexport.cxx
@@ -1762,6 +1762,24 @@ DECLARE_OOXMLEXPORT_TEST(testFdo80894, "TextFrameRotation.docx")
"rot","16200000");
}
+DECLARE_OOXMLEXPORT_TEST(testfdo80895, "fdo80895.docx")
+{
+ // DML shapes in header and footer were not getting rendered in LO and the same were not preserved after RT.
+ // In actual there was a shape but because of fetching wrong theme for header.xml or footer.xml
+ // resultant shape was with <a:noFill/> prop in <wps:spPr> hence was not visible.
+ // Checking there is a shape in header without <a:noFill/> element.
+
+ xmlDocPtr pXmlDoc = parseExport("word/header1.xml");
+ if (!pXmlDoc)
+ return;
+ assertXPath(pXmlDoc, "/w:hdr/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:noFill",0);
+ assertXPath(pXmlDoc, "/w:hdr/w:p/w:r/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor/a:graphic/a:graphicData/wps:wsp/wps:spPr/a:ln/a:noFill",0);
+
+ // Check for fallback (required for MSO-2007)
+ assertXPath(pXmlDoc, "/w:hdr/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:rect", "fillcolor", "#4f81bd");
+ assertXPath(pXmlDoc, "/w:hdr/w:p/w:r/mc:AlternateContent/mc:Fallback/w:pict/v:rect/v:fill", "type", "solid");
+}
+
#endif
CPPUNIT_PLUGIN_IMPLEMENT();