sw/qa/extras/ooxmlexport/data/tdf118701.docx |binary sw/qa/extras/ooxmlexport/ooxmlexport14.cxx | 5 +++++ writerfilter/source/dmapper/DomainMapper.cxx | 2 +- writerfilter/source/dmapper/DomainMapper_Impl.cxx | 16 ++++++++++++++++ writerfilter/source/dmapper/DomainMapper_Impl.hxx | 1 + 5 files changed, 23 insertions(+), 1 deletion(-)
New commits: commit d8b5dbc8be757ef64b4d09dd1a72cb52c11d6d10 Author: Bakos Attila <bakos.attilakar...@nisz.hu> AuthorDate: Tue Jun 30 15:03:31 2020 +0200 Commit: Gabor Kelemen <kelemen.gab...@nisz.hu> CommitDate: Tue Sep 15 13:27:44 2020 +0200 tdf#118701 DOCX import: fix image position on page break If an image anchored to an empty paragraph only with section properties, don't remove that paragraph to keep the image on the page before the page break. IsLastParaEmpty() tries to move a text cursor over the empty paragraph marked for deletion. If it contains an image anchored as a character, the cursor won't reach the end of the previous paragraph by goLeft(2). Co-authored-by: Attila Bánhegyi (NISZ) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97518 Tested-by: László Németh <nem...@numbertext.org> Reviewed-by: László Németh <nem...@numbertext.org> (cherry picked from commit b216fc5b583050cfb1cdf9bd82ec3c1bd2e09d70) Change-Id: Ic22c7553948eb06739232d7e35fc49ad14f96518 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102563 Tested-by: Gabor Kelemen <kelemen.gab...@nisz.hu> Reviewed-by: Gabor Kelemen <kelemen.gab...@nisz.hu> diff --git a/sw/qa/extras/ooxmlexport/data/tdf118701.docx b/sw/qa/extras/ooxmlexport/data/tdf118701.docx new file mode 100644 index 000000000000..654a22709919 Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf118701.docx differ diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx index 92d2d7869662..8ec18a49eb4a 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx @@ -466,6 +466,11 @@ DECLARE_OOXMLIMPORT_TEST(TestTdf132483, "tdf132483.docx") text::RelOrientation::PAGE_FRAME , nHRelPos); } +DECLARE_OOXMLIMPORT_TEST(testTdf118701, "tdf118701.docx") +{ + CPPUNIT_ASSERT_EQUAL_MESSAGE("At least one paragraph is missing from the file!", 3, getParagraphs()); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index ec3809cd291a..3339bb27e220 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3475,7 +3475,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) } m_pImpl->SetParaSectpr(false); finishParagraph(bRemove); - if (bRemove) + if (bRemove && m_pImpl->IsLastParaEmpty()) m_pImpl->RemoveLastParagraph(); } else diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index 6e6a074dad43..b77428a35f53 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -477,6 +477,22 @@ void DomainMapper_Impl::AddDummyParaForTableInSection() } } +bool DomainMapper_Impl::IsLastParaEmpty() +{ + bool bRet = true; + if (!m_aTextAppendStack.empty() && m_aTextAppendStack.top().xTextAppend) + { + //creating cursor for finding text content + uno::Reference<text::XTextCursor> xCursor = m_aTextAppendStack.top().xTextAppend->createTextCursor(); + xCursor->gotoEnd(false); + //selecting the last 2 characters in the document + xCursor->goLeft(2, true); + //the last paragraph is empty, if they are newlines + bRet = xCursor->getString().match(OUString(SAL_NEWLINE_STRING).concat(SAL_NEWLINE_STRING)); + } + return bRet; +} + void DomainMapper_Impl::RemoveLastParagraph( ) { if (m_bDiscardHeaderFooter) diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index 7291973be2a1..9eef8dbee58d 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -619,6 +619,7 @@ public: void RemoveDummyParaForTableInSection(); void AddDummyParaForTableInSection(); + bool IsLastParaEmpty(); void RemoveLastParagraph( ); void SetIsLastParagraphInSection( bool bIsLast ); bool GetIsLastParagraphInSection() const { return m_bIsLastParaInSection;} _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits