[Libreoffice-commits] core.git: sw/qa sw/source
Tünde Tóth (via logerrit)
logerrit at kemper.freedesktop.org
Wed Jun 26 09:04:01 UTC 2019
sw/qa/extras/ooxmlexport/data/tdf78657_picture_hyperlink.docx |binary
sw/qa/extras/ooxmlexport/ooxmlexport13.cxx | 11 +++
sw/source/filter/ww8/docxattributeoutput.cxx | 30 +++++++---
3 files changed, 34 insertions(+), 7 deletions(-)
New commits:
commit 100f43ab871bedda6b427645cbfc2c8083da98b5
Author: Tünde Tóth <tundeth at gmail.com>
AuthorDate: Mon Jun 24 17:19:30 2019 +0200
Commit: László Németh <nemeth at numbertext.org>
CommitDate: Wed Jun 26 11:03:12 2019 +0200
tdf#78657 DOCX export: fix hyperlink inserted to image
Hyperlink inserted to image lost after export.
tdf78657_picture_hyperlink.docx: Test file from Microsoft Word 2016.
Change-Id: I1b2b9fe023aea3f46848a9d616374f7c08598756
Reviewed-on: https://gerrit.libreoffice.org/74653
Tested-by: Jenkins
Reviewed-by: László Németh <nemeth at numbertext.org>
diff --git a/sw/qa/extras/ooxmlexport/data/tdf78657_picture_hyperlink.docx b/sw/qa/extras/ooxmlexport/data/tdf78657_picture_hyperlink.docx
new file mode 100644
index 000000000000..bc4759ecc342
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf78657_picture_hyperlink.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
index 408590660b82..4da5d109324a 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
@@ -398,6 +398,17 @@ DECLARE_OOXMLEXPORT_TEST(testTdf125324, "tdf125324.docx")
assertXPath(pXmlDoc, "/root/page/body/txt[2]/anchored/fly/tab/infos/bounds", "top", "4193");
}
+DECLARE_OOXMLEXPORT_TEST(testTdf78657, "tdf78657_picture_hyperlink.docx")
+{
+ xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+ xmlDocPtr pXmlRels = parseExport("word/_rels/document.xml.rels");
+ if (!pXmlDoc || !pXmlRels)
+ return;
+ assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing/wp:inline/wp:docPr/a:hlinkClick", 1);
+ assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:r/w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic/pic:nvPicPr/pic:cNvPr/a:hlinkClick", 1);
+ assertXPath(pXmlRels, "/rels:Relationships/rels:Relationship[@Target='http://www.google.com']", "TargetMode", "External");
+}
+
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 cf6f5f2e8ab8..5733823ed24a 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -4821,10 +4821,25 @@ void DocxAttributeOutput::FlyFrameGraphic( const SwGrfNode* pGrfNode, const Size
docPrattrList->add( XML_title, OUStringToOString( pGrfNode ? pGrfNode->GetTitle() : pOLEFrameFormat->GetObjTitle(), RTL_TEXTENCODING_UTF8 ).getStr());
XFastAttributeListRef docPrAttrListRef( docPrattrList );
m_pSerializer->startElementNS( XML_wp, XML_docPr, docPrAttrListRef );
- // TODO hyperlink
- // m_pSerializer->singleElementNS( XML_a, XML_hlinkClick,
- // FSNS( XML_xmlns, XML_a ), "http://schemas.openxmlformats.org/drawingml/2006/main",
- // FSNS( XML_r, XML_id ), "rId4");
+
+ //TODO: internal hyperlink
+ OUString sURL, sRelId;
+ if(pSdrObj)
+ {
+ uno::Reference< drawing::XShape > xShape( const_cast<SdrObject*>(pSdrObj)->getUnoShape(), uno::UNO_QUERY );
+ uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_QUERY );
+ xPropSet->getPropertyValue("HyperLinkURL") >>= sURL;
+ if(!sURL.isEmpty())
+ {
+ sRelId = GetExport().GetFilter().addRelation( m_pSerializer->getOutputStream(),
+ oox::getRelationship(Relationship::HYPERLINK),
+ sURL, true );
+ m_pSerializer->singleElementNS( XML_a, XML_hlinkClick,
+ FSNS( XML_xmlns, XML_a ), "http://schemas.openxmlformats.org/drawingml/2006/main",
+ FSNS( XML_r, XML_id ), sRelId.toUtf8());
+ }
+ }
+
m_pSerializer->endElementNS( XML_wp, XML_docPr );
m_pSerializer->startElementNS(XML_wp, XML_cNvGraphicFramePr);
@@ -4846,9 +4861,10 @@ void DocxAttributeOutput::FlyFrameGraphic( const SwGrfNode* pGrfNode, const Size
// It seems pic:cNvpr and wp:docPr are pretty much the same thing with the same attributes
m_pSerializer->startElementNS(XML_pic, XML_cNvPr, docPrAttrListRef);
- // TODO hyperlink
- // m_pSerializer->singleElementNS( XML_a, XML_hlinkClick,
- // FSNS( XML_r, XML_id ), "rId4");
+ if(!sURL.isEmpty())
+ m_pSerializer->singleElementNS( XML_a, XML_hlinkClick,
+ FSNS( XML_r, XML_id ), sRelId.toUtf8());
+
m_pSerializer->endElementNS( XML_pic, XML_cNvPr );
m_pSerializer->startElementNS(XML_pic, XML_cNvPicPr);
More information about the Libreoffice-commits
mailing list