diff options
author | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2012-08-02 10:20:59 +0200 |
---|---|---|
committer | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2012-08-02 10:23:44 +0200 |
commit | 0e4846ec20c1aefc554037e8f08255019c08da47 (patch) | |
tree | 626ce9b08d0c37c3f41943ea996a2f222ac0b13a | |
parent | cf2bdd65945d2a02af44db535cf1964d4d09ae20 (diff) |
fdo#52610: Fixed several docx export bugs
+ hyperlink starting before a field and ending in its results isn't
valid.
+ when footnotes have hyperlinks we need to add the proper XML
namespace and output the relations to a different file.
Change-Id: I1c6cb8acba21c35e10bb0497eeaf96bbd73730d1
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.cxx | 25 | ||||
-rw-r--r-- | sw/source/filter/ww8/docxattributeoutput.hxx | 2 |
2 files changed, 15 insertions, 12 deletions
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index f9df2d1f106f..3cb9d85e469f 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -534,14 +534,6 @@ void DocxAttributeOutput::EndRun() m_pSerializer->endElementNS( XML_w, XML_hyperlink ); m_closeHyperlinkInPreviousRun = false; } - // prepend the actual run start - if ( m_pHyperlinkAttrList ) - { - XFastAttributeListRef xAttrList ( m_pHyperlinkAttrList ); - - m_pSerializer->startElementNS( XML_w, XML_hyperlink, xAttrList ); - m_pHyperlinkAttrList = NULL; - } // Write the hyperlink and toc fields starts for ( std::vector<FieldInfos>::iterator pIt = m_Fields.begin(); pIt != m_Fields.end(); ) @@ -560,6 +552,15 @@ void DocxAttributeOutput::EndRun() ++pIt; } + // Start the hyperlink after the fields separators or we would generate invalid file + if ( m_pHyperlinkAttrList ) + { + XFastAttributeListRef xAttrList ( m_pHyperlinkAttrList ); + + m_pSerializer->startElementNS( XML_w, XML_hyperlink, xAttrList ); + m_pHyperlinkAttrList = NULL; + } + DoWriteBookmarks( ); WriteCommentRanges(); @@ -1216,9 +1217,10 @@ bool DocxAttributeOutput::StartURL( const String& rUrl, const String& rTarget ) { OUString osUrl( sUrl ); - ::rtl::OString sId = m_rExport.AddRelation( - S( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ), - osUrl ); + OString sId = rtl::OUStringToOString( GetExport().GetFilter().addRelation( m_pSerializer->getOutputStream(), + S( "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" ), + osUrl, true ), RTL_TEXTENCODING_UTF8 ); + m_pHyperlinkAttrList->add( FSNS( XML_r, XML_id), sId.getStr()); } else @@ -3508,6 +3510,7 @@ void DocxAttributeOutput::FootnotesEndnotes( bool bFootnotes ) m_pSerializer->startElementNS( XML_w, nBody, FSNS( XML_xmlns, XML_w ), "http://schemas.openxmlformats.org/wordprocessingml/2006/main", + FSNS( XML_xmlns, XML_r ), "http://schemas.openxmlformats.org/officeDocument/2006/relationships", FSEND ); sal_Int32 nIndex = 0; diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index ca863ae18bc6..176100953fa7 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -613,7 +613,7 @@ public: virtual DocxExport& GetExport(); const DocxExport& GetExport() const { return const_cast< DocxAttributeOutput* >( this )->GetExport(); } - /// For eg. the output of the styles, we need to switch the serializer to enother one. + /// For eg. the output of the styles, we need to switch the serializer to an other one. void SetSerializer( ::sax_fastparser::FSHelperPtr pSerializer ) { m_pSerializer = pSerializer; } /// Occasionnaly need to use this serializer from the outside |