diff options
author | Attila Bakos (NISZ) <bakos.attilakaroly@nisz.hu> | 2022-04-05 10:13:02 +0200 |
---|---|---|
committer | Regina Henschel <rb.henschel@t-online.de> | 2022-04-06 19:07:34 +0200 |
commit | 9592da0a8e596869a1cd0859619dd28a541d7234 (patch) | |
tree | ff7531bff3d73608991a066c22e5fecae1888cd8 | |
parent | 1b8895c0fb6f131be27b93a84f6dc061678f78f8 (diff) |
tdf#148327 docx export: fix puzzle shape
There is an exporter class for preset shapes,
namely the DMLPresetShapeExporter, which in
its ctor calls the msfilter::GetShapeName()
converter method where the puzzle cause
exception. To avoid this return with false
to export it with custgeom in time.
Change-Id: I8d29bf551638a66abf381c9cb8f6a0eebc881195
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132567
Tested-by: Jenkins
Reviewed-by: Attila Bakos <bakos.attilakaroly@nisz.hu>
Reviewed-by: Regina Henschel <rb.henschel@t-online.de>
-rw-r--r-- | oox/source/export/shapes.cxx | 3 | ||||
-rw-r--r-- | sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt | bin | 0 -> 15349 bytes | |||
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport10.cxx | 30 |
3 files changed, 32 insertions, 1 deletions
diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx index 0405c975db0a..e4d378bd6111 100644 --- a/oox/source/export/shapes.cxx +++ b/oox/source/export/shapes.cxx @@ -928,7 +928,8 @@ ShapeExport& ShapeExport::WriteCustomShape( const Reference< XShape >& xShape ) // as preset ones with parameters. Try that with this converter class. if (!sShapeType.startsWith("ooxml") && sShapeType != "non-primitive" && GetDocumentType() == DOCUMENT_DOCX && !mbUserShapes - && xShape->getShapeType() == "com.sun.star.drawing.CustomShape") + && xShape->getShapeType() == "com.sun.star.drawing.CustomShape" + && !lcl_IsOnAllowlist(sShapeType)) { DMLPresetShapeExporter aCustomShapeConverter(this, xShape); bPresetWriteSuccessful = aCustomShapeConverter.WriteShape(); diff --git a/sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt b/sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt Binary files differnew file mode 100644 index 000000000000..6f7a62deecd2 --- /dev/null +++ b/sw/qa/extras/ooxmlexport/data/TestPuzzleExport.odt diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx index 21f81b619bda..9765cc62a24c 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport10.cxx @@ -1300,6 +1300,36 @@ DECLARE_OOXMLEXPORT_TEST( testTableCellMargin, "table-cell-margin.docx" ) } } +DECLARE_OOXMLEXPORT_TEST(TestPuzzleExport, "TestPuzzleExport.odt") +{ + // See tdf#148342 fo details + // Get the doc + uno::Reference< text::XTextDocument > xTextDoc(mxComponent, uno::UNO_QUERY_THROW); + auto pSwDoc = dynamic_cast<SwXTextDocument*>(xTextDoc.get()); + CPPUNIT_ASSERT(pSwDoc); + // Create a metafile + auto pMeta = pSwDoc->GetDocShell()->GetPreviewMetaFile(); + CPPUNIT_ASSERT(pMeta); + MetafileXmlDump aDumper; + auto pMetaXml = dumpAndParse(aDumper, *pMeta); + CPPUNIT_ASSERT(pMetaXml); + // After parsing check that node... + auto pXNode = getXPathNode(pMetaXml, "/metafile/push/push/push/push[4]/push/push/polypolygon/polygon"); + CPPUNIT_ASSERT(pXNode); + auto pNode = pXNode->nodesetval->nodeTab[0]; + CPPUNIT_ASSERT(pNode); + auto it = pNode->children; + int nCount = 0; + // .. and count the children + while (it != nullptr) + { + nCount++; + it = it->next; + } + // In case of puzzle thre will be so many... Without the fix there was a rectangle with 4 points. + CPPUNIT_ASSERT_GREATER(300, nCount); +} + // tdf#106742 for DOCX with compatibility level <= 14 (MS Word up to and incl. ver.2010), we should use cell margins when calculating table left border position DECLARE_OOXMLEXPORT_TEST( testTablePosition14, "table-position-14.docx" ) { |