summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAttila Bakos <bakos.attilakaroly@nisz.hu>2020-04-09 17:10:22 +0200
committerMichael Stahl <michael.stahl@allotropia.de>2022-01-12 20:38:09 +0100
commite541841852ded9ad1b8323c31cba9df37fab93a4 (patch)
treec7738c03080ea0fdf57db74ab2ea2ef48857ea8d
parentf5e841b0b5951a685f25010fb185e33280045322 (diff)
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) Change-Id: I9699250ae5c418f9994ea2a7a3b102681b042214 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/91983 Tested-by: László Németh <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org> (cherry picked from commit 2150fdc7d0f63288ac56c33cb898589512057642)
-rw-r--r--sw/qa/extras/ooxmlexport/data/tdf131539.odtbin0 -> 35907 bytes
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport14.cxx10
-rw-r--r--sw/source/filter/ww8/docxattributeoutput.cxx42
3 files changed, 52 insertions, 0 deletions
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
--- /dev/null
+++ b/sw/qa/extras/ooxmlexport/data/tdf131539.odt
Binary files differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
index 01303d3e9937..387924997f78 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
@@ -497,6 +497,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 7874dcfa6d92..f5d1587f1fca 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -5515,11 +5515,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(),