From 625fc73a5784fc5dec06df579a9951908f52a783 Mon Sep 17 00:00:00 2001 From: Aron Budea Date: Wed, 23 Jul 2025 06:01:36 +0200 Subject: [PATCH] tdf#167659 Allow hiding tracked changes in PDF export from command line PDFs exported from Writer show/don't show tracked changes based on what's set on the UI. During command line conversion, there was no way to change this setting. Introduce a new option 'ExportTrackedChanges' to be only used during command line conversion as a --convert-to parameter, eg.: 'pdf:writer_pdf_Export:{"ExportTrackedChanges": {"type":"boolean","value":"false"}}' Change-Id: I763393ee4305415b714662decf23e0e8f8e75662 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188194 Reviewed-by: Mike Kaganski Tested-by: Jenkins --- filter/source/pdf/pdfexport.cxx | 37 ++++++++++++++++++++ sw/source/uibase/uno/unotxvw.cxx | 21 +++++++++++ vcl/qa/cppunit/pdfexport/data/tdf167659.odt | Bin 0 -> 9366 bytes vcl/qa/cppunit/pdfexport/pdfexport.cxx | 24 +++++++++++++ 4 files changed, 82 insertions(+) create mode 100644 vcl/qa/cppunit/pdfexport/data/tdf167659.odt diff --git a/filter/source/pdf/pdfexport.cxx b/filter/source/pdf/pdfexport.cxx index 8b50dc1bbe45..4f7d9f740563 100644 --- a/filter/source/pdf/pdfexport.cxx +++ b/filter/source/pdf/pdfexport.cxx @@ -68,6 +68,7 @@ #include #include +#include #include #include @@ -406,6 +407,7 @@ bool PDFExport::Export( const OUString& rFile, const Sequence< PropertyValue >& bool bUseTaggedPDF = false; sal_Int32 nPDFTypeSelection = 0; bool bPDFUACompliance = false; + std::optional bExportTrackedChanges; bool bExportNotes = true; bool bExportNotesInMargin = false; bool bExportNotesPages = false; @@ -561,6 +563,12 @@ bool PDFExport::Export( const OUString& rFile, const Sequence< PropertyValue >& rProp.Value >>= nPDFTypeSelection; else if ( rProp.Name == "PDFUACompliance" ) rProp.Value >>= bPDFUACompliance; + else if (rProp.Name == "ExportTrackedChanges") + { + bool bExportTrackedChangesProp = false; + if (rProp.Value >>= bExportTrackedChangesProp) + bExportTrackedChanges = bExportTrackedChangesProp; + } else if ( rProp.Name == "ExportNotes" ) rProp.Value >>= bExportNotes; else if ( rProp.Name == "ExportNotesInMargin" ) @@ -1094,6 +1102,11 @@ bool PDFExport::Export( const OUString& rFile, const Sequence< PropertyValue >& bool bReHideWhitespace = false; static constexpr OUString sHideWhitespace(u"HideWhitespace"_ustr); uno::Reference< beans::XPropertySet > xViewProperties; + uno::Reference xPropSet; + // property only exists and handled in SwXTextView for the purpose of + // exporting showing tracked changes to PDF from command line + static constexpr OUString sShowChangesPDF(u"PDFExport_ShowChanges"_ustr); + bool bToggleChangesPDF = false; if ( aCreator == "Writer" ) { @@ -1114,6 +1127,20 @@ bool PDFExport::Export( const OUString& rFile, const Sequence< PropertyValue >& { xViewProperties->setPropertyValue(sHideWhitespace, uno::Any(false)); } + + if (bExportTrackedChanges.has_value()) + { + xPropSet = uno::Reference(xModel->getCurrentController(), + uno::UNO_QUERY_THROW); + bool bShowChangesPDF = false; + xPropSet->getPropertyValue(sShowChangesPDF) >>= bShowChangesPDF; + if (bShowChangesPDF != bExportTrackedChanges) + { + xPropSet->setPropertyValue(sShowChangesPDF, + Any(bExportTrackedChanges.value())); + bToggleChangesPDF = true; + } + } } catch( const uno::Exception& ) { @@ -1192,6 +1219,16 @@ bool PDFExport::Export( const OUString& rFile, const Sequence< PropertyValue >& { } } + if (bToggleChangesPDF) + { + try + { + xPropSet->setPropertyValue(sShowChangesPDF, Any(!bExportTrackedChanges.value())); + } + catch (const uno::Exception&) + { + } + } } } } diff --git a/sw/source/uibase/uno/unotxvw.cxx b/sw/source/uibase/uno/unotxvw.cxx index 894da6ed74a9..ee6211e447ca 100644 --- a/sw/source/uibase/uno/unotxvw.cxx +++ b/sw/source/uibase/uno/unotxvw.cxx @@ -671,6 +671,20 @@ void SAL_CALL SwXTextView::setPropertyValue( const OUString& rPropertyName, const uno::Any& rValue ) { SolarMutexGuard aGuard; + + if (rPropertyName == "PDFExport_ShowChanges") + { + // hack used in PDF export code to turn off (or on) exporting showing tracked changes + // logic is simplified from FN_REDLINE_SHOW path in SwView + bool bShow = false; + rValue >>= bShow; + SwWrtShell& rSh = m_pView->GetWrtShell(); + rSh.StartAllAction(); + rSh.GetLayout()->SetHideRedlines(!bShow); + rSh.EndAllAction(); + return; + } + const SfxItemPropertyMapEntry* pEntry = m_pPropSet->getPropertyMap().getByName( rPropertyName ); if (!pEntry) throw UnknownPropertyException(rPropertyName); @@ -708,6 +722,13 @@ uno::Any SAL_CALL SwXTextView::getPropertyValue( Any aRet; + if (rPropertyName == "PDFExport_ShowChanges") + { + const bool bShow = !m_pView->GetWrtShell().GetLayout()->IsHideRedlines(); + aRet <<= bShow; + return aRet; + } + const SfxItemPropertyMapEntry* pEntry = m_pPropSet->getPropertyMap().getByName( rPropertyName ); if (!pEntry) throw UnknownPropertyException(rPropertyName); diff --git a/vcl/qa/cppunit/pdfexport/data/tdf167659.odt b/vcl/qa/cppunit/pdfexport/data/tdf167659.odt new file mode 100644 index 0000000000000000000000000000000000000000..1337275095fa90795e86ebca0ab9e43f50777452 GIT binary patch literal 9366 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 Z94l1?l!w6bA((jhksty9X3u{9`!7XjR@49h literal 0 HcmV?d00001 diff --git a/vcl/qa/cppunit/pdfexport/pdfexport.cxx b/vcl/qa/cppunit/pdfexport/pdfexport.cxx index 5024de86b201..b2723fc174c7 100644 --- a/vcl/qa/cppunit/pdfexport/pdfexport.cxx +++ b/vcl/qa/cppunit/pdfexport/pdfexport.cxx @@ -3627,6 +3627,30 @@ CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf115967) CPPUNIT_ASSERT_EQUAL(u"m=750abc"_ustr, sText); } +CPPUNIT_TEST_FIXTURE(PdfExportTest, testTdf167659) +{ + // Don't export showing tracked changes to PDF + uno::Sequence aFilterData( + comphelper::InitPropertySequence({ { "ExportTrackedChanges", uno::Any(false) } })); + aMediaDescriptor[u"FilterData"_ustr] <<= aFilterData; + saveAsPDF(u"tdf167659.odt"); + + // Parse the export result with pdfium. + std::unique_ptr pPdfDocument = parsePDFExport(); + std::unique_ptr pPdfPage = pPdfDocument->openPage(0); + CPPUNIT_ASSERT(pPdfPage); + std::unique_ptr pPdfTextPage = pPdfPage->getTextPage(); + CPPUNIT_ASSERT(pPdfTextPage); + + const int nChars = pPdfTextPage->countChars(); + std::vector aChars(nChars); + for (int i = 0; i < nChars; i++) + aChars[i] = pPdfTextPage->getUnicode(i); + OUString aActualText(aChars.data(), aChars.size()); + // Without the change, this also includes tracked deleted text from the document + CPPUNIT_ASSERT_EQUAL(u"normal text"_ustr, aActualText); +} + } // end anonymous namespace CPPUNIT_PLUGIN_IMPLEMENT();