1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include "impdialog.hxx"
21 #include <strings.hrc>
22 #include <officecfg/Office/Common.hxx>
23 #include <vcl/errinf.hxx>
24 #include <vcl/svapp.hxx>
25 #include <vcl/weld.hxx>
26 #include <sfx2/passwd.hxx>
27 #include <comphelper/diagnose_ex.hxx>
28 #include <sfx2/objsh.hxx>
29 #include <svl/stritem.hxx>
30 #include <sfx2/dispatch.hxx>
31 #include <sfx2/sfxsids.hrc>
33 #include <comphelper/lok.hxx>
34 #include <comphelper/propertyvalue.hxx>
35 #include <comphelper/sequence.hxx>
36 #include <comphelper/storagehelper.hxx>
38 #include <com/sun/star/text/XTextRange.hpp>
39 #include <com/sun/star/drawing/XShapes.hpp>
40 #include <com/sun/star/container/XIndexAccess.hpp>
41 #include <com/sun/star/frame/XController.hpp>
42 #include <com/sun/star/view/XSelectionSupplier.hpp>
43 #include <com/sun/star/security/DocumentDigitalSignatures.hpp>
44 #include <com/sun/star/beans/XMaterialHolder.hpp>
45 #include <com/sun/star/lang/XServiceInfo.hpp>
47 using namespace ::com::sun::star
;
48 using namespace ::com::sun::star::uno
;
50 /** Tabbed PDF dialog implementation
51 Please note: the default used here are the same as per specification,
52 They should be the same in PDFFilter::implExport and in PDFExport::PDFExport
54 ImpPDFTabDialog::ImpPDFTabDialog(weld::Window
* pParent
, const Sequence
< PropertyValue
>& rFilterData
,
55 const Reference
< XComponent
>& rxDoc
)
56 : SfxTabDialogController(pParent
, "filter/ui/pdfoptionsdialog.ui", "PdfOptionsDialog"),
58 maConfigItem( u
"Office.Common/Filter/PDF/Export/", &rFilterData
),
59 maConfigI18N( u
"Office.Common/I18N/CTL/" ),
60 mbIsPresentation( false ),
61 mbIsSpreadsheet( false ),
64 mbSelectionPresent( false ),
65 mbUseCTLFont( false ),
66 mbUseLosslessCompression( true ),
68 mbReduceImageResolution( false ),
69 mnMaxImageResolution( 300 ),
70 mbUseTaggedPDF( false ),
71 mbUseTaggedPDFUserSelection( false ),
72 mbExportNotes( true ),
73 mbExportNotesInMargin( false ),
75 mbUseReferenceXObject( false ),
76 mbExportNotesPages( false ),
77 mbExportOnlyNotesPages( false ),
78 mbUseTransitionEffects( false ),
79 mbIsSkipEmptyPages( true ),
80 mbIsExportPlaceholders( false ),
83 mbExportFormFields( true ),
84 mbAllowDuplicateFieldNames( false ),
85 mbExportBookmarks( true ),
86 mbExportHiddenSlides ( false ),
87 mbSinglePageSheets ( false ),
88 mnOpenBookmarkLevels( -1 ),
90 mbHideViewerToolbar( false ),
91 mbHideViewerMenubar( false ),
92 mbHideViewerWindowControls( false ),
93 mbResizeWinToInit( false ),
94 mbCenterWindow( false ),
95 mbOpenInFullScreenMode( false ),
96 mbDisplayPDFDocumentTitle( false ),
102 mbFirstPageLeft( false ),
105 mbRestrictPermissions( false ),
107 mnChangesAllowed( 0 ),
108 mbCanCopyOrExtract( false ),
109 mbCanExtractForAccessibility( true ),
111 mbIsRangeChecked( false ),
114 mbSelectionIsChecked( false ),
115 mbExportRelativeFsysLinks( false ),
117 mbConvertOOoTargets( false ),
118 mbExportBmkToPDFDestination( false ),
122 // check for selection
125 Reference
< frame::XController
> xController( Reference
< frame::XModel
>( rxDoc
, UNO_QUERY_THROW
)->getCurrentController() );
126 if( xController
.is() )
128 Reference
< view::XSelectionSupplier
> xView( xController
, UNO_QUERY
);
130 maSelection
= xView
->getSelection();
133 catch(const RuntimeException
&)
136 mbSelectionPresent
= maSelection
.hasValue();
137 if ( mbSelectionPresent
)
139 Reference
< drawing::XShapes
> xShapes
;
140 if ( !( maSelection
>>= xShapes
) ) // XShapes is always a selection
142 // even if nothing is selected in writer the selection is not empty
143 Reference
< container::XIndexAccess
> xIndexAccess
;
144 if ( maSelection
>>= xIndexAccess
)
146 sal_Int32 nLen
= xIndexAccess
->getCount();
148 mbSelectionPresent
= false;
149 else if ( nLen
== 1 )
151 Reference
< text::XTextRange
> xTextRange( xIndexAccess
->getByIndex( 0 ), UNO_QUERY
);
152 if ( xTextRange
.is() && ( xTextRange
->getString().isEmpty() ) )
153 mbSelectionPresent
= false;
159 // check if source document is a presentation or a spreadsheet or a textdocument
162 Reference
< XServiceInfo
> xInfo( rxDoc
, UNO_QUERY
);
165 if ( xInfo
->supportsService( "com.sun.star.presentation.PresentationDocument" ) )
166 mbIsPresentation
= true;
167 if ( xInfo
->supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) )
168 mbIsSpreadsheet
= true;
169 if ( xInfo
->supportsService( "com.sun.star.text.GenericTextDocument" ) )
173 catch(const RuntimeException
&)
177 // get the CTL (Complex Text Layout) from general options, returns sal_True if we have a CTL font on our hands.
178 mbUseCTLFont
= maConfigI18N
.ReadBool( "CTLFont", false );
180 mbUseLosslessCompression
= maConfigItem
.ReadBool( "UseLosslessCompression", false );
181 mnQuality
= maConfigItem
.ReadInt32( "Quality", 90 );
182 mbReduceImageResolution
= maConfigItem
.ReadBool( "ReduceImageResolution", false );
183 mnMaxImageResolution
= maConfigItem
.ReadInt32( "MaxImageResolution", 300 );
185 // this is always the user selection, independent from the PDF/A forced selection
186 mbUseTaggedPDF
= maConfigItem
.ReadBool( "UseTaggedPDF", false );
187 mbUseTaggedPDFUserSelection
= mbUseTaggedPDF
;
189 mnPDFTypeSelection
= maConfigItem
.ReadInt32( "SelectPdfVersion", 0 );
190 mbPDFUACompliance
= maConfigItem
.ReadBool("PDFUACompliance", false);
192 if ( mbIsPresentation
)
194 mbExportNotesPages
= maConfigItem
.ReadBool( "ExportNotesPages", false );
195 mbExportOnlyNotesPages
= maConfigItem
.ReadBool( "ExportOnlyNotesPages", false );
197 mbExportNotes
= maConfigItem
.ReadBool( "ExportNotes", false );
199 mbExportNotesInMargin
= maConfigItem
.ReadBool( "ExportNotesInMargin", false );
200 mbViewPDF
= maConfigItem
.ReadBool( "ViewPDFAfterExport", false );
202 mbExportBookmarks
= maConfigItem
.ReadBool( "ExportBookmarks", true );
203 mbExportBookmarksUserSelection
= mbExportBookmarks
;
204 if ( mbIsPresentation
)
205 mbExportHiddenSlides
= maConfigItem
.ReadBool( "ExportHiddenSlides", false );
206 if ( mbIsSpreadsheet
)
207 mbSinglePageSheets
= maConfigItem
.ReadBool( "SinglePageSheets", false );
208 mnOpenBookmarkLevels
= maConfigItem
.ReadInt32( "OpenBookmarkLevels", -1 );
209 mbUseTransitionEffects
= maConfigItem
.ReadBool( "UseTransitionEffects", true );
210 mbIsSkipEmptyPages
= maConfigItem
.ReadBool( "IsSkipEmptyPages", false );
211 mbIsExportPlaceholders
= maConfigItem
.ReadBool( "ExportPlaceholders", false );
212 mbAddStream
= maConfigItem
.ReadBool( "IsAddStream", false );
214 mbExportFormFields
= maConfigItem
.ReadBool( "ExportFormFields", true );
215 mnFormsType
= maConfigItem
.ReadInt32( "FormsType", 0 );
216 if ( ( mnFormsType
< 0 ) || ( mnFormsType
> 3 ) )
218 mbAllowDuplicateFieldNames
= maConfigItem
.ReadBool( "AllowDuplicateFieldNames", false );
220 // prepare values for the Viewer tab page
221 mbHideViewerToolbar
= maConfigItem
.ReadBool( "HideViewerToolbar", false );
222 mbHideViewerMenubar
= maConfigItem
.ReadBool( "HideViewerMenubar", false );
223 mbHideViewerWindowControls
= maConfigItem
.ReadBool( "HideViewerWindowControls", false );
224 mbResizeWinToInit
= maConfigItem
.ReadBool( "ResizeWindowToInitialPage", false );
225 mbCenterWindow
= maConfigItem
.ReadBool( "CenterWindow", false );
226 mbOpenInFullScreenMode
= maConfigItem
.ReadBool( "OpenInFullScreenMode", false );
227 mbDisplayPDFDocumentTitle
= maConfigItem
.ReadBool( "DisplayPDFDocumentTitle", true );
229 mnInitialView
= maConfigItem
.ReadInt32( "InitialView", 0 );
230 mnInitialViewUserSelection
= mnInitialView
;
231 mnMagnification
= maConfigItem
.ReadInt32( "Magnification", 0 );
232 mnZoom
= maConfigItem
.ReadInt32( "Zoom", 100 );
233 mnPageLayout
= maConfigItem
.ReadInt32( "PageLayout", 0 );
234 mbFirstPageLeft
= maConfigItem
.ReadBool( "FirstPageOnLeft", false );
235 mnInitialPage
= maConfigItem
.ReadInt32( "InitialPage", 1 );
236 if( mnInitialPage
< 1 )
239 // prepare values for the security tab page
240 mnPrint
= maConfigItem
.ReadInt32( "Printing", 2 );
241 mnChangesAllowed
= maConfigItem
.ReadInt32( "Changes", 4 );
242 mbCanCopyOrExtract
= maConfigItem
.ReadBool( "EnableCopyingOfContent", true );
243 mbCanExtractForAccessibility
= maConfigItem
.ReadBool( "EnableTextAccessForAccessibilityTools", true );
245 // prepare values for relative links
246 mbExportRelativeFsysLinks
= maConfigItem
.ReadBool( "ExportLinksRelativeFsys", false );
248 mnViewPDFMode
= maConfigItem
.ReadInt32( "PDFViewSelection", 0 );
250 mbConvertOOoTargets
= maConfigItem
.ReadBool( "ConvertOOoTargetToPDFTarget", false );
251 mbExportBmkToPDFDestination
= maConfigItem
.ReadBool( "ExportBookmarksToPDFDestination", false );
253 // prepare values for digital signatures
254 mbSignPDF
= maConfigItem
.ReadBool( "SignPDF", false );
256 // queue the tab pages for later creation (created when first shown)
257 AddTabPage("general", ImpPDFTabGeneralPage::Create
, nullptr );
258 if (comphelper::LibreOfficeKit::isActive())
259 m_xTabCtrl
->remove_page("digitalsignatures");
261 AddTabPage("digitalsignatures", ImpPDFTabSigningPage::Create
, nullptr);
262 AddTabPage("security", ImpPDFTabSecurityPage::Create
, nullptr);
263 AddTabPage("links", ImpPDFTabLinksPage::Create
, nullptr);
264 AddTabPage("userinterface", ImpPDFTabViewerPage::Create
, nullptr);
265 AddTabPage("initialview", ImpPDFTabOpnFtrPage::Create
, nullptr);
267 SetCurPageId("general");
269 // get the string property value (from sfx2/source/dialog/mailmodel.cxx) to overwrite the text for the Ok button
270 OUString sOkButtonText
= maConfigItem
.ReadString( "_OkButtonString", OUString() );
272 // change text on the Ok button: get the relevant string from resources, update it on the button
273 // according to the exported pdf file destination: send as e-mail or write to file?
274 if (!sOkButtonText
.isEmpty())
275 GetOKButton().set_label(sOkButtonText
);
277 GetCancelButton().connect_clicked(LINK(this, ImpPDFTabDialog
, CancelHdl
));
278 GetOKButton().connect_clicked(LINK(this, ImpPDFTabDialog
, OkHdl
));
280 // remove the reset button, not needed in this tabbed dialog
284 ImpPDFTabSecurityPage
* ImpPDFTabDialog::getSecurityPage() const
286 SfxTabPage
* pSecurityPage
= GetTabPage(u
"security");
289 return static_cast<ImpPDFTabSecurityPage
*>(pSecurityPage
);
294 ImpPDFTabOpnFtrPage
* ImpPDFTabDialog::getOpenPage() const
296 SfxTabPage
* pOpenPage
= GetTabPage(u
"initialview");
299 return static_cast<ImpPDFTabOpnFtrPage
*>(pOpenPage
);
304 ImpPDFTabLinksPage
* ImpPDFTabDialog::getLinksPage() const
306 SfxTabPage
* pLinksPage
= GetTabPage(u
"links");
309 return static_cast<ImpPDFTabLinksPage
*>(pLinksPage
);
315 ImpPDFTabGeneralPage
* ImpPDFTabDialog::getGeneralPage() const
317 SfxTabPage
* pGeneralPage
= GetTabPage(u
"general");
320 return static_cast<ImpPDFTabGeneralPage
*>(pGeneralPage
);
325 IMPL_LINK_NOARG(ImpPDFTabDialog
, CancelHdl
, weld::Button
&, void)
327 m_xDialog
->response(RET_CANCEL
);
330 IMPL_LINK_NOARG(ImpPDFTabDialog
, OkHdl
, weld::Button
&, void)
332 if (getGeneralPage()->IsPdfUaSelected())
334 SfxObjectShell
* pShell
= SfxObjectShell::GetShellFromComponent(mrDoc
);
337 sfx::AccessibilityIssueCollection aCollection
= pShell
->runAccessibilityCheck();
338 auto aIssues
= aCollection
.getIssues();
339 int nIssueCount(aIssues
.size());
340 if (!aIssues
.empty())
342 OUString
aMessage(FilterResId(STR_WARN_PDFUA_ISSUES
, nIssueCount
));
343 aMessage
= aMessage
.replaceFirst("%1", OUString::number(nIssueCount
));
345 std::unique_ptr
<weld::MessageDialog
> xPDFUADialog(Application::CreateMessageDialog(
346 getGeneralPage()->GetFrameWeld(), VclMessageType::Warning
,
347 VclButtonsType::Cancel
, aMessage
));
348 xPDFUADialog
->add_button(FilterResId(STR_PDFUA_INVESTIGATE
, nIssueCount
), RET_NO
);
349 xPDFUADialog
->add_button(FilterResId(STR_PDFUA_IGNORE
), RET_YES
);
350 xPDFUADialog
->set_default_response(RET_YES
);
352 int ret
= xPDFUADialog
->run();
354 m_xDialog
->response(RET_OK
);
355 else if (ret
== RET_NO
)
357 m_xDialog
->response(RET_CANCEL
);
358 // Show accessibility check Sidebar deck
359 SfxDispatcher
* pDispatcher
= pShell
->GetDispatcher();
362 const SfxStringItem
sDeckName(SID_SIDEBAR_DECK
, "A11yCheckDeck");
363 pDispatcher
->ExecuteList(SID_SIDEBAR_DECK
, SfxCallMode::RECORD
,
370 m_xDialog
->response(RET_OK
);
375 m_xDialog
->response(RET_OK
);
380 m_xDialog
->response(RET_OK
);
384 ImpPDFTabDialog::~ImpPDFTabDialog()
386 maConfigItem
.WriteModifiedConfig();
387 maConfigI18N
.WriteModifiedConfig();
390 void ImpPDFTabDialog::PageCreated(const OUString
& rId
, SfxTabPage
& rPage
)
392 if (rId
== "general")
393 static_cast<ImpPDFTabGeneralPage
&>(rPage
).SetFilterConfigItem(this);
394 else if (rId
== "userinterface")
396 static_cast<ImpPDFTabViewerPage
&>(rPage
).SetFilterConfigItem(this);
398 else if (rId
== "initialview")
400 static_cast<ImpPDFTabOpnFtrPage
&>(rPage
).SetFilterConfigItem(this);
402 else if (rId
== "links")
404 static_cast<ImpPDFTabLinksPage
&>(rPage
).SetFilterConfigItem(this);
406 else if (rId
== "security")
408 static_cast<ImpPDFTabSecurityPage
&>(rPage
).SetFilterConfigItem(this);
410 else if (rId
== "digitalsignatures")
412 static_cast<ImpPDFTabSigningPage
&>(rPage
).SetFilterConfigItem(this);
417 Sequence
< PropertyValue
> ImpPDFTabDialog::GetFilterData()
419 // updating the FilterData sequence and storing FilterData to configuration
420 if (ImpPDFTabGeneralPage
* pPage
= static_cast<ImpPDFTabGeneralPage
*>(GetTabPage(u
"general")))
421 pPage
->GetFilterConfigItem(this);
422 if (ImpPDFTabViewerPage
* pPage
= static_cast<ImpPDFTabViewerPage
*>(GetTabPage(u
"userinterface")))
423 pPage
->GetFilterConfigItem(this);
424 if (ImpPDFTabOpnFtrPage
* pPage
= static_cast<ImpPDFTabOpnFtrPage
*>(GetTabPage(u
"initialview")))
425 pPage
->GetFilterConfigItem(this);
426 if (ImpPDFTabLinksPage
* pPage
= static_cast<ImpPDFTabLinksPage
*>(GetTabPage(u
"links")))
427 pPage
->GetFilterConfigItem(this);
428 if (ImpPDFTabSecurityPage
* pPage
= static_cast<ImpPDFTabSecurityPage
*>( GetTabPage(u
"security")))
429 pPage
->GetFilterConfigItem(this);
430 if (ImpPDFTabSigningPage
* pPage
= static_cast<ImpPDFTabSigningPage
*>(GetTabPage(u
"digitalsignatures")))
431 pPage
->GetFilterConfigItem(this);
433 // prepare the items to be returned
434 maConfigItem
.WriteBool( "UseLosslessCompression", mbUseLosslessCompression
);
435 maConfigItem
.WriteInt32("Quality", mnQuality
);
436 maConfigItem
.WriteBool( "ReduceImageResolution", mbReduceImageResolution
);
437 maConfigItem
.WriteInt32("MaxImageResolution", mnMaxImageResolution
);
439 // always write the user selection, never the overridden value
440 const bool bIsPDFUA
= mbPDFUACompliance
;
441 const bool bIsPDFA
= (1 == mnPDFTypeSelection
) || (2 == mnPDFTypeSelection
) || (3 == mnPDFTypeSelection
);
442 const bool bUserSelectionTags
= bIsPDFA
|| bIsPDFUA
;
443 maConfigItem
.WriteBool("UseTaggedPDF", bUserSelectionTags
? mbUseTaggedPDFUserSelection
: mbUseTaggedPDF
);
444 maConfigItem
.WriteInt32("SelectPdfVersion", mnPDFTypeSelection
);
445 maConfigItem
.WriteBool("PDFUACompliance", mbPDFUACompliance
);
447 if ( mbIsPresentation
)
449 maConfigItem
.WriteBool( "ExportNotesPages", mbExportNotesPages
);
450 maConfigItem
.WriteBool( "ExportOnlyNotesPages", mbExportOnlyNotesPages
);
452 maConfigItem
.WriteBool( "ExportNotes", mbExportNotes
);
454 maConfigItem
.WriteBool( "ExportNotesInMargin", mbExportNotesInMargin
);
455 maConfigItem
.WriteBool( "ViewPDFAfterExport", mbViewPDF
);
457 maConfigItem
.WriteBool( "ExportBookmarks", mbExportBookmarks
);
458 if ( mbIsPresentation
)
459 maConfigItem
.WriteBool( "ExportHiddenSlides", mbExportHiddenSlides
);
460 if ( mbIsSpreadsheet
)
461 maConfigItem
.WriteBool( "SinglePageSheets", mbSinglePageSheets
);
462 maConfigItem
.WriteBool( "UseTransitionEffects", mbUseTransitionEffects
);
463 maConfigItem
.WriteBool( "IsSkipEmptyPages", mbIsSkipEmptyPages
);
464 maConfigItem
.WriteBool( "ExportPlaceholders", mbIsExportPlaceholders
);
465 maConfigItem
.WriteBool( "IsAddStream", mbAddStream
);
468 * FIXME: the entries are only implicitly defined by the resource file. Should there
469 * ever be an additional form submit format this could get invalid.
471 maConfigItem
.WriteInt32( "FormsType", mnFormsType
);
472 maConfigItem
.WriteBool( "ExportFormFields", mbExportFormFields
);
473 maConfigItem
.WriteBool( "AllowDuplicateFieldNames", mbAllowDuplicateFieldNames
);
475 maConfigItem
.WriteBool( "HideViewerToolbar", mbHideViewerToolbar
);
476 maConfigItem
.WriteBool( "HideViewerMenubar", mbHideViewerMenubar
);
477 maConfigItem
.WriteBool( "HideViewerWindowControls", mbHideViewerWindowControls
);
478 maConfigItem
.WriteBool( "ResizeWindowToInitialPage", mbResizeWinToInit
);
479 maConfigItem
.WriteBool( "CenterWindow", mbCenterWindow
);
480 maConfigItem
.WriteBool( "OpenInFullScreenMode", mbOpenInFullScreenMode
);
481 maConfigItem
.WriteBool( "DisplayPDFDocumentTitle", mbDisplayPDFDocumentTitle
);
482 maConfigItem
.WriteInt32( "InitialView", mnInitialView
);
483 maConfigItem
.WriteInt32( "Magnification", mnMagnification
);
484 maConfigItem
.WriteInt32( "Zoom", mnZoom
);
485 maConfigItem
.WriteInt32( "InitialPage", mnInitialPage
);
486 maConfigItem
.WriteInt32( "PageLayout", mnPageLayout
);
487 maConfigItem
.WriteBool( "FirstPageOnLeft", mbFirstPageLeft
);
488 maConfigItem
.WriteInt32( "OpenBookmarkLevels", mnOpenBookmarkLevels
);
490 maConfigItem
.WriteBool( "ExportLinksRelativeFsys", mbExportRelativeFsysLinks
);
491 maConfigItem
.WriteInt32("PDFViewSelection", mnViewPDFMode
);
492 maConfigItem
.WriteBool( "ConvertOOoTargetToPDFTarget", mbConvertOOoTargets
);
493 maConfigItem
.WriteBool( "ExportBookmarksToPDFDestination", mbExportBmkToPDFDestination
);
495 maConfigItem
.WriteBool( "SignPDF", mbSignPDF
);
497 maConfigItem
.WriteInt32( "Printing", mnPrint
);
498 maConfigItem
.WriteInt32( "Changes", mnChangesAllowed
);
499 maConfigItem
.WriteBool( "EnableCopyingOfContent", mbCanCopyOrExtract
);
500 maConfigItem
.WriteBool( "EnableTextAccessForAccessibilityTools", mbCanExtractForAccessibility
);
502 std::vector
<beans::PropertyValue
> aRet
504 comphelper::makePropertyValue("Watermark", maWatermarkText
),
505 comphelper::makePropertyValue("EncryptFile", mbEncrypt
),
506 comphelper::makePropertyValue("PreparedPasswords", mxPreparedPasswords
),
507 comphelper::makePropertyValue("RestrictPermissions", mbRestrictPermissions
),
508 comphelper::makePropertyValue("PreparedPermissionPassword", maPreparedOwnerPassword
)
510 if( mbIsRangeChecked
)
511 aRet
.push_back(comphelper::makePropertyValue("PageRange", msPageRange
));
512 else if( mbSelectionIsChecked
)
513 aRet
.push_back(comphelper::makePropertyValue("Selection", maSelection
));
515 aRet
.push_back(comphelper::makePropertyValue("SignatureLocation", msSignLocation
));
516 aRet
.push_back(comphelper::makePropertyValue("SignatureReason", msSignReason
));
517 aRet
.push_back(comphelper::makePropertyValue("SignatureContactInfo", msSignContact
));
518 aRet
.push_back(comphelper::makePropertyValue("SignaturePassword", msSignPassword
));
519 aRet
.push_back(comphelper::makePropertyValue("SignatureCertificate", maSignCertificate
));
520 aRet
.push_back(comphelper::makePropertyValue("SignatureTSA", msSignTSA
));
521 aRet
.push_back(comphelper::makePropertyValue("UseReferenceXObject", mbUseReferenceXObject
));
523 return comphelper::concatSequences(maConfigItem
.GetFilterData(), comphelper::containerToSequence(aRet
));
527 ImpPDFTabGeneralPage::ImpPDFTabGeneralPage(weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
& rCoreSet
)
528 : SfxTabPage(pPage
, pController
, "filter/ui/pdfgeneralpage.ui", "PdfGeneralPage", &rCoreSet
)
529 , mbUseTaggedPDFUserSelection(false)
530 , mbIsPresentation(false)
531 , mbIsSpreadsheet(false)
534 , mxRbAll(m_xBuilder
->weld_radio_button("all"))
535 , mxRbRange(m_xBuilder
->weld_radio_button("range"))
536 , mxRbSelection(m_xBuilder
->weld_radio_button("selection"))
537 , mxEdPages(m_xBuilder
->weld_entry("pages"))
538 , mxRbLosslessCompression(m_xBuilder
->weld_radio_button("losslesscompress"))
539 , mxRbJPEGCompression(m_xBuilder
->weld_radio_button("jpegcompress"))
540 , mxQualityFrame(m_xBuilder
->weld_widget("qualityframe"))
541 , mxNfQuality(m_xBuilder
->weld_metric_spin_button("quality", FieldUnit::PERCENT
))
542 , mxCbReduceImageResolution(m_xBuilder
->weld_check_button("reduceresolution"))
543 , mxCoReduceImageResolution(m_xBuilder
->weld_combo_box("resolution"))
544 , mxCbPDFA(m_xBuilder
->weld_check_button("pdfa"))
545 , mxCbPDFUA(m_xBuilder
->weld_check_button("pdfua"))
546 , mxRbPDFAVersion(m_xBuilder
->weld_combo_box("pdfaversion"))
547 , mxCbTaggedPDF(m_xBuilder
->weld_check_button("tagged"))
548 , mxCbExportFormFields(m_xBuilder
->weld_check_button("forms"))
549 , mxFormsFrame(m_xBuilder
->weld_widget("formsframe"))
550 , mxLbFormsFormat(m_xBuilder
->weld_combo_box("format"))
551 , mxCbAllowDuplicateFieldNames(m_xBuilder
->weld_check_button("allowdups"))
552 , mxCbExportBookmarks(m_xBuilder
->weld_check_button("bookmarks"))
553 , mxCbExportHiddenSlides(m_xBuilder
->weld_check_button("hiddenpages"))
554 , mxCbSinglePageSheets(m_xBuilder
->weld_check_button("singlepagesheets"))
555 , mxCbExportNotes(m_xBuilder
->weld_check_button("comments"))
556 , mxCbExportNotesInMargin(m_xBuilder
->weld_check_button("commentsinmargin"))
557 , mxCbViewPDF(m_xBuilder
->weld_check_button("viewpdf"))
558 , mxCbUseReferenceXObject(m_xBuilder
->weld_check_button("usereferencexobject"))
559 , mxCbExportNotesPages(m_xBuilder
->weld_check_button("notes"))
560 , mxCbExportOnlyNotesPages(m_xBuilder
->weld_check_button("onlynotes"))
561 , mxCbExportEmptyPages(m_xBuilder
->weld_check_button("emptypages"))
562 , mxCbExportPlaceholders(m_xBuilder
->weld_check_button("exportplaceholders"))
563 , mxCbAddStream(m_xBuilder
->weld_check_button("embed"))
564 , mxCbWatermark(m_xBuilder
->weld_check_button("watermark"))
565 , mxFtWatermark(m_xBuilder
->weld_label("watermarklabel"))
566 , mxEdWatermark(m_xBuilder
->weld_entry("watermarkentry"))
567 , mxSlidesFt(m_xBuilder
->weld_label("slides"))
568 , mxSheetsFt(m_xBuilder
->weld_label("selectedsheets"))
572 ImpPDFTabGeneralPage::~ImpPDFTabGeneralPage()
574 if (mxPasswordUnusedWarnDialog
)
575 mxPasswordUnusedWarnDialog
->response(RET_CANCEL
);
578 void ImpPDFTabGeneralPage::SetFilterConfigItem(ImpPDFTabDialog
* pParent
)
582 // init this class data
583 mxRbRange
->connect_toggled( LINK( this, ImpPDFTabGeneralPage
, TogglePagesHdl
) );
585 mxRbAll
->set_active(true);
586 mxRbAll
->connect_toggled( LINK( this, ImpPDFTabGeneralPage
, ToggleAllHdl
) );
589 mxRbSelection
->set_sensitive( pParent
->mbSelectionPresent
);
590 if ( pParent
->mbSelectionPresent
)
591 mxRbSelection
->connect_toggled( LINK( this, ImpPDFTabGeneralPage
, ToggleSelectionHdl
) );
592 mbIsPresentation
= pParent
->mbIsPresentation
;
593 mbIsWriter
= pParent
->mbIsWriter
;
594 mbIsSpreadsheet
= pParent
->mbIsSpreadsheet
;
596 mxCbExportNotesInMargin
->set_sensitive( mbIsWriter
);
597 mxCbExportEmptyPages
->set_sensitive( mbIsWriter
);
598 mxCbExportPlaceholders
->set_sensitive( mbIsWriter
);
600 mxRbLosslessCompression
->connect_toggled( LINK( this, ImpPDFTabGeneralPage
, ToggleCompressionHdl
) );
601 const bool bUseLosslessCompression
= pParent
->mbUseLosslessCompression
;
602 if ( bUseLosslessCompression
)
603 mxRbLosslessCompression
->set_active(true);
605 mxRbJPEGCompression
->set_active(true);
607 mxNfQuality
->set_value( pParent
->mnQuality
, FieldUnit::PERCENT
);
608 mxQualityFrame
->set_sensitive(!bUseLosslessCompression
);
610 mxCbReduceImageResolution
->connect_toggled(LINK(this, ImpPDFTabGeneralPage
, ToggleReduceImageResolutionHdl
));
611 const bool bReduceImageResolution
= pParent
->mbReduceImageResolution
;
612 mxCbReduceImageResolution
->set_active( bReduceImageResolution
);
613 OUString aStrRes
= OUString::number( pParent
->mnMaxImageResolution
) + " DPI";
614 mxCoReduceImageResolution
->set_entry_text(aStrRes
);
615 mxCoReduceImageResolution
->set_sensitive( bReduceImageResolution
);
616 mxCbWatermark
->connect_toggled( LINK( this, ImpPDFTabGeneralPage
, ToggleWatermarkHdl
) );
617 mxFtWatermark
->set_sensitive(false );
618 mxEdWatermark
->set_sensitive( false );
619 mxCbPDFA
->connect_toggled(LINK(this, ImpPDFTabGeneralPage
, TogglePDFVersionOrUniversalAccessibilityHandle
));
621 const bool bIsPDFA
= (pParent
->mnPDFTypeSelection
>=1) && (pParent
->mnPDFTypeSelection
<= 3);
622 mxCbPDFA
->set_active(bIsPDFA
);
623 switch( pParent
->mnPDFTypeSelection
)
626 mxRbPDFAVersion
->set_active_id("1");
629 mxRbPDFAVersion
->set_active_id("2");
633 mxRbPDFAVersion
->set_active_id("3");
637 const bool bIsPDFUA
= pParent
->mbPDFUACompliance
;
638 mxCbPDFUA
->set_active(bIsPDFUA
);
639 mxCbPDFUA
->connect_toggled(LINK(this, ImpPDFTabGeneralPage
, TogglePDFVersionOrUniversalAccessibilityHandle
));
641 // the TogglePDFVersionOrUniversalAccessibilityHandle handler will read or write the *UserSelection based
642 // on the mxCbPDFA (= bIsPDFA) state, so we have to prepare the correct input state.
643 if (bIsPDFA
|| bIsPDFUA
)
644 mxCbTaggedPDF
->set_active(pParent
->mbUseTaggedPDFUserSelection
);
646 mbUseTaggedPDFUserSelection
= pParent
->mbUseTaggedPDFUserSelection
;
647 mxCbExportBookmarks
->set_active(pParent
->mbExportBookmarksUserSelection
);
648 TogglePDFVersionOrUniversalAccessibilityHandle(*mxCbPDFA
);
650 mxCbExportFormFields
->set_active(pParent
->mbExportFormFields
);
651 mxCbExportFormFields
->connect_toggled( LINK( this, ImpPDFTabGeneralPage
, ToggleExportFormFieldsHdl
) );
653 mxLbFormsFormat
->set_active(static_cast<sal_uInt16
>(pParent
->mnFormsType
));
654 mxCbAllowDuplicateFieldNames
->set_active( pParent
->mbAllowDuplicateFieldNames
);
655 mxFormsFrame
->set_sensitive(pParent
->mbExportFormFields
);
658 mxCbExportNotes
->set_active( pParent
->mbExportNotes
);
659 mxCbExportNotesInMargin
->set_active( pParent
->mbExportNotesInMargin
);
660 if (comphelper::LibreOfficeKit::isActive())
663 mxCbViewPDF
->set_active(false);
667 mxCbViewPDF
->set_active(pParent
->mbViewPDF
);
670 if ( mbIsPresentation
)
672 mxRbRange
->set_label(mxSlidesFt
->get_label());
673 mxCbExportNotesPages
->show();
674 mxCbExportNotesPages
->set_active(pParent
->mbExportNotesPages
);
675 mxCbExportNotesPages
->connect_toggled( LINK(this, ImpPDFTabGeneralPage
, ToggleExportNotesPagesHdl
) );
676 mxCbExportOnlyNotesPages
->show();
677 mxCbExportOnlyNotesPages
->set_active(pParent
->mbExportOnlyNotesPages
);
678 // tdf#116473 Initially enable Export only note pages option depending on the checked state of Export notes pages option
679 mxCbExportOnlyNotesPages
->set_sensitive(mxCbExportNotesPages
->get_active());
680 mxCbExportHiddenSlides
->show();
681 mxCbExportHiddenSlides
->set_active(pParent
->mbExportHiddenSlides
);
685 mxCbExportNotesPages
->hide();
686 mxCbExportNotesPages
->set_active(false);
687 mxCbExportOnlyNotesPages
->hide();
688 mxCbExportOnlyNotesPages
->set_active(false);
689 mxCbExportHiddenSlides
->hide();
690 mxCbExportHiddenSlides
->set_active(false);
693 if( mbIsSpreadsheet
)
695 mxRbSelection
->set_label(mxSheetsFt
->get_label());
696 // tdf#105965 Make Selection/Selected sheets the default PDF export range setting for spreadsheets
697 mxRbSelection
->set_active(true);
699 mxCbSinglePageSheets
->show();
700 mxCbSinglePageSheets
->set_active(pParent
->mbSinglePageSheets
);
704 mxCbSinglePageSheets
->hide();
705 mxCbSinglePageSheets
->set_active(false);
708 mxCbExportPlaceholders
->set_visible(mbIsWriter
);
711 mxCbExportPlaceholders
->set_active(false);
712 mxCbExportNotesInMargin
->set_active(false);
714 mxCbExportEmptyPages
->set_active(!pParent
->mbIsSkipEmptyPages
);
715 mxCbExportPlaceholders
->set_active(pParent
->mbIsExportPlaceholders
);
717 mxCbAddStream
->show();
718 mxCbAddStream
->set_active(pParent
->mbAddStream
);
720 mxCbAddStream
->connect_toggled(LINK(this, ImpPDFTabGeneralPage
, ToggleAddStreamHdl
));
721 ToggleAddStreamHdl(*mxCbAddStream
); // init addstream dependencies
724 void ImpPDFTabGeneralPage::GetFilterConfigItem( ImpPDFTabDialog
* pParent
)
726 // updating the FilterData sequence and storing FilterData to configuration
727 pParent
->mbUseLosslessCompression
= mxRbLosslessCompression
->get_active();
728 pParent
->mnQuality
= static_cast<sal_Int32
>(mxNfQuality
->get_value(FieldUnit::PERCENT
));
729 pParent
->mbReduceImageResolution
= mxCbReduceImageResolution
->get_active();
730 pParent
->mnMaxImageResolution
= mxCoReduceImageResolution
->get_active_text().toInt32();
731 pParent
->mbExportNotes
= mxCbExportNotes
->get_active();
733 pParent
->mbExportNotesInMargin
= mxCbExportNotesInMargin
->get_active();
734 pParent
->mbViewPDF
= mxCbViewPDF
->get_active();
735 pParent
->mbUseReferenceXObject
= mxCbUseReferenceXObject
->get_active();
736 if ( mbIsPresentation
)
738 pParent
->mbExportNotesPages
= mxCbExportNotesPages
->get_active();
739 pParent
->mbExportOnlyNotesPages
= mxCbExportOnlyNotesPages
->get_active();
741 pParent
->mbExportBookmarks
= mxCbExportBookmarks
->get_active();
742 if ( mbIsPresentation
)
743 pParent
->mbExportHiddenSlides
= mxCbExportHiddenSlides
->get_active();
746 pParent
->mbSinglePageSheets
= mxCbSinglePageSheets
->get_active();
748 pParent
->mbIsSkipEmptyPages
= !mxCbExportEmptyPages
->get_active();
749 pParent
->mbIsExportPlaceholders
= mxCbExportPlaceholders
->get_active();
750 pParent
->mbAddStream
= mxCbAddStream
->get_visible() && mxCbAddStream
->get_active();
752 pParent
->mbIsRangeChecked
= false;
753 if( mxRbRange
->get_active() )
755 pParent
->mbIsRangeChecked
= true;
756 pParent
->msPageRange
= mxEdPages
->get_text(); //FIXME all right on other languages ?
758 else if( mxRbSelection
->get_active() )
760 pParent
->mbSelectionIsChecked
= mxRbSelection
->get_active();
763 pParent
->mnPDFTypeSelection
= 0;
764 pParent
->mbUseTaggedPDF
= mxCbTaggedPDF
->get_active();
766 const bool bIsPDFA
= mxCbPDFA
->get_active();
767 const bool bIsPDFUA
= mxCbPDFUA
->get_active();
771 pParent
->mnPDFTypeSelection
= 3;
772 OUString currentPDFAMode
= mxRbPDFAVersion
->get_active_id();
773 if( currentPDFAMode
== "1" )
774 pParent
->mnPDFTypeSelection
= 1;
775 else if(currentPDFAMode
== "2")
776 pParent
->mnPDFTypeSelection
= 2;
779 pParent
->mbPDFUACompliance
= bIsPDFUA
;
781 if (!bIsPDFA
&& !bIsPDFUA
)
782 mbUseTaggedPDFUserSelection
= pParent
->mbUseTaggedPDF
;
785 pParent
->mbExportBookmarksUserSelection
= pParent
->mbExportBookmarks
;
786 pParent
->mbUseReferenceXObjectUserSelection
= pParent
->mbUseReferenceXObject
;
789 pParent
->mbUseTaggedPDFUserSelection
= mbUseTaggedPDFUserSelection
;
790 pParent
->mbExportFormFields
= mxCbExportFormFields
->get_active();
792 if( mxCbWatermark
->get_active() )
793 pParent
->maWatermarkText
= mxEdWatermark
->get_text();
796 * FIXME: the entries are only implicitly defined by the resource file. Should there
797 * ever be an additional form submit format this could get invalid.
799 pParent
->mnFormsType
= mxLbFormsFormat
->get_active();
800 pParent
->mbAllowDuplicateFieldNames
= mxCbAllowDuplicateFieldNames
->get_active();
803 std::unique_ptr
<SfxTabPage
> ImpPDFTabGeneralPage::Create( weld::Container
* pPage
, weld::DialogController
* pController
,
804 const SfxItemSet
* rAttrSet
)
806 return std::make_unique
<ImpPDFTabGeneralPage
>(pPage
, pController
, *rAttrSet
);
809 IMPL_LINK_NOARG(ImpPDFTabGeneralPage
, ToggleAllHdl
, weld::Toggleable
&, void)
811 EnableExportNotesPages();
814 IMPL_LINK_NOARG(ImpPDFTabGeneralPage
, TogglePagesHdl
, weld::Toggleable
&, void)
817 EnableExportNotesPages();
820 IMPL_LINK_NOARG(ImpPDFTabGeneralPage
, ToggleSelectionHdl
, weld::Toggleable
&, void)
822 EnableExportNotesPages();
825 void ImpPDFTabGeneralPage::TogglePagesHdl()
827 mxEdPages
->set_sensitive( mxRbRange
->get_active() );
828 if (mxRbRange
->get_active())
829 mxEdPages
->grab_focus();
832 void ImpPDFTabGeneralPage::EnableExportNotesPages()
834 if ( mbIsPresentation
)
836 mxCbExportNotesPages
->set_sensitive( !mxRbSelection
->get_active() );
837 mxCbExportOnlyNotesPages
->set_sensitive( !mxRbSelection
->get_active() && mxCbExportNotesPages
->get_active() );
841 IMPL_LINK_NOARG(ImpPDFTabGeneralPage
, ToggleExportFormFieldsHdl
, weld::Toggleable
&, void)
843 mxFormsFrame
->set_sensitive(mxCbExportFormFields
->get_active());
846 IMPL_LINK_NOARG(ImpPDFTabGeneralPage
, ToggleExportNotesPagesHdl
, weld::Toggleable
&, void)
848 mxCbExportOnlyNotesPages
->set_sensitive(mxCbExportNotesPages
->get_active());
851 IMPL_LINK_NOARG(ImpPDFTabGeneralPage
, ToggleCompressionHdl
, weld::Toggleable
&, void)
853 mxQualityFrame
->set_sensitive(mxRbJPEGCompression
->get_active());
856 IMPL_LINK_NOARG(ImpPDFTabGeneralPage
, ToggleReduceImageResolutionHdl
, weld::Toggleable
&, void)
858 mxCoReduceImageResolution
->set_sensitive(mxCbReduceImageResolution
->get_active());
861 IMPL_LINK_NOARG(ImpPDFTabGeneralPage
, ToggleWatermarkHdl
, weld::Toggleable
&, void)
863 mxEdWatermark
->set_sensitive(mxCbWatermark
->get_active());
864 mxFtWatermark
->set_sensitive(mxCbWatermark
->get_active());
865 if (mxCbWatermark
->get_active())
866 mxEdWatermark
->grab_focus();
869 IMPL_LINK_NOARG(ImpPDFTabGeneralPage
, ToggleAddStreamHdl
, weld::Toggleable
&, void)
871 if (!mxCbAddStream
->get_visible())
874 if( mxCbAddStream
->get_active() )
876 mxRbAll
->set_active(true);
877 mxRbRange
->set_sensitive( false );
878 mxRbSelection
->set_sensitive( false );
879 mxEdPages
->set_sensitive( false );
880 mxRbAll
->set_sensitive( false );
884 mxRbAll
->set_sensitive(true);
885 mxRbRange
->set_sensitive(true);
886 mxRbSelection
->set_sensitive(true);
890 IMPL_LINK_NOARG(ImpPDFTabGeneralPage
, TogglePDFVersionOrUniversalAccessibilityHandle
, weld::Toggleable
&, void)
892 const bool bIsPDFA
= mxCbPDFA
->get_active();
893 const bool bIsPDFUA
= mxCbPDFUA
->get_active();
895 // set the security page status (and its controls as well)
896 ImpPDFTabSecurityPage
* pSecPage
= mpParent
? mpParent
->getSecurityPage() : nullptr;
898 pSecPage
->ImplPDFASecurityControl(!bIsPDFA
);
900 mxCbTaggedPDF
->set_sensitive(!bIsPDFA
&& !bIsPDFUA
);
901 mxRbPDFAVersion
->set_sensitive(bIsPDFA
);
903 if (bIsPDFA
|| bIsPDFUA
)
905 // store the users selection of subordinate controls and set required PDF/A values
906 mbUseTaggedPDFUserSelection
= mxCbTaggedPDF
->get_active();
907 mxCbTaggedPDF
->set_active(true);
909 // if a password was set, inform the user that this will not be used
910 if (bIsPDFA
&& pSecPage
&& pSecPage
->hasPassword())
912 mxPasswordUnusedWarnDialog
=
913 std::shared_ptr
<weld::MessageDialog
>(Application::CreateMessageDialog(m_xContainer
.get(),
914 VclMessageType::Warning
, VclButtonsType::Ok
,
915 FilterResId(STR_WARN_PASSWORD_PDFA
)));
916 mxPasswordUnusedWarnDialog
->runAsync(mxPasswordUnusedWarnDialog
, [] (sal_uInt32
){ });
921 // restore the users values of subordinate controls
922 mxCbTaggedPDF
->set_active(mbUseTaggedPDFUserSelection
);
927 if (mxCbExportBookmarks
->get_sensitive())
931 mpParent
->mbExportBookmarksUserSelection
= mxCbExportBookmarks
->get_active();
933 mxCbExportBookmarks
->set_active(true);
935 if (mxCbUseReferenceXObject
->get_sensitive())
939 mpParent
->mbUseReferenceXObjectUserSelection
= mxCbUseReferenceXObject
->get_active();
941 mxCbUseReferenceXObject
->set_active(false);
946 mxCbExportBookmarks
->set_active(mpParent
->mbExportBookmarksUserSelection
);
947 mxCbUseReferenceXObject
->set_active(mpParent
->mbUseReferenceXObjectUserSelection
);
949 mxCbExportBookmarks
->set_sensitive(!bIsPDFUA
);
950 mxCbUseReferenceXObject
->set_sensitive(!bIsPDFUA
);
952 ImpPDFTabOpnFtrPage
*const pOpenPage(mpParent
? mpParent
->getOpenPage() : nullptr);
955 pOpenPage
->ToggleInitialView(*mpParent
);
958 // PDF/A doesn't allow launch action, so enable/disable the selection on the Link page
959 ImpPDFTabLinksPage
* pLinksPage
= mpParent
? mpParent
->getLinksPage() : nullptr;
961 pLinksPage
->ImplPDFALinkControl(!bIsPDFA
);
964 /// The option features tab page
965 ImpPDFTabOpnFtrPage::ImpPDFTabOpnFtrPage(weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
& rCoreSet
)
966 : SfxTabPage(pPage
, pController
, "filter/ui/pdfviewpage.ui", "PdfViewPage", &rCoreSet
)
967 , mbUseCTLFont(false)
968 , mxRbOpnPageOnly(m_xBuilder
->weld_radio_button("pageonly"))
969 , mxRbOpnOutline(m_xBuilder
->weld_radio_button("outline"))
970 , mxRbOpnThumbs(m_xBuilder
->weld_radio_button("thumbs"))
971 , mxNumInitialPage(m_xBuilder
->weld_spin_button("page"))
972 , mxRbMagnDefault(m_xBuilder
->weld_radio_button("fitdefault"))
973 , mxRbMagnFitWin(m_xBuilder
->weld_radio_button("fitwin"))
974 , mxRbMagnFitWidth(m_xBuilder
->weld_radio_button("fitwidth"))
975 , mxRbMagnFitVisible(m_xBuilder
->weld_radio_button("fitvis"))
976 , mxRbMagnZoom(m_xBuilder
->weld_radio_button("fitzoom"))
977 , mxNumZoom(m_xBuilder
->weld_spin_button("zoom"))
978 , mxRbPgLyDefault(m_xBuilder
->weld_radio_button("defaultlayout"))
979 , mxRbPgLySinglePage(m_xBuilder
->weld_radio_button("singlelayout"))
980 , mxRbPgLyContinue(m_xBuilder
->weld_radio_button("contlayout"))
981 , mxRbPgLyContinueFacing(m_xBuilder
->weld_radio_button("contfacinglayout"))
982 , mxCbPgLyFirstOnLeft(m_xBuilder
->weld_check_button("firstonleft"))
984 mxRbMagnDefault
->connect_toggled( LINK( this, ImpPDFTabOpnFtrPage
, ToggleRbMagnHdl
) );
985 mxRbMagnFitWin
->connect_toggled( LINK( this, ImpPDFTabOpnFtrPage
, ToggleRbMagnHdl
) );
986 mxRbMagnFitWidth
->connect_toggled( LINK( this, ImpPDFTabOpnFtrPage
, ToggleRbMagnHdl
) );
987 mxRbMagnFitVisible
->connect_toggled( LINK( this, ImpPDFTabOpnFtrPage
, ToggleRbMagnHdl
) );
988 mxRbMagnZoom
->connect_toggled( LINK( this, ImpPDFTabOpnFtrPage
, ToggleRbMagnHdl
) );
991 ImpPDFTabOpnFtrPage::~ImpPDFTabOpnFtrPage()
995 std::unique_ptr
<SfxTabPage
> ImpPDFTabOpnFtrPage::Create(weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
* rAttrSet
)
997 return std::make_unique
<ImpPDFTabOpnFtrPage
>(pPage
, pController
, *rAttrSet
);
1000 void ImpPDFTabOpnFtrPage::GetFilterConfigItem( ImpPDFTabDialog
* pParent
)
1002 pParent
->mnInitialView
= 0;
1003 if( mxRbOpnOutline
->get_active() )
1004 pParent
->mnInitialView
= 1;
1005 else if( mxRbOpnThumbs
->get_active() )
1006 pParent
->mnInitialView
= 2;
1007 if (!pParent
->mbPDFUACompliance
)
1009 pParent
->mnInitialViewUserSelection
= pParent
->mnInitialView
;
1012 pParent
->mnMagnification
= 0;
1013 if( mxRbMagnFitWin
->get_active() )
1014 pParent
->mnMagnification
= 1;
1015 else if( mxRbMagnFitWidth
->get_active() )
1016 pParent
->mnMagnification
= 2;
1017 else if( mxRbMagnFitVisible
->get_active() )
1018 pParent
->mnMagnification
= 3;
1019 else if( mxRbMagnZoom
->get_active() )
1021 pParent
->mnMagnification
= 4;
1022 pParent
->mnZoom
= mxNumZoom
->get_value();
1025 pParent
->mnInitialPage
= mxNumInitialPage
->get_value();
1027 pParent
->mnPageLayout
= 0;
1028 if( mxRbPgLySinglePage
->get_active() )
1029 pParent
->mnPageLayout
= 1;
1030 else if( mxRbPgLyContinue
->get_active() )
1031 pParent
->mnPageLayout
= 2;
1032 else if( mxRbPgLyContinueFacing
->get_active() )
1033 pParent
->mnPageLayout
= 3;
1035 pParent
->mbFirstPageLeft
= mbUseCTLFont
&& mxCbPgLyFirstOnLeft
->get_active();
1038 void ImpPDFTabOpnFtrPage::SetFilterConfigItem(ImpPDFTabDialog
*const pParent
)
1040 mbUseCTLFont
= pParent
->mbUseCTLFont
;
1041 switch( pParent
->mnPageLayout
)
1045 mxRbPgLyDefault
->set_active(true);
1048 mxRbPgLySinglePage
->set_active(true);
1051 mxRbPgLyContinue
->set_active(true);
1054 mxRbPgLyContinueFacing
->set_active(true);
1058 switch( pParent
->mnInitialView
)
1062 mxRbOpnPageOnly
->set_active(true);
1065 mxRbOpnOutline
->set_active(true);
1068 mxRbOpnThumbs
->set_active(true);
1072 switch( pParent
->mnMagnification
)
1076 mxRbMagnDefault
->set_active(true);
1077 mxNumZoom
->set_sensitive(false);
1080 mxRbMagnFitWin
->set_active(true);
1081 mxNumZoom
->set_sensitive(false);
1084 mxRbMagnFitWidth
->set_active(true);
1085 mxNumZoom
->set_sensitive(false);
1088 mxRbMagnFitVisible
->set_active(true);
1089 mxNumZoom
->set_sensitive(false);
1092 mxRbMagnZoom
->set_active(true);
1093 mxNumZoom
->set_sensitive(true);
1097 mxNumZoom
->set_value(pParent
->mnZoom
);
1098 mxNumInitialPage
->set_value(pParent
->mnInitialPage
);
1101 mxCbPgLyFirstOnLeft
->hide();
1104 mxRbPgLyContinueFacing
->connect_toggled(LINK(this, ImpPDFTabOpnFtrPage
, ToggleRbPgLyContinueFacingHdl
));
1105 mxCbPgLyFirstOnLeft
->set_active(pParent
->mbFirstPageLeft
);
1106 ToggleRbPgLyContinueFacingHdl();
1109 // The call from ImpPDFTabGeneralPage::SetFilterConfigItem() did not init
1110 // the radio buttons correctly because ImpPDFTabOpnFtrPage did not yet exist.
1111 ToggleInitialView(*pParent
);
1114 void ImpPDFTabOpnFtrPage::ToggleInitialView(ImpPDFTabDialog
& rParent
)
1116 bool const bIsPDFUA(rParent
.getGeneralPage()->IsPdfUaSelected());
1118 { // only allow Outline for PDF/UA
1119 if (mxRbOpnOutline
->get_sensitive())
1121 if (mxRbOpnPageOnly
->get_active())
1123 rParent
.mnInitialViewUserSelection
= 0;
1125 else if (mxRbOpnOutline
->get_active())
1127 rParent
.mnInitialViewUserSelection
= 1;
1129 else if (mxRbOpnThumbs
->get_active())
1131 rParent
.mnInitialViewUserSelection
= 2;
1133 mxRbOpnOutline
->set_active(true);
1138 switch (rParent
.mnInitialViewUserSelection
)
1141 mxRbOpnPageOnly
->set_active(true);
1144 mxRbOpnOutline
->set_active(true);
1147 mxRbOpnThumbs
->set_active(true);
1151 mxRbOpnPageOnly
->set_sensitive(!bIsPDFUA
);
1152 mxRbOpnThumbs
->set_sensitive(!bIsPDFUA
);
1153 mxRbOpnOutline
->set_sensitive(!bIsPDFUA
);
1156 IMPL_LINK_NOARG(ImpPDFTabOpnFtrPage
, ToggleRbPgLyContinueFacingHdl
, weld::Toggleable
&, void)
1158 ToggleRbPgLyContinueFacingHdl();
1161 void ImpPDFTabOpnFtrPage::ToggleRbPgLyContinueFacingHdl()
1163 mxCbPgLyFirstOnLeft
->set_sensitive(mxRbPgLyContinueFacing
->get_active());
1166 IMPL_LINK_NOARG( ImpPDFTabOpnFtrPage
, ToggleRbMagnHdl
, weld::Toggleable
&, void )
1168 mxNumZoom
->set_sensitive(mxRbMagnZoom
->get_active());
1171 /// The Viewer preferences tab page
1172 ImpPDFTabViewerPage::ImpPDFTabViewerPage(weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
& rCoreSet
)
1173 : SfxTabPage(pPage
, pController
, "filter/ui/pdfuserinterfacepage.ui", "PdfUserInterfacePage", &rCoreSet
)
1174 , mbIsPresentation(false)
1175 , m_xCbResWinInit(m_xBuilder
->weld_check_button("resize"))
1176 , m_xCbCenterWindow(m_xBuilder
->weld_check_button("center"))
1177 , m_xCbOpenFullScreen(m_xBuilder
->weld_check_button("open"))
1178 , m_xCbDispDocTitle(m_xBuilder
->weld_check_button("display"))
1179 , m_xCbHideViewerMenubar(m_xBuilder
->weld_check_button("menubar"))
1180 , m_xCbHideViewerToolbar(m_xBuilder
->weld_check_button("toolbar"))
1181 , m_xCbHideViewerWindowControls(m_xBuilder
->weld_check_button("window"))
1182 , m_xCbTransitionEffects(m_xBuilder
->weld_check_button("effects"))
1183 , m_xRbAllBookmarkLevels(m_xBuilder
->weld_radio_button("allbookmarks"))
1184 , m_xRbVisibleBookmarkLevels(m_xBuilder
->weld_radio_button("visiblebookmark"))
1185 , m_xNumBookmarkLevels(m_xBuilder
->weld_spin_button("visiblelevel"))
1187 m_xRbAllBookmarkLevels
->connect_toggled(LINK(this, ImpPDFTabViewerPage
, ToggleRbBookmarksHdl
));
1188 m_xRbVisibleBookmarkLevels
->connect_toggled(LINK(this, ImpPDFTabViewerPage
, ToggleRbBookmarksHdl
));
1191 ImpPDFTabViewerPage::~ImpPDFTabViewerPage()
1195 IMPL_LINK_NOARG( ImpPDFTabViewerPage
, ToggleRbBookmarksHdl
, weld::Toggleable
&, void )
1197 m_xNumBookmarkLevels
->set_sensitive(m_xRbVisibleBookmarkLevels
->get_active());
1200 std::unique_ptr
<SfxTabPage
> ImpPDFTabViewerPage::Create( weld::Container
* pPage
, weld::DialogController
* pController
,
1201 const SfxItemSet
* rAttrSet
)
1203 return std::make_unique
<ImpPDFTabViewerPage
>(pPage
, pController
, *rAttrSet
);
1206 void ImpPDFTabViewerPage::GetFilterConfigItem( ImpPDFTabDialog
* pParent
)
1208 pParent
->mbHideViewerMenubar
= m_xCbHideViewerMenubar
->get_active();
1209 pParent
->mbHideViewerToolbar
= m_xCbHideViewerToolbar
->get_active();
1210 pParent
->mbHideViewerWindowControls
= m_xCbHideViewerWindowControls
->get_active();
1211 pParent
->mbResizeWinToInit
= m_xCbResWinInit
->get_active();
1212 pParent
->mbOpenInFullScreenMode
= m_xCbOpenFullScreen
->get_active();
1213 pParent
->mbCenterWindow
= m_xCbCenterWindow
->get_active();
1214 pParent
->mbDisplayPDFDocumentTitle
= m_xCbDispDocTitle
->get_active();
1215 pParent
->mbUseTransitionEffects
= m_xCbTransitionEffects
->get_active();
1216 pParent
->mnOpenBookmarkLevels
= m_xRbAllBookmarkLevels
->get_active() ?
1217 -1 : static_cast<sal_Int32
>(m_xNumBookmarkLevels
->get_value());
1220 void ImpPDFTabViewerPage::SetFilterConfigItem( const ImpPDFTabDialog
* pParent
)
1222 m_xCbHideViewerMenubar
->set_active( pParent
->mbHideViewerMenubar
);
1223 m_xCbHideViewerToolbar
->set_active( pParent
->mbHideViewerToolbar
);
1224 m_xCbHideViewerWindowControls
->set_active( pParent
->mbHideViewerWindowControls
);
1226 m_xCbResWinInit
->set_active( pParent
->mbResizeWinToInit
);
1227 m_xCbOpenFullScreen
->set_active( pParent
->mbOpenInFullScreenMode
);
1228 m_xCbCenterWindow
->set_active( pParent
->mbCenterWindow
);
1229 m_xCbDispDocTitle
->set_active( pParent
->mbDisplayPDFDocumentTitle
);
1230 mbIsPresentation
= pParent
->mbIsPresentation
;
1231 m_xCbTransitionEffects
->set_active( pParent
->mbUseTransitionEffects
);
1232 m_xCbTransitionEffects
->set_sensitive( mbIsPresentation
);
1233 if( pParent
->mnOpenBookmarkLevels
< 0 )
1235 m_xRbAllBookmarkLevels
->set_active(true);
1236 m_xNumBookmarkLevels
->set_sensitive( false );
1240 m_xRbVisibleBookmarkLevels
->set_active(true);
1241 m_xNumBookmarkLevels
->set_sensitive(true);
1242 m_xNumBookmarkLevels
->set_value(pParent
->mnOpenBookmarkLevels
);
1246 /// The Security preferences tab page
1247 ImpPDFTabSecurityPage::ImpPDFTabSecurityPage(weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
& i_rCoreSet
)
1248 : SfxTabPage(pPage
, pController
, "filter/ui/pdfsecuritypage.ui", "PdfSecurityPage", &i_rCoreSet
)
1249 , msUserPwdTitle( FilterResId( STR_PDF_EXPORT_UDPWD
) )
1250 , mbHaveOwnerPassword( false )
1251 , mbHaveUserPassword( false )
1252 , msOwnerPwdTitle( FilterResId( STR_PDF_EXPORT_ODPWD
) )
1253 , mxPbSetPwd(m_xBuilder
->weld_button("setpassword"))
1254 , mxUserPwdSet(m_xBuilder
->weld_widget("userpwdset"))
1255 , mxUserPwdUnset(m_xBuilder
->weld_widget("userpwdunset"))
1256 , mxUserPwdPdfa(m_xBuilder
->weld_widget("userpwdpdfa"))
1257 , mxOwnerPwdSet(m_xBuilder
->weld_widget("ownerpwdset"))
1258 , mxOwnerPwdUnset(m_xBuilder
->weld_widget("ownerpwdunset"))
1259 , mxOwnerPwdPdfa(m_xBuilder
->weld_widget("ownerpwdpdfa"))
1260 , mxPrintPermissions(m_xBuilder
->weld_widget("printing"))
1261 , mxRbPrintNone(m_xBuilder
->weld_radio_button("printnone"))
1262 , mxRbPrintLowRes(m_xBuilder
->weld_radio_button("printlow"))
1263 , mxRbPrintHighRes(m_xBuilder
->weld_radio_button("printhigh"))
1264 , mxChangesAllowed(m_xBuilder
->weld_widget("changes"))
1265 , mxRbChangesNone(m_xBuilder
->weld_radio_button("changenone"))
1266 , mxRbChangesInsDel(m_xBuilder
->weld_radio_button("changeinsdel"))
1267 , mxRbChangesFillForm(m_xBuilder
->weld_radio_button("changeform"))
1268 , mxRbChangesComment(m_xBuilder
->weld_radio_button("changecomment"))
1269 , mxRbChangesAnyNoCopy(m_xBuilder
->weld_radio_button("changeany"))
1270 , mxContent(m_xBuilder
->weld_widget("content"))
1271 , mxCbEnableCopy(m_xBuilder
->weld_check_button("enablecopy"))
1272 , mxCbEnableAccessibility(m_xBuilder
->weld_check_button("enablea11y"))
1273 , mxPasswordTitle(m_xBuilder
->weld_label("setpasswordstitle"))
1275 msStrSetPwd
= mxPasswordTitle
->get_label();
1276 mxPbSetPwd
->connect_clicked(LINK(this, ImpPDFTabSecurityPage
, ClickmaPbSetPwdHdl
));
1279 ImpPDFTabSecurityPage::~ImpPDFTabSecurityPage()
1281 if (mpPasswordDialog
)
1282 mpPasswordDialog
->response(RET_CANCEL
);
1283 if (mpUnsupportedMsgDialog
)
1284 mpUnsupportedMsgDialog
->response(RET_CANCEL
);
1287 std::unique_ptr
<SfxTabPage
> ImpPDFTabSecurityPage::Create(weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
* rAttrSet
)
1289 return std::make_unique
<ImpPDFTabSecurityPage
>(pPage
, pController
, *rAttrSet
);
1292 void ImpPDFTabSecurityPage::GetFilterConfigItem( ImpPDFTabDialog
* pParent
)
1294 // please note that in PDF/A-1a mode even if this are copied back,
1295 // the security settings are forced disabled in PDFExport::Export
1296 pParent
->mbEncrypt
= mbHaveUserPassword
;
1297 pParent
->mxPreparedPasswords
= mxPreparedPasswords
;
1299 pParent
->mbRestrictPermissions
= mbHaveOwnerPassword
;
1300 pParent
->maPreparedOwnerPassword
= maPreparedOwnerPassword
;
1302 // verify print status
1303 pParent
->mnPrint
= 0;
1304 if (mxRbPrintLowRes
->get_active())
1305 pParent
->mnPrint
= 1;
1306 else if (mxRbPrintHighRes
->get_active())
1307 pParent
->mnPrint
= 2;
1309 // verify changes permitted
1310 pParent
->mnChangesAllowed
= 0;
1312 if( mxRbChangesInsDel
->get_active() )
1313 pParent
->mnChangesAllowed
= 1;
1314 else if( mxRbChangesFillForm
->get_active() )
1315 pParent
->mnChangesAllowed
= 2;
1316 else if( mxRbChangesComment
->get_active() )
1317 pParent
->mnChangesAllowed
= 3;
1318 else if( mxRbChangesAnyNoCopy
->get_active() )
1319 pParent
->mnChangesAllowed
= 4;
1321 pParent
->mbCanCopyOrExtract
= mxCbEnableCopy
->get_active();
1322 pParent
->mbCanExtractForAccessibility
= mxCbEnableAccessibility
->get_active();
1325 void ImpPDFTabSecurityPage::SetFilterConfigItem( const ImpPDFTabDialog
* pParent
)
1327 switch( pParent
->mnPrint
)
1331 mxRbPrintNone
->set_active(true);
1334 mxRbPrintLowRes
->set_active(true);
1337 mxRbPrintHighRes
->set_active(true);
1341 switch( pParent
->mnChangesAllowed
)
1345 mxRbChangesNone
->set_active(true);
1348 mxRbChangesInsDel
->set_active(true);
1351 mxRbChangesFillForm
->set_active(true);
1354 mxRbChangesComment
->set_active(true);
1357 mxRbChangesAnyNoCopy
->set_active(true);
1361 mxCbEnableCopy
->set_active(pParent
->mbCanCopyOrExtract
);
1362 mxCbEnableAccessibility
->set_active(pParent
->mbCanExtractForAccessibility
);
1364 // set the status of this windows, according to the PDFA selection
1365 enablePermissionControls();
1367 ImpPDFTabGeneralPage
* pGeneralPage
= pParent
->getGeneralPage();
1370 ImplPDFASecurityControl(!pGeneralPage
->IsPdfaSelected());
1373 IMPL_LINK_NOARG(ImpPDFTabSecurityPage
, ClickmaPbSetPwdHdl
, weld::Button
&, void)
1375 if(mpPasswordDialog
)
1376 mpPasswordDialog
->response(RET_CANCEL
);
1378 mpPasswordDialog
= std::make_shared
<SfxPasswordDialog
>(m_xContainer
.get(), &msUserPwdTitle
);
1380 mpPasswordDialog
->SetMinLen(0);
1381 mpPasswordDialog
->ShowMinLengthText(false);
1382 mpPasswordDialog
->ShowExtras( SfxShowExtras::CONFIRM
| SfxShowExtras::PASSWORD2
| SfxShowExtras::CONFIRM2
);
1383 mpPasswordDialog
->set_title(msStrSetPwd
);
1384 mpPasswordDialog
->SetGroup2Text(msOwnerPwdTitle
);
1385 mpPasswordDialog
->AllowAsciiOnly();
1387 mpPasswordDialog
->PreRun();
1389 weld::DialogController::runAsync(mpPasswordDialog
, [this](sal_Int32 response
){
1390 if (response
== RET_OK
)
1392 OUString
aUserPW(mpPasswordDialog
->GetPassword());
1393 OUString
aOwnerPW(mpPasswordDialog
->GetPassword2());
1395 mbHaveUserPassword
= !aUserPW
.isEmpty();
1396 mbHaveOwnerPassword
= !aOwnerPW
.isEmpty();
1398 mxPreparedPasswords
= vcl::PDFWriter::InitEncryption( aOwnerPW
, aUserPW
);
1399 if (!mxPreparedPasswords
.is())
1402 ErrorHandler::GetErrorString(ERRCODE_IO_NOTSUPPORTED
, msg
); //TODO: handle failure
1403 mpUnsupportedMsgDialog
= std::shared_ptr
<weld::MessageDialog
>(
1404 Application::CreateMessageDialog(
1405 GetFrameWeld(), VclMessageType::Error
, VclButtonsType::Ok
, msg
));
1407 mpUnsupportedMsgDialog
->runAsync(mpUnsupportedMsgDialog
, [](sal_Int32
){ });
1411 if( mbHaveOwnerPassword
)
1412 maPreparedOwnerPassword
= comphelper::OStorageHelper::CreatePackageEncryptionData( aOwnerPW
);
1414 maPreparedOwnerPassword
= Sequence
< NamedValue
>();
1416 if (response
!= RET_CANCEL
)
1417 enablePermissionControls();
1418 mpPasswordDialog
.reset();
1422 void ImpPDFTabSecurityPage::enablePermissionControls()
1424 bool bIsPDFASel
= false;
1425 bool bIsPDFUASel
= false;
1426 ImpPDFTabDialog
* pParent
= static_cast<ImpPDFTabDialog
*>(GetDialogController());
1427 ImpPDFTabGeneralPage
* pGeneralPage
= pParent
? pParent
->getGeneralPage() : nullptr;
1430 bIsPDFASel
= pGeneralPage
->IsPdfaSelected();
1431 bIsPDFUASel
= pGeneralPage
->IsPdfUaSelected();
1433 // ISO 14289-1:2014, Clause: 7.16
1436 mxCbEnableAccessibility
->set_active(true);
1438 mxCbEnableAccessibility
->set_sensitive(!bIsPDFUASel
);
1441 mxUserPwdPdfa
->show();
1442 mxUserPwdSet
->hide();
1443 mxUserPwdUnset
->hide();
1447 if (mbHaveUserPassword
&& m_xContainer
->get_sensitive())
1449 mxUserPwdSet
->show();
1450 mxUserPwdUnset
->hide();
1451 mxUserPwdPdfa
->hide();
1455 mxUserPwdUnset
->show();
1456 mxUserPwdSet
->hide();
1457 mxUserPwdPdfa
->hide();
1461 bool bLocalEnable
= mbHaveOwnerPassword
&& m_xContainer
->get_sensitive();
1464 mxOwnerPwdPdfa
->show();
1465 mxOwnerPwdSet
->hide();
1466 mxOwnerPwdUnset
->hide();
1472 mxOwnerPwdSet
->show();
1473 mxOwnerPwdUnset
->hide();
1474 mxOwnerPwdPdfa
->hide();
1478 mxOwnerPwdUnset
->show();
1479 mxOwnerPwdSet
->hide();
1480 mxOwnerPwdPdfa
->hide();
1484 mxPrintPermissions
->set_sensitive(bLocalEnable
);
1485 mxChangesAllowed
->set_sensitive(bLocalEnable
);
1486 mxContent
->set_sensitive(bLocalEnable
);
1489 // This tab page is under control of the PDF/A-1a checkbox:
1490 // TODO: implement a method to do it.
1491 void ImpPDFTabSecurityPage::ImplPDFASecurityControl( bool bEnableSecurity
)
1493 m_xContainer
->set_sensitive(bEnableSecurity
);
1494 // after enable, check the status of control as if the dialog was initialized
1495 enablePermissionControls();
1498 /// The link preferences tab page (relative and other stuff)
1499 ImpPDFTabLinksPage::ImpPDFTabLinksPage(weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
& rCoreSet
)
1500 : SfxTabPage(pPage
, pController
, "filter/ui/pdflinkspage.ui", "PdfLinksPage", &rCoreSet
)
1501 , mbOpnLnksDefaultUserState(false)
1502 , mbOpnLnksLaunchUserState(false)
1503 , mbOpnLnksBrowserUserState(false)
1504 , m_xCbExprtBmkrToNmDst(m_xBuilder
->weld_check_button("export"))
1505 , m_xCbOOoToPDFTargets(m_xBuilder
->weld_check_button("convert"))
1506 , m_xCbExportRelativeFsysLinks(m_xBuilder
->weld_check_button("exporturl"))
1507 , m_xRbOpnLnksDefault(m_xBuilder
->weld_radio_button("default"))
1508 , m_xRbOpnLnksLaunch(m_xBuilder
->weld_radio_button("openpdf"))
1509 , m_xRbOpnLnksBrowser(m_xBuilder
->weld_radio_button("openinternet"))
1513 ImpPDFTabLinksPage::~ImpPDFTabLinksPage()
1517 std::unique_ptr
<SfxTabPage
> ImpPDFTabLinksPage::Create(weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
* rAttrSet
)
1519 return std::make_unique
<ImpPDFTabLinksPage
>(pPage
, pController
, *rAttrSet
);
1522 void ImpPDFTabLinksPage::GetFilterConfigItem( ImpPDFTabDialog
* pParent
)
1524 pParent
->mbExportRelativeFsysLinks
= m_xCbExportRelativeFsysLinks
->get_active();
1526 bool bIsPDFASel
= false;
1527 ImpPDFTabGeneralPage
* pGeneralPage
= pParent
->getGeneralPage();
1529 bIsPDFASel
= pGeneralPage
->IsPdfaSelected();
1530 // if PDF/A-1 was not selected while exiting dialog...
1533 // ...get the control states
1534 mbOpnLnksDefaultUserState
= m_xRbOpnLnksDefault
->get_active();
1535 mbOpnLnksLaunchUserState
= m_xRbOpnLnksLaunch
->get_active();
1536 mbOpnLnksBrowserUserState
= m_xRbOpnLnksBrowser
->get_active();
1538 // the control states, or the saved is used
1539 // to form the stored selection
1540 pParent
->mnViewPDFMode
= 0;
1541 if( mbOpnLnksBrowserUserState
)
1542 pParent
->mnViewPDFMode
= 2;
1543 else if( mbOpnLnksLaunchUserState
)
1544 pParent
->mnViewPDFMode
= 1;
1546 pParent
->mbConvertOOoTargets
= m_xCbOOoToPDFTargets
->get_active();
1547 pParent
->mbExportBmkToPDFDestination
= m_xCbExprtBmkrToNmDst
->get_active();
1550 void ImpPDFTabLinksPage::SetFilterConfigItem( const ImpPDFTabDialog
* pParent
)
1552 m_xCbOOoToPDFTargets
->set_active(pParent
->mbConvertOOoTargets
);
1553 m_xCbExprtBmkrToNmDst
->set_active(pParent
->mbExportBmkToPDFDestination
);
1555 m_xRbOpnLnksDefault
->connect_toggled(LINK(this, ImpPDFTabLinksPage
, ClickRbOpnLnksDefaultHdl
));
1556 m_xRbOpnLnksBrowser
->connect_toggled(LINK(this, ImpPDFTabLinksPage
, ClickRbOpnLnksBrowserHdl
));
1558 m_xCbExportRelativeFsysLinks
->set_active(pParent
->mbExportRelativeFsysLinks
);
1559 switch( pParent
->mnViewPDFMode
)
1563 m_xRbOpnLnksDefault
->set_active(true);
1564 mbOpnLnksDefaultUserState
= true;
1567 m_xRbOpnLnksLaunch
->set_active(true);
1568 mbOpnLnksLaunchUserState
= true;
1571 m_xRbOpnLnksBrowser
->set_active(true);
1572 mbOpnLnksBrowserUserState
= true;
1576 // now check the status of PDF/A selection
1577 // and set the link action accordingly
1578 // PDF/A-2 doesn't allow launch action on links
1580 ImpPDFTabGeneralPage
* pGeneralPage
= pParent
->getGeneralPage();
1582 ImplPDFALinkControl(!pGeneralPage
->mxCbPDFA
->get_active());
1586 /** Called from general tab, with PDFA/1 selection status.
1587 Retrieves/store the status of Launch action selection.
1589 void ImpPDFTabLinksPage::ImplPDFALinkControl( bool bEnableLaunch
)
1591 // set the value and position of link type selection
1594 m_xRbOpnLnksLaunch
->set_sensitive(true);
1595 // restore user state with no PDF/A-1 selected
1596 m_xRbOpnLnksDefault
->set_active(mbOpnLnksDefaultUserState
);
1597 m_xRbOpnLnksLaunch
->set_active(mbOpnLnksLaunchUserState
);
1598 m_xRbOpnLnksBrowser
->set_active(mbOpnLnksBrowserUserState
);
1602 // save user state with no PDF/A-1 selected
1603 mbOpnLnksDefaultUserState
= m_xRbOpnLnksDefault
->get_active();
1604 mbOpnLnksLaunchUserState
= m_xRbOpnLnksLaunch
->get_active();
1605 mbOpnLnksBrowserUserState
= m_xRbOpnLnksBrowser
->get_active();
1606 m_xRbOpnLnksLaunch
->set_sensitive(false);
1607 if (mbOpnLnksLaunchUserState
)
1608 m_xRbOpnLnksBrowser
->set_active(true);
1612 /// Reset the memory of Launch action present when PDF/A-1 was requested
1613 IMPL_LINK_NOARG(ImpPDFTabLinksPage
, ClickRbOpnLnksDefaultHdl
, weld::Toggleable
&, void)
1615 mbOpnLnksDefaultUserState
= m_xRbOpnLnksDefault
->get_active();
1616 mbOpnLnksLaunchUserState
= m_xRbOpnLnksLaunch
->get_active();
1617 mbOpnLnksBrowserUserState
= m_xRbOpnLnksBrowser
->get_active();
1620 /// Reset the memory of a launch action present when PDF/A-1 was requested
1621 IMPL_LINK_NOARG(ImpPDFTabLinksPage
, ClickRbOpnLnksBrowserHdl
, weld::Toggleable
&, void)
1623 mbOpnLnksDefaultUserState
= m_xRbOpnLnksDefault
->get_active();
1624 mbOpnLnksLaunchUserState
= m_xRbOpnLnksLaunch
->get_active();
1625 mbOpnLnksBrowserUserState
= m_xRbOpnLnksBrowser
->get_active();
1628 ImplErrorDialog::ImplErrorDialog(weld::Window
* pParent
, const std::set
<vcl::PDFWriter::ErrorCode
>& rErrors
)
1629 : MessageDialogController(pParent
, "filter/ui/warnpdfdialog.ui", "WarnPDFDialog", "grid")
1630 , m_xErrors(m_xBuilder
->weld_tree_view("errors"))
1631 , m_xExplanation(m_xBuilder
->weld_label("message"))
1633 int nWidth
= m_xErrors
->get_approximate_digit_width() * 26;
1634 int nHeight
= m_xErrors
->get_height_rows(9);
1635 m_xErrors
->set_size_request(nWidth
, nHeight
);
1636 m_xExplanation
->set_size_request(nWidth
, nHeight
);
1638 for (auto const& error
: rErrors
)
1642 case vcl::PDFWriter::Warning_Transparency_Omitted_PDFA
:
1643 m_xErrors
->append(FilterResId(STR_WARN_TRANSP_PDFA
), FilterResId(STR_WARN_TRANSP_PDFA_SHORT
), "dialog-warning");
1645 case vcl::PDFWriter::Warning_Transparency_Omitted_PDF13
:
1646 m_xErrors
->append(FilterResId(STR_WARN_TRANSP_VERSION
), FilterResId(STR_WARN_TRANSP_VERSION_SHORT
), "dialog-warning");
1648 case vcl::PDFWriter::Warning_FormAction_Omitted_PDFA
:
1649 m_xErrors
->append(FilterResId(STR_WARN_FORMACTION_PDFA
), FilterResId(STR_WARN_FORMACTION_PDFA_SHORT
), "dialog-warning");
1651 case vcl::PDFWriter::Warning_Transparency_Converted
:
1652 m_xErrors
->append(FilterResId(STR_WARN_TRANSP_CONVERTED
), FilterResId(STR_WARN_TRANSP_CONVERTED_SHORT
), "dialog-warning");
1654 case vcl::PDFWriter::Error_Signature_Failed
:
1655 m_xErrors
->append(FilterResId(STR_ERR_PDF_EXPORT_ABORTED
), FilterResId(STR_ERR_SIGNATURE_FAILED
), "dialog-error");
1662 if (m_xErrors
->n_children() > 0)
1664 m_xErrors
->select(0);
1665 m_xExplanation
->set_label(m_xErrors
->get_id(0));
1668 m_xErrors
->connect_changed(LINK(this, ImplErrorDialog
, SelectHdl
));
1671 IMPL_LINK_NOARG(ImplErrorDialog
, SelectHdl
, weld::TreeView
&, void)
1673 OUString aExplanation
= m_xErrors
->get_selected_id();
1674 m_xExplanation
->set_label(aExplanation
);
1677 /// The digital signatures tab page
1678 ImpPDFTabSigningPage::ImpPDFTabSigningPage(weld::Container
* pPage
, weld::DialogController
* pController
, const SfxItemSet
& rCoreSet
)
1679 : SfxTabPage(pPage
, pController
, "filter/ui/pdfsignpage.ui", "PdfSignPage", &rCoreSet
)
1680 , mxEdSignCert(m_xBuilder
->weld_entry("cert"))
1681 , mxPbSignCertSelect(m_xBuilder
->weld_button("select"))
1682 , mxPbSignCertClear(m_xBuilder
->weld_button("clear"))
1683 , mxEdSignPassword(m_xBuilder
->weld_entry("password"))
1684 , mxEdSignLocation(m_xBuilder
->weld_entry("location"))
1685 , mxEdSignContactInfo(m_xBuilder
->weld_entry("contact"))
1686 , mxEdSignReason(m_xBuilder
->weld_entry("reason"))
1687 , mxLBSignTSA(m_xBuilder
->weld_combo_box("tsa"))
1689 mxPbSignCertSelect
->set_sensitive(true);
1690 mxPbSignCertSelect
->connect_clicked(LINK(this, ImpPDFTabSigningPage
, ClickmaPbSignCertSelect
));
1691 mxPbSignCertClear
->connect_clicked(LINK(this, ImpPDFTabSigningPage
, ClickmaPbSignCertClear
));
1694 ImpPDFTabSigningPage::~ImpPDFTabSigningPage()
1698 IMPL_LINK_NOARG(ImpPDFTabSigningPage
, ClickmaPbSignCertSelect
, weld::Button
&, void)
1700 Reference
< security::XDocumentDigitalSignatures
> xSigner(
1701 security::DocumentDigitalSignatures::createDefault(
1702 comphelper::getProcessComponentContext()));
1703 xSigner
->setParentWindow(GetFrameWeld()->GetXWindow());
1705 // The use may provide a description while choosing a certificate.
1706 OUString aDescription
;
1707 maSignCertificate
= xSigner
->selectSigningCertificateWithType(
1708 security::CertificateKind::CertificateKind_X509
, aDescription
);
1710 if (!maSignCertificate
.is())
1713 mxEdSignCert
->set_text(maSignCertificate
->getSubjectName());
1714 mxPbSignCertClear
->set_sensitive(true);
1715 mxEdSignLocation
->set_sensitive(true);
1716 mxEdSignPassword
->set_sensitive(true);
1717 mxEdSignContactInfo
->set_sensitive(true);
1718 mxEdSignReason
->set_sensitive(true);
1719 mxEdSignReason
->set_text(aDescription
);
1723 std::optional
<css::uno::Sequence
<OUString
>> aTSAURLs(officecfg::Office::Common::Security::Scripting::TSAURLs::get());
1726 const css::uno::Sequence
<OUString
>& rTSAURLs
= *aTSAURLs
;
1727 for (auto const& elem
: rTSAURLs
)
1729 mxLBSignTSA
->append_text(elem
);
1733 catch (const uno::Exception
&)
1735 TOOLS_INFO_EXCEPTION("filter.pdf", "TSAURLsDialog::TSAURLsDialog()");
1738 // If more than only the "None" entry is there, enable the ListBox
1739 if (mxLBSignTSA
->get_count() > 1)
1740 mxLBSignTSA
->set_sensitive(true);
1743 IMPL_LINK_NOARG(ImpPDFTabSigningPage
, ClickmaPbSignCertClear
, weld::Button
&, void)
1745 mxEdSignCert
->set_text("");
1746 maSignCertificate
.clear();
1747 mxPbSignCertClear
->set_sensitive(false);
1748 mxEdSignLocation
->set_sensitive(false);
1749 mxEdSignPassword
->set_sensitive(false);
1750 mxEdSignContactInfo
->set_sensitive(false);
1751 mxEdSignReason
->set_sensitive(false);
1752 mxLBSignTSA
->set_sensitive(false);
1755 std::unique_ptr
<SfxTabPage
> ImpPDFTabSigningPage::Create( weld::Container
* pPage
, weld::DialogController
* pController
,
1756 const SfxItemSet
* rAttrSet
)
1758 return std::make_unique
<ImpPDFTabSigningPage
>(pPage
, pController
, *rAttrSet
);
1761 void ImpPDFTabSigningPage::GetFilterConfigItem( ImpPDFTabDialog
* pParent
)
1763 pParent
->mbSignPDF
= maSignCertificate
.is();
1764 pParent
->maSignCertificate
= maSignCertificate
;
1765 pParent
->msSignLocation
= mxEdSignLocation
->get_text();
1766 pParent
->msSignPassword
= mxEdSignPassword
->get_text();
1767 pParent
->msSignContact
= mxEdSignContactInfo
->get_text();
1768 pParent
->msSignReason
= mxEdSignReason
->get_text();
1769 // Entry 0 is 'None'
1770 if (mxLBSignTSA
->get_active() >= 1)
1771 pParent
->msSignTSA
= mxLBSignTSA
->get_active_text();
1774 void ImpPDFTabSigningPage::SetFilterConfigItem( const ImpPDFTabDialog
* pParent
)
1776 mxEdSignLocation
->set_sensitive(false);
1777 mxEdSignPassword
->set_sensitive(false);
1778 mxEdSignContactInfo
->set_sensitive(false);
1779 mxEdSignReason
->set_sensitive(false);
1780 mxLBSignTSA
->set_sensitive(false);
1781 mxPbSignCertClear
->set_sensitive(false);
1783 if (pParent
->mbSignPDF
)
1785 mxEdSignPassword
->set_text(pParent
->msSignPassword
);
1786 mxEdSignLocation
->set_text(pParent
->msSignLocation
);
1787 mxEdSignContactInfo
->set_text(pParent
->msSignContact
);
1788 mxEdSignReason
->set_text(pParent
->msSignReason
);
1789 maSignCertificate
= pParent
->maSignCertificate
;
1793 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */