summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorXisco Fauli <xiscofauli@libreoffice.org>2024-01-23 15:28:26 +0100
committerMichael Stahl <michael.stahl@allotropia.de>2024-01-29 11:48:46 +0100
commit22db6d7a8b1638550a53af57c7c832c3fff230e2 (patch)
tree42f7bdc49db87296d1052c3744bf101e0d243483 /sw
parent00dd94eda1e4b46c7f9a53750aa829c31c6830d3 (diff)
tdf#159336: export EditWidget with multiline enabled
How to reproduce it from scratch: 1. Open writer 2. Form - Content Controls - Rich Text/Plain Text 3. Split the control intro different lines 4. Export to PDF -> The content control is displayed in one line Change-Id: Ia8666c8a6520e94ae06693ea8767c1d79aa5d3a0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162446 Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> Tested-by: Jenkins (cherry picked from commit 8a6c9e246c746792fa0ab9d47a0fd5928b77d91d) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162532 Reviewed-by: Michael Stahl <michael.stahl@allotropia.de> Signed-off-by: Xisco Fauli <xiscofauli@libreoffice.org> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162533
Diffstat (limited to 'sw')
-rw-r--r--sw/qa/core/text/data/tdf159336.odtbin0 -> 9417 bytes
-rw-r--r--sw/qa/core/text/text.cxx35
-rw-r--r--sw/source/core/text/itrform2.cxx2
3 files changed, 37 insertions, 0 deletions
diff --git a/sw/qa/core/text/data/tdf159336.odt b/sw/qa/core/text/data/tdf159336.odt
new file mode 100644
index 000000000000..4f396e4f2abb
--- /dev/null
+++ b/sw/qa/core/text/data/tdf159336.odt
Binary files differ
diff --git a/sw/qa/core/text/text.cxx b/sw/qa/core/text/text.cxx
index 73d212935f01..0e4b2b56f13b 100644
--- a/sw/qa/core/text/text.cxx
+++ b/sw/qa/core/text/text.cxx
@@ -20,6 +20,7 @@
#include <vcl/gdimtf.hxx>
#include <vcl/metaact.hxx>
#include <vcl/filter/PDFiumLibrary.hxx>
+#include <vcl/filter/pdfdocument.hxx>
#include <comphelper/propertyvalue.hxx>
#include <editeng/fhgtitem.hxx>
#include <editeng/wghtitem.hxx>
@@ -115,6 +116,40 @@ CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testLastBibliographyPdfExport)
CPPUNIT_ASSERT(true);
}
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testTdf159336)
+{
+ createSwDoc("tdf159336.odt");
+ save("writer_pdf_Export");
+
+ vcl::filter::PDFDocument aDocument;
+ SvFileStream aStream(maTempFile.GetURL(), StreamMode::READ);
+ CPPUNIT_ASSERT(aDocument.Read(aStream));
+
+ // The document has one page.
+ std::vector<vcl::filter::PDFObjectElement*> aPages = aDocument.GetPages();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aPages.size());
+
+ auto pAnnots = dynamic_cast<vcl::filter::PDFArrayElement*>(aPages[0]->Lookup("Annots"));
+ CPPUNIT_ASSERT(pAnnots);
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pAnnots->GetElements().size());
+ auto pAnnotReference
+ = dynamic_cast<vcl::filter::PDFReferenceElement*>(pAnnots->GetElements()[0]);
+ CPPUNIT_ASSERT(pAnnotReference);
+ vcl::filter::PDFObjectElement* pAnnot = pAnnotReference->LookupObject();
+ CPPUNIT_ASSERT(pAnnot);
+ CPPUNIT_ASSERT_EQUAL(
+ OString("Annot"),
+ static_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Type"))->GetValue());
+ CPPUNIT_ASSERT_EQUAL(
+ OString("Widget"),
+ static_cast<vcl::filter::PDFNameElement*>(pAnnot->Lookup("Subtype"))->GetValue());
+ // Ff = multiline
+ auto pFf = dynamic_cast<vcl::filter::PDFNumberElement*>(pAnnot->Lookup("Ff"));
+ CPPUNIT_ASSERT(pFf);
+ CPPUNIT_ASSERT_EQUAL(4096.0, pFf->GetValue());
+}
+
CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testBibliographyUrlPdfExport)
{
// Given a document with a bibliography entry field:
diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx
index e88e679e1d5b..b46505e226c2 100644
--- a/sw/source/core/text/itrform2.cxx
+++ b/sw/source/core/text/itrform2.cxx
@@ -1009,6 +1009,8 @@ bool SwContentControlPortion::DescribePDFControl(const SwTextPaintInfo& rInf) co
case SwContentControlType::PLAIN_TEXT:
{
pDescriptor = std::make_unique<vcl::PDFWriter::EditWidget>();
+ auto pEditWidget = static_cast<vcl::PDFWriter::EditWidget*>(pDescriptor.get());
+ pEditWidget->MultiLine = true;
break;
}
case SwContentControlType::CHECKBOX: