sw/qa/extras/ooxmlexport/data/tdf131539.odt |binary sw/qa/extras/ooxmlexport/ooxmlexport14.cxx | 10 ++++++ sw/source/filter/ww8/docxattributeoutput.cxx | 42 +++++++++++++++++++++++++++ 3 files changed, 52 insertions(+)
New commits: commit 1ed606718db2525cae583ef03e81af65c2551e71 Author: Attila Bakos <bakos.attilakar...@nisz.hu> AuthorDate: Thu Apr 9 17:10:22 2020 +0200 Commit: Gabor Kelemen <kelemen.gab...@nisz.hu> CommitDate: Mon Jul 13 22:06:24 2020 +0200 tdf#131539 DOCX export: fix position of OLE objects Keeping position of OLE objects anchored to text as a character. Co-developer: Tibor Nagy (NISZ) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91983 Tested-by: László Németh <nem...@numbertext.org> Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit 2150fdc7d0f63288ac56c33cb898589512057642) Change-Id: I9699250ae5c418f9994ea2a7a3b102681b042214 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98276 Tested-by: Gabor Kelemen <kelemen.gab...@nisz.hu> Reviewed-by: Gabor Kelemen <kelemen.gab...@nisz.hu> diff --git a/sw/qa/extras/ooxmlexport/data/tdf131539.odt b/sw/qa/extras/ooxmlexport/data/tdf131539.odt new file mode 100644 index 000000000000..d0e446522a0a Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf131539.odt differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx index 7f1e63d39cc7..0f5b5f827743 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx @@ -408,6 +408,16 @@ DECLARE_OOXMLEXPORT_TEST(testHyphenationAuto, "hyphenation.odt") assertXPath(pXmlStyles, "/w:styles/w:docDefaults/w:pPrDefault/w:pPr/w:suppressAutoHyphens", "val", "true"); } +DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf131539, "tdf131539.odt") +{ + //The positions of OLE objects were not exported, check if now it is exported correctly + xmlDocPtr p_XmlDoc = parseExport("word/document.xml"); + CPPUNIT_ASSERT(p_XmlDoc); + OUString aXmlVal = getXPath(p_XmlDoc, "/w:document/w:body/w:p[4]/w:r[1]/w:object/v:shape", "style"); + // This data was missing + CPPUNIT_ASSERT(aXmlVal.indexOf("margin-left:139.95")>-1); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index ec73daf45c6d..fed20324b4dd 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -5516,11 +5516,53 @@ void DocxAttributeOutput::WriteOLE( SwOLENode& rNode, const Size& rSize, const S m_pSerializer->startElementNS(XML_w, XML_object); } + //tdf#131539: Export OLE positions in docx: + //This string will store the position output for the xml + OString aPos; + //This string will store the relative position for aPos + OString aAnch; + + if (!rFlyFrameFormat->GetName().isEmpty()) + { + //Get the horizontal alignment of the OLE via the frame format, to aHAlign + OString aHAlign = convertToOOXMLHoriOrient(rFlyFrameFormat->GetHoriOrient().GetHoriOrient(), + rFlyFrameFormat->GetHoriOrient().IsPosToggle()); + //Get the vertical alignment of the OLE via the frame format to aVAlign + OString aVAlign = convertToOOXMLVertOrient(rFlyFrameFormat->GetVertOrient().GetVertOrient()); + + //Get the relative horizontal positions for the anchors + OString aHAnch = convertToOOXMLHoriOrientRel(rFlyFrameFormat->GetHoriOrient().GetRelationOrient()); + //Get the relative vertical positions for the anchors + OString aVAnch = convertToOOXMLVertOrientRel(rFlyFrameFormat->GetVertOrient().GetRelationOrient()); + + //Choice that the horizontal position is relative or not + if (!aHAlign.isEmpty()) + aHAlign = ";mso-position-horizontal:" + aHAlign; + aHAlign = ";mso-position-horizontal-relative:" + aHAnch; + + //Choice that the vertical position is relative or not + if (!aVAlign.isEmpty()) + aVAlign = ";mso-position-vertical:" + aVAlign; + aVAlign = ";mso-position-vertical-relative:" + aVAnch; + + //Set the anchoring information into one string for aPos + aAnch = aHAlign + aVAlign; + + //Query the positions to aPos from frameformat + aPos = + "position:absolute;margin-left:" + OString::number(double(rFlyFrameFormat->GetHoriOrient().GetPos()) / 20) + + "pt;margin-top:" + OString::number(double(rFlyFrameFormat->GetVertOrient().GetPos()) / 20) + "pt;"; + } + OString sShapeStyle = "width:" + OString::number( double( rSize.Width() ) / 20 ) + "pt;height:" + OString::number( double( rSize.Height() ) / 20 ) + "pt"; //from VMLExport::AddRectangleDimensions(), it does: value/20 OString sShapeId = "ole_" + sId; + //Export anchor setting, if it exists + if (!aPos.isEmpty() && !aAnch.isEmpty()) + sShapeStyle = aPos + sShapeStyle + aAnch; + // shape definition m_pSerializer->startElementNS( XML_v, XML_shape, XML_id, sShapeId.getStr(), _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits