summaryrefslogtreecommitdiff
path: root/filter/source/pdf/pdfexport.hxx
blob: 5dbe15e3684690217ce4e1245e9b77af54aceea9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */

#pragma once

#include <tools/multisel.hxx>
#include <vcl/pdfwriter.hxx>
#include <vcl/pdfextoutdevdata.hxx>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/task/XInteractionHandler.hpp>
#include <com/sun/star/task/XStatusIndicator.hpp>
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/view/XRenderable.hpp>

class GDIMetaFile;
class Size;

namespace vcl { class PDFWriter; }

class PDFExport
{
private:

    css::uno::Reference< css::lang::XComponent > mxSrcDoc;
    css::uno::Reference< css::uno::XComponentContext > mxContext;
    css::uno::Reference< css::task::XStatusIndicator > mxStatusIndicator;
    css::uno::Reference< css::task::XInteractionHandler > mxIH;

    bool                mbUseTaggedPDF;
    sal_Int32           mnPDFTypeSelection;
    bool                mbPDFUACompliance;
    bool                mbExportNotes;
    bool                mbExportNotesInMargin;
    bool                mbExportPlaceholders;
    bool                mbUseReferenceXObject;
    bool                mbExportNotesPages;
    bool                mbExportOnlyNotesPages;
    bool                mbUseTransitionEffects;
    bool                mbExportBookmarks;
    bool                mbExportHiddenSlides;
    bool                mbSinglePageSheets;
    sal_Int32           mnOpenBookmarkLevels;

    bool                mbUseLosslessCompression;
    bool                mbReduceImageResolution;
    bool                mbSkipEmptyPages;
    bool                mbAddStream;
    sal_Int32           mnMaxImageResolution;
    sal_Int32           mnQuality;
    sal_Int32           mnFormsFormat;
    bool                mbExportFormFields;
    bool                mbAllowDuplicateFieldNames;
    sal_Int32           mnProgressValue;
    bool                mbRemoveTransparencies;

    bool                mbIsRedactMode;

    OUString            msWatermark;
    Color               maWatermarkColor;
    std::optional<sal_Int32> moWatermarkFontHeight;
    OUString            maWatermarkFontName;
    std::optional<Degree10> moWatermarkRotateAngle;
    OUString            msTiledWatermark;

    // these variable are here only to have a location in filter/pdf to set the default
    // to be used by the macro (when the FilterData are set by the macro itself)
    bool                mbHideViewerToolbar;
    bool                mbHideViewerMenubar;
    bool                mbHideViewerWindowControls;
    bool                mbFitWindow;
    bool                mbCenterWindow;
    bool                mbOpenInFullScreenMode;
    bool                mbDisplayPDFDocumentTitle;
    sal_Int32           mnPDFDocumentMode;
    sal_Int32           mnPDFDocumentAction;
    sal_Int32           mnZoom;
    sal_Int32           mnInitialPage;
    sal_Int32           mnPDFPageLayout;

    bool                mbEncrypt;
    bool                mbRestrictPermissions;
    sal_Int32           mnPrintAllowed;
    sal_Int32           mnChangesAllowed;
    bool                mbCanCopyOrExtract;
    bool                mbCanExtractForAccessibility;

    // #i56629
    bool                mbExportRelativeFsysLinks;
    sal_Int32           mnDefaultLinkAction;
    bool                mbConvertOOoTargetToPDFTarget;
    bool                mbExportBmkToDest;
    void                ImplExportPage( vcl::PDFWriter& rWriter, vcl::PDFExtOutDevData& rPDFExtOutDevData,
                                        const GDIMetaFile& rMtf );

    bool                mbSignPDF;
    OUString            msSignLocation;
    OUString            msSignContact;
    OUString            msSignReason;
    OUString            msSignPassword;
    css::uno::Reference< css::security::XCertificate > maSignCertificate;
    OUString            msSignTSA;

    void                ImplWriteWatermark( vcl::PDFWriter& rWriter, const Size& rPageSize );
    void                ImplWriteTiledWatermark( vcl::PDFWriter& rWriter, const Size& rPageSize );
    css::uno::Reference<css::security::XCertificate> GetCertificateFromSubjectName(const std::u16string_view& rSubjectName) const;


public:

                        PDFExport(  const css::uno::Reference< css::lang::XComponent >& rxSrcDoc,
                                    const css::uno::Reference< css::task::XStatusIndicator >& xStatusIndicator,
                                    const css::uno::Reference< css::task::XInteractionHandler >& xIH,
                                    const css::uno::Reference< css::uno::XComponentContext >& xFact );
                        ~PDFExport();

    bool                ExportSelection( vcl::PDFWriter& rPDFWriter,
                                    css::uno::Reference< css::view::XRenderable > const & rRenderable,
                                    const css::uno::Any& rSelection,
                                    const StringRangeEnumerator& rRangeEnum,
                                    css::uno::Sequence< css::beans::PropertyValue >& rRenderOptions,
                                    sal_Int32 nPageCount );

    bool                Export( const OUString& rFile, const css::uno::Sequence< css::beans::PropertyValue >& rFilterData );

    void                showErrors( const std::set<vcl::PDFWriter::ErrorCode>& );
};

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */