tdf121374 ooxmlexport: export H/F to default section
It wouldn't be terrible to duplicate headers/footers unnecessarily, but it is terrible to have them disappear. If the last SectPr has no idea about the section start, it can't know whether it is continuous or started with a page break. In that case, just ensure that the header and footer are explicitly written out. This seems to be a DOCX problem only. I think that doc and rtf both write the section information at the BEGINNING of the section, but DOCX writes it at the END. So, sharing code between these two opposite approaches is difficult. A followup commit can try to make it smarter about knowing the start of the section (because usually pPDNd is zero). Another followup commit can add the missing page breaks. Change-Id: Iff54ed097b4f8692d7d7764089002b00fbde4f51 Reviewed-on: https://gerrit.libreoffice.org/64821 Tested-by: Jenkins Reviewed-by: Justin Luth <justin_luth@sil.org> Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
This commit is contained in:
parent
dafbc86037
commit
8c8c65c84d
8 changed files with 78 additions and 3 deletions
|
@ -15078,6 +15078,7 @@ sw/qa/extras/ooxmlexport/ooxmlencryption.cxx
|
|||
sw/qa/extras/ooxmlexport/ooxmlexport.cxx
|
||||
sw/qa/extras/ooxmlexport/ooxmlexport10.cxx
|
||||
sw/qa/extras/ooxmlexport/ooxmlexport11.cxx
|
||||
sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
|
||||
sw/qa/extras/ooxmlexport/ooxmlexport2.cxx
|
||||
sw/qa/extras/ooxmlexport/ooxmlexport3.cxx
|
||||
sw/qa/extras/ooxmlexport/ooxmlexport4.cxx
|
||||
|
|
14
sw/CppunitTest_sw_ooxmlexport13.mk
Normal file
14
sw/CppunitTest_sw_ooxmlexport13.mk
Normal file
|
@ -0,0 +1,14 @@
|
|||
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
|
||||
#*************************************************************************
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
#*************************************************************************
|
||||
|
||||
$(eval $(call sw_ooxmlexport_test,13))
|
||||
|
||||
# vim: set noet sw=4 ts=4:
|
|
@ -73,6 +73,7 @@ $(eval $(call gb_Module_add_slowcheck_targets,sw,\
|
|||
CppunitTest_sw_ooxmlexport10 \
|
||||
CppunitTest_sw_ooxmlexport11 \
|
||||
CppunitTest_sw_ooxmlexport12 \
|
||||
CppunitTest_sw_ooxmlexport13 \
|
||||
CppunitTest_sw_ooxmlexport_template \
|
||||
CppunitTest_sw_ooxmlfieldexport \
|
||||
CppunitTest_sw_ooxmllinks \
|
||||
|
|
BIN
sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF.odt
Normal file
BIN
sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF.odt
Normal file
Binary file not shown.
BIN
sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF2.doc
Normal file
BIN
sw/qa/extras/ooxmlexport/data/tdf121374_sectionHF2.doc
Normal file
Binary file not shown.
55
sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
Normal file
55
sw/qa/extras/ooxmlexport/ooxmlexport13.cxx
Normal file
|
@ -0,0 +1,55 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/*
|
||||
* This file is part of the LibreOffice project.
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#include <swmodeltestbase.hxx>
|
||||
|
||||
#include <com/sun/star/awt/Size.hpp>
|
||||
#include <com/sun/star/beans/XPropertySet.hpp>
|
||||
#include <com/sun/star/text/XTextFrame.hpp>
|
||||
#include <com/sun/star/text/XTextFramesSupplier.hpp>
|
||||
|
||||
#include <sfx2/docfile.hxx>
|
||||
#include <sfx2/docfilt.hxx>
|
||||
#include <svx/xfillit0.hxx>
|
||||
|
||||
class Test : public SwModelTestBase
|
||||
{
|
||||
public:
|
||||
Test() : SwModelTestBase("/sw/qa/extras/ooxmlexport/data/", "Office Open XML Text") {}
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Blacklist handling
|
||||
*/
|
||||
bool mustTestImportOf(const char* filename) const override {
|
||||
// If the testcase is stored in some other format, it's pointless to test.
|
||||
return OString(filename).endsWith(".docx");
|
||||
}
|
||||
};
|
||||
|
||||
DECLARE_OOXMLEXPORT_TEST(testTdf121374_sectionHF, "tdf121374_sectionHF.odt")
|
||||
{
|
||||
uno::Reference<beans::XPropertySet> xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
|
||||
uno::Reference<text::XTextRange> xFooterText = getProperty< uno::Reference<text::XTextRange> >(xPageStyle, "FooterText");
|
||||
CPPUNIT_ASSERT_EQUAL( OUString("footer"), xFooterText->getString() );
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Paragraphs", 6, getParagraphs() );
|
||||
//CPPUNIT_ASSERT_EQUAL_MESSAGE( "Number of Pages", 6, getPages() );
|
||||
}
|
||||
|
||||
DECLARE_OOXMLEXPORT_TEST(testTdf121374_sectionHF2, "tdf121374_sectionHF2.doc")
|
||||
{
|
||||
uno::Reference<beans::XPropertySet> xPageStyle(getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
|
||||
uno::Reference<text::XTextRange> xHeaderText = getProperty< uno::Reference<text::XTextRange> >(xPageStyle, "HeaderText");
|
||||
CPPUNIT_ASSERT( xHeaderText->getString().startsWith("virkamatka-anomus") );
|
||||
}
|
||||
|
||||
CPPUNIT_PLUGIN_IMPLEMENT();
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
@ -1035,7 +1035,8 @@ DECLARE_OOXMLEXPORT_TEST(testSectionHeader, "sectionprot.odt")
|
|||
{
|
||||
if (xmlDocPtr pXmlDoc = parseExport("word/document.xml"))
|
||||
{
|
||||
assertXPath(pXmlDoc, "//w:headerReference", 1);
|
||||
// this test must not be zero
|
||||
assertXPath(pXmlDoc, "//w:headerReference", 2);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1537,6 +1537,7 @@ void MSWordExportBase::SectionProperties( const WW8_SepInfo& rSepInfo, WW8_PdAtt
|
|||
*/
|
||||
sal_uInt8 nBreakCode = 2; // default start new page
|
||||
bool bOutPgDscSet = true, bLeftRightPgChain = false, bOutputStyleItemSet = false;
|
||||
bool bEnsureHeaderFooterWritten = rSepInfo.pSectionFormat && rSepInfo.bIsFirstParagraph;
|
||||
const SwFrameFormat* pPdFormat = &pPd->GetMaster();
|
||||
if ( rSepInfo.pSectionFormat )
|
||||
{
|
||||
|
@ -1553,7 +1554,9 @@ void MSWordExportBase::SectionProperties( const WW8_SepInfo& rSepInfo, WW8_PdAtt
|
|||
}
|
||||
}
|
||||
|
||||
if ( reinterpret_cast<SwSectionFormat*>(sal_IntPtr(-1)) != rSepInfo.pSectionFormat )
|
||||
if ( reinterpret_cast<SwSectionFormat*>(sal_IntPtr(-1)) == rSepInfo.pSectionFormat )
|
||||
bEnsureHeaderFooterWritten |= !rSepInfo.pPDNd && GetExportFormat() == ExportFormat::DOCX;
|
||||
else
|
||||
{
|
||||
if ( nBreakCode == 0 )
|
||||
bOutPgDscSet = false;
|
||||
|
@ -1715,7 +1718,7 @@ void MSWordExportBase::SectionProperties( const WW8_SepInfo& rSepInfo, WW8_PdAtt
|
|||
: &pPd->GetLeft();
|
||||
|
||||
// Ensure that headers are written if section is first paragraph
|
||||
if ( nBreakCode != 0 || ( rSepInfo.pSectionFormat && rSepInfo.bIsFirstParagraph ))
|
||||
if ( nBreakCode != 0 || bEnsureHeaderFooterWritten )
|
||||
{
|
||||
if ( titlePage )
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue