summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorBakos Attila <bakos.attilakaroly@nisz.hu>2020-06-30 15:03:31 +0200
committerLászló Németh <nemeth@numbertext.org>2020-07-10 14:44:50 +0200
commitb216fc5b583050cfb1cdf9bd82ec3c1bd2e09d70 (patch)
treeeab1bebbba923457c2a57da3db0615514487da9f /writerfilter
parentbb303e79091f07c7a5b553a4be63fa0034ba2b9c (diff)
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) Change-Id: Ic22c7553948eb06739232d7e35fc49ad14f96518 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97518 Tested-by: László Németh <nemeth@numbertext.org> Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx2
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx16
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx1
3 files changed, 18 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index d07f045de806..5df7bb33b1ae 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3516,7 +3516,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 04e087fc4d30..16b56a6ecae8 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -474,6 +474,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 db0a03fa7792..e145547f3ddd 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -626,6 +626,7 @@ public:
void RemoveDummyParaForTableInSection();
void AddDummyParaForTableInSection();
+ bool IsLastParaEmpty();
void RemoveLastParagraph( );
void SetIsLastParagraphInSection( bool bIsLast );
bool GetIsLastParagraphInSection() const { return m_bIsLastParaInSection;}