diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2022-01-20 10:03:20 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2022-01-20 10:52:24 +0100 |
commit | 31bbaf478783e3a2c21bd3ea94ddf39299a63d1e (patch) | |
tree | b655ec9d425b7c7f44a6e681321670616b4412e9 /vcl | |
parent | 972aa39fb976e30ce73065b1eba69f4c78c17855 (diff) |
tdf#141340 PDF export: fix hyperlinks on the wrong page with page num range
Regression from commit 01dbb38680aa39a4d3bc7afd05d44a4b2c9bc6ab
(tdf#61274 sd PDF export: fix links ending up on wrong pages with hidden
slides, 2020-03-10), the problem was that the sd/ code that mapped page
numbers between the model and the PDF output only handled hidden slides,
but not partial exports.
Fix this by revisiting the decision to handle hidden slides in sd/, the
filter/ code at the end does have enough information to correctly do
this mapping at the end, and this way both tdf#61274 and tdf#141340 can
work at the same time.
Change-Id: I5679743ca67fab562e14c73e32f1a06ead8e7a31
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128643
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/qa/cppunit/pdfexport/data/link-wrong-page-partial.odg | bin | 0 -> 11175 bytes | |||
-rw-r--r-- | vcl/qa/cppunit/pdfexport/pdfexport.cxx | 26 |
2 files changed, 26 insertions, 0 deletions
diff --git a/vcl/qa/cppunit/pdfexport/data/link-wrong-page-partial.odg b/vcl/qa/cppunit/pdfexport/data/link-wrong-page-partial.odg Binary files differnew file mode 100644 index 000000000000..1fad913e0493 --- /dev/null +++ b/vcl/qa/cppunit/pdfexport/data/link-wrong-page-partial.odg diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx b/vcl/qa/cppunit/pdfexport/pdfexport.cxx index 386a85eefe21..88b2a135a633 100644 --- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx +++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx @@ -43,6 +43,7 @@ #include <unotools/streamwrap.hxx> #include <vcl/filter/PDFiumLibrary.hxx> +#include <comphelper/propertyvalue.hxx> using namespace ::com::sun::star; @@ -1980,6 +1981,31 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, testLinkWrongPage) CPPUNIT_ASSERT(!pPdfPage2->hasLinks()); } +CPPUNIT_TEST_FIXTURE(PdfExportTest, testLinkWrongPagePartial) +{ + // Given a Draw document with 3 pages, a link on the 2nd page: + // When exporting that the 2nd and 3rd page to pdf: + uno::Sequence<beans::PropertyValue> aFilterData = { + comphelper::makePropertyValue("PageRange", OUString("2-3")), + }; + aMediaDescriptor["FilterName"] <<= OUString("draw_pdf_Export"); + aMediaDescriptor["FilterData"] <<= aFilterData; + saveAsPDF(u"link-wrong-page-partial.odg"); + + // Then make sure the we have a link on the 1st page, but not on the 2nd one: + std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parseExport(); + CPPUNIT_ASSERT(pPdfDocument); + CPPUNIT_ASSERT_EQUAL(2, pPdfDocument->getPageCount()); + std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = pPdfDocument->openPage(/*nIndex=*/0); + CPPUNIT_ASSERT(pPdfPage); + // Without the accompanying fix in place, this test would have failed, as the link was on the + // 2nd page instead. + CPPUNIT_ASSERT(pPdfPage->hasLinks()); + std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage2 = pPdfDocument->openPage(/*nIndex=*/1); + CPPUNIT_ASSERT(pPdfPage2); + CPPUNIT_ASSERT(!pPdfPage2->hasLinks()); +} + CPPUNIT_TEST_FIXTURE(PdfExportTest, testLargePage) { // Import the bugdoc and export as PDF. |