sw/qa/extras/ooxmlexport/data/fdo67013.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 53 ++++++++++++++++++++++----- sw/source/filter/ww8/docxattributeoutput.cxx | 3 + sw/source/filter/ww8/docxattributeoutput.hxx | 6 +++ sw/source/filter/ww8/docxexport.cxx | 6 +++ 5 files changed, 59 insertions(+), 9 deletions(-)
New commits: commit a4b4bde0a28b06f150ec80a65e322491a547f803 Author: Adam Co <rattles2...@gmail.com> Date: Mon Jul 29 19:37:33 2013 +0300 fdo#67013 : fix for borders in headers and footers Change-Id: I45d71348a64b8e79c34e24829cceadedd0d8f6a9 Reviewed-on: https://gerrit.libreoffice.org/5170 Reviewed-by: Fridrich Strba <fridr...@documentfoundation.org> Tested-by: Fridrich Strba <fridr...@documentfoundation.org> diff --git a/sw/qa/extras/ooxmlexport/data/fdo67013.docx b/sw/qa/extras/ooxmlexport/data/fdo67013.docx new file mode 100644 index 0000000..5512550 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/fdo67013.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index f4932ff..0b4003e 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -105,6 +105,7 @@ public: void testFdo60990(); void testFdo65718(); void testFdo64350(); + void testFdo67013(); CPPUNIT_TEST_SUITE(Test); #if !defined(MACOSX) && !defined(WNT) @@ -186,6 +187,7 @@ void Test::run() {"fdo60990.odt", &Test::testFdo60990}, {"fdo65718.docx", &Test::testFdo65718}, {"fdo64350.docx", &Test::testFdo64350}, + {"fdo67013.docx", &Test::testFdo67013}, }; // Don't test the first import of these, for some reason those tests fail const char* aBlacklist[] = { @@ -998,14 +1000,12 @@ void Test::testFdo66929() void Test::testPageBorderSpacingExportCase2() { - /* - * The problem was that the exporter didn't mirror the workaround of the - * importer, regarding the page border's spacing : the <w:pgBorders w:offsetFrom="page"> - * and the inner nodes like <w:top w:space="24" .... /> - * - * The exporter ALWAYS exported 'w:offsetFrom="text"' even when the spacing values where too large - * for Word to handle (larger than 31 points) - */ + // The problem was that the exporter didn't mirror the workaround of the + // importer, regarding the page border's spacing : the <w:pgBorders w:offsetFrom="page"> + // and the inner nodes like <w:top w:space="24" .... /> + // + // The exporter ALWAYS exported 'w:offsetFrom="text"' even when the spacing values where too large + // for Word to handle (larger than 31 points) xmlDocPtr pXmlDoc = parseExport(); @@ -1097,6 +1097,43 @@ void Test::testFdo64350() CPPUNIT_ASSERT_EQUAL(table::ShadowLocation_BOTTOM_RIGHT, aShadow.Location); } +void Test::testFdo67013() +{ + /* + * The problem was that borders inside headers \ footers were not exported + * This was checked in xray using these commands: + * + * xHeaderText = ThisComponent.getStyleFamilies().getByName("PageStyles").getByName("Standard").HeaderText + * xHeaderEnum = xHeaderText.createEnumeration() + * xHeaderFirstParagraph = xHeaderEnum.nextElement() + * xHeaderBottomBorder = xHeaderFirstParagraph.BottomBorder + * + * xFooterText = ThisComponent.getStyleFamilies().getByName("PageStyles").getByName("Standard").FooterText + * xFooterEnum = xFooterText.createEnumeration() + * xFooterFirstParagraph = xFooterEnum.nextElement() + * xFooterTopBorder = xFooterFirstParagraph.TopBorder + */ + uno::Reference<text::XText> xHeaderText = getProperty< uno::Reference<text::XText> >(getStyles("PageStyles")->getByName(DEFAULT_STYLE), "HeaderText"); + uno::Reference< text::XTextRange > xHeaderParagraph = getParagraphOfText( 1, xHeaderText ); + table::BorderLine2 aHeaderBottomBorder = getProperty<table::BorderLine2>(xHeaderParagraph, "BottomBorder"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x622423), aHeaderBottomBorder.Color); + CPPUNIT_ASSERT_EQUAL(sal_Int16(106), aHeaderBottomBorder.InnerLineWidth); + CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aHeaderBottomBorder.LineDistance); + CPPUNIT_ASSERT_EQUAL(sal_Int16(7), aHeaderBottomBorder.LineStyle); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(159), aHeaderBottomBorder.LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aHeaderBottomBorder.OuterLineWidth); + + uno::Reference<text::XText> xFooterText = getProperty< uno::Reference<text::XText> >(getStyles("PageStyles")->getByName(DEFAULT_STYLE), "FooterText"); + uno::Reference< text::XTextRange > xFooterParagraph = getParagraphOfText( 1, xFooterText ); + table::BorderLine2 aFooterTopBorder = getProperty<table::BorderLine2>(xFooterParagraph, "TopBorder"); + CPPUNIT_ASSERT_EQUAL(sal_Int32(0x622423), aFooterTopBorder.Color); + CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aFooterTopBorder.InnerLineWidth); + CPPUNIT_ASSERT_EQUAL(sal_Int16(26), aFooterTopBorder.LineDistance); + CPPUNIT_ASSERT_EQUAL(sal_Int16(4), aFooterTopBorder.LineStyle); + CPPUNIT_ASSERT_EQUAL(sal_uInt32(159), aFooterTopBorder.LineWidth); + CPPUNIT_ASSERT_EQUAL(sal_Int16(106), aFooterTopBorder.OuterLineWidth); +} + CPPUNIT_TEST_SUITE_REGISTRATION(Test); CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 820d06c..55de9c9 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -5126,7 +5126,7 @@ void DocxAttributeOutput::FormatBox( const SvxBoxItem& rBox ) OutputBorderOptions aOutputBorderOptions = lcl_getBoxBorderOptions(); - if ( m_bOpenedSectPr ) + if ( m_bOpenedSectPr && GetWritingHeaderFooter() == false) { // Inside a section @@ -5330,6 +5330,7 @@ DocxAttributeOutput::DocxAttributeOutput( DocxExport &rExport, FSHelperPtr pSeri m_pRedlineData( NULL ), m_nRedlineId( 0 ), m_bOpenedSectPr( false ), + m_bWritingHeaderFooter( false ), m_sFieldBkm( ), m_nNextMarkId( 0 ), m_bPostitStart(false), diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx index 02aeb45..e02eaae 100644 --- a/sw/source/filter/ww8/docxattributeoutput.hxx +++ b/sw/source/filter/ww8/docxattributeoutput.hxx @@ -629,6 +629,9 @@ private: /// Flag indicating that the section properties are being written bool m_bOpenedSectPr; + /// Flag indicating that the header \ footer are being written + bool m_bWritingHeaderFooter; + /// Field data to remember in the text run std::vector< FieldInfos > m_Fields; String m_sFieldBkm; @@ -734,6 +737,9 @@ public: virtual oox::drawingml::DrawingML& GetDrawingML(); void BulletDefinition(int nId, const Graphic& rGraphic, Size aSize) SAL_OVERRIDE; + + void SetWritingHeaderFooter( bool bWritingHeaderFooter ) { m_bWritingHeaderFooter = bWritingHeaderFooter; } + bool GetWritingHeaderFooter( ) { return m_bWritingHeaderFooter; } }; #endif // _DOCXATTRIBUTEOUTPUT_HXX_ diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx index 99c6460..24c573b 100644 --- a/sw/source/filter/ww8/docxexport.cxx +++ b/sw/source/filter/ww8/docxexport.cxx @@ -195,6 +195,9 @@ bool DocxExport::DisallowInheritingOutlineNumbering( const SwFmt& rFmt ) void DocxExport::WriteHeadersFooters( sal_uInt8 nHeadFootFlags, const SwFrmFmt& rFmt, const SwFrmFmt& rLeftFmt, const SwFrmFmt& rFirstPageFmt, sal_uInt8 /*nBreakCode*/ ) { + // Turn ON flag for 'Writing Headers \ Footers' + m_pAttrOutput->SetWritingHeaderFooter( true ); + // headers if ( nHeadFootFlags & nsHdFtFlags::WW8_HEADER_EVEN ) WriteHeaderFooter( rLeftFmt, true, "even" ); @@ -218,6 +221,9 @@ void DocxExport::WriteHeadersFooters( sal_uInt8 nHeadFootFlags, if ( nHeadFootFlags & ( nsHdFtFlags::WW8_FOOTER_EVEN | nsHdFtFlags::WW8_HEADER_EVEN )) settings.evenAndOddHeaders = true; + // Turn OFF flag for 'Writing Headers \ Footers' + m_pAttrOutput->SetWritingHeaderFooter( false ); + #if OSL_DEBUG_LEVEL > 1 fprintf( stderr, "DocxExport::WriteHeadersFooters() - nBreakCode introduced, but ignored\n" ); #endif _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits