PoDoFo 1.2.0
Loading...
Searching...
No Matches
PdfAction.h
1// SPDX-FileCopyrightText: 2006 Dominik Seichter <domseichter@web.de>
2// SPDX-FileCopyrightText: 2020 Francesco Pretto <ceztko@gmail.com>
3// SPDX-License-Identifier: LGPL-2.0-or-later OR MPL-2.0
4
5#ifndef PDF_ACTION_H
6#define PDF_ACTION_H
7
8#include "PdfDeclarations.h"
9
10#include "PdfElement.h"
11
12namespace PoDoFo {
13
14class PdfDocument;
15
26{
27 Unknown = 0,
28 GoTo,
29 GoToR,
30 GoToE,
31 Launch,
32 Thread,
33 URI,
34 Sound,
35 Movie,
36 Hide,
37 Named,
38 SubmitForm,
39 ResetForm,
40 ImportData,
41 JavaScript,
42 SetOCGState,
43 Rendition,
44 Trans,
45 GoTo3DView,
46 RichMediaExecute,
47};
48
51class PODOFO_API PdfAction : public PdfDictionaryElement
52{
53 friend class PdfDocument;
54 friend class PdfAnnotationActionBase;
55 friend class PdfOutlineItem;
56 friend class PdfActionGoTo;
57 friend class PdfActionGoToR;
58 friend class PdfActionGoToE;
59 friend class PdfActionLaunch;
60 friend class PdfActionThread;
61 friend class PdfActionURI;
62 friend class PdfActionSound;
63 friend class PdfActionMovie;
64 friend class PdfActionHide;
65 friend class PdfActionNamed;
66 friend class PdfActionSubmitForm;
67 friend class PdfActionResetForm;
68 friend class PdfActionImportData;
69 friend class PdfActionJavaScript;
70 friend class PdfActionSetOCGState;
71 friend class PdfActionRendition;
72 friend class PdfActionTrans;
73 friend class PdfActionGoTo3DView;
74 friend class PdfActionRichMediaExecute;
75
76private:
78
80
81protected:
82 PdfAction(const PdfAction&) = default;
83
84public:
88 inline PdfActionType GetType() const { return m_Type; }
89
90 static bool TryCreateFromObject(PdfObject& obj, std::unique_ptr<PdfAction>& action);
91
92private:
93 static std::unique_ptr<PdfAction> Create(PdfDocument& doc, PdfActionType type);
94
95 static std::unique_ptr<PdfAction> Create(const PdfAction& action);
96
97 template <typename TAction>
98 static constexpr PdfActionType GetActionType();
99
107 void AddToDictionary(PdfDictionary& dictionary) const;
108
109private:
110 PdfActionType m_Type;
111};
112
113
114class PODOFO_API PdfActionGoTo final : public PdfAction
115{
116 friend class PdfAction;
117
118 PdfActionGoTo(PdfDocument& doc);
119
120 PdfActionGoTo(PdfObject& obj);
121
122 PdfActionGoTo(const PdfActionGoTo&) = default;
123public:
124};
125
126class PODOFO_API PdfActionGoToR final : public PdfAction
127{
128 friend class PdfAction;
129
130 PdfActionGoToR(PdfDocument& doc);
131
132 PdfActionGoToR(PdfObject& obj);
133
134 PdfActionGoToR(const PdfActionGoToR&) = default;
135public:
136};
137
138class PODOFO_API PdfActionGoToE final : public PdfAction
139{
140 friend class PdfAction;
141
142 PdfActionGoToE(PdfDocument& doc);
143
144 PdfActionGoToE(PdfObject& obj);
145
146 PdfActionGoToE(const PdfActionGoToE&) = default;
147public:
148};
149
150class PODOFO_API PdfActionLaunch final : public PdfAction
151{
152 friend class PdfAction;
153
154 PdfActionLaunch(PdfDocument& doc);
155
156 PdfActionLaunch(PdfObject& obj);
157
158 PdfActionLaunch(const PdfActionLaunch&) = default;
159public:
160};
161
162class PODOFO_API PdfActionThread final : public PdfAction
163{
164 friend class PdfAction;
165
166 PdfActionThread(PdfDocument& doc);
167
168 PdfActionThread(PdfObject& obj);
169
170 PdfActionThread(const PdfActionThread&) = default;
171public:
172};
173
174class PODOFO_API PdfActionURI final : public PdfAction
175{
176 friend class PdfAction;
177
178 PdfActionURI(PdfDocument& doc);
179
180 PdfActionURI(PdfObject& obj);
181
182 PdfActionURI(const PdfActionURI&) = default;
183
184public:
188 void SetURI(nullable<const PdfString&> uri);
189
193 nullable<const PdfString&> GetURI() const;
194};
195
196class PODOFO_API PdfActionSound final : public PdfAction
197{
198 friend class PdfAction;
199
200 PdfActionSound(PdfDocument& doc);
201
202 PdfActionSound(PdfObject& obj);
203
204 PdfActionSound(const PdfActionSound&) = default;
205public:
206};
207
208class PODOFO_API PdfActionMovie final : public PdfAction
209{
210 friend class PdfAction;
211
212 PdfActionMovie(PdfDocument& doc);
213
214 PdfActionMovie(PdfObject& obj);
215
216 PdfActionMovie(const PdfActionMovie&) = default;
217public:
218};
219
220class PODOFO_API PdfActionHide final : public PdfAction
221{
222 friend class PdfAction;
223
224 PdfActionHide(PdfDocument& doc);
225
226 PdfActionHide(PdfObject& obj);
227
228 PdfActionHide(const PdfActionHide&) = default;
229public:
230};
231
232class PODOFO_API PdfActionNamed final : public PdfAction
233{
234 friend class PdfAction;
235
236 PdfActionNamed(PdfDocument& doc);
237
238 PdfActionNamed(PdfObject& obj);
239
240 PdfActionNamed(const PdfActionNamed&) = default;
241public:
242};
243
244class PODOFO_API PdfActionSubmitForm final : public PdfAction
245{
246 friend class PdfAction;
247
248 PdfActionSubmitForm(PdfDocument& doc);
249
250 PdfActionSubmitForm(PdfObject& obj);
251
252 PdfActionSubmitForm(const PdfActionSubmitForm&) = default;
253public:
254};
255
256class PODOFO_API PdfActionResetForm final : public PdfAction
257{
258 friend class PdfAction;
259
260 PdfActionResetForm(PdfDocument& doc);
261
262 PdfActionResetForm(PdfObject& obj);
263
264 PdfActionResetForm(const PdfActionResetForm&) = default;
265public:
266};
267
268class PODOFO_API PdfActionImportData final : public PdfAction
269{
270 friend class PdfAction;
271
272 PdfActionImportData(PdfDocument& doc);
273
274 PdfActionImportData(PdfObject& obj);
275
276 PdfActionImportData(const PdfActionImportData&) = default;
277public:
278};
279
280class PODOFO_API PdfActionJavaScript final : public PdfAction
281{
282 friend class PdfAction;
283
284 PdfActionJavaScript(PdfDocument& doc);
285
286 PdfActionJavaScript(PdfObject& obj);
287
288 PdfActionJavaScript(const PdfActionJavaScript&) = default;
289public:
290 void SetScript(nullable<const PdfString&> script);
291
292 nullable<const PdfString&> GetScript() const;
293};
294
295class PODOFO_API PdfActionSetOCGState final : public PdfAction
296{
297 friend class PdfAction;
298
299 PdfActionSetOCGState(PdfDocument& doc);
300
301 PdfActionSetOCGState(PdfObject& obj);
302
303 PdfActionSetOCGState(const PdfActionSetOCGState&) = default;
304public:
305};
306
307class PODOFO_API PdfActionRendition final : public PdfAction
308{
309 friend class PdfAction;
310
311 PdfActionRendition(PdfDocument& doc);
312
313 PdfActionRendition(PdfObject& obj);
314
315 PdfActionRendition(const PdfActionRendition&) = default;
316public:
317};
318
319class PODOFO_API PdfActionTrans : public PdfAction
320{
321 friend class PdfAction;
322
323 PdfActionTrans(PdfDocument& doc);
324
325 PdfActionTrans(PdfObject& obj);
326
327 PdfActionTrans(const PdfActionTrans&) = default;
328public:
329};
330
331class PODOFO_API PdfActionGoTo3DView final : public PdfAction
332{
333 friend class PdfAction;
334
335 PdfActionGoTo3DView(PdfDocument& doc);
336
337 PdfActionGoTo3DView(PdfObject& obj);
338
339 PdfActionGoTo3DView(const PdfActionGoTo3DView&) = default;
340public:
341};
342
343class PODOFO_API PdfActionRichMediaExecute final : public PdfAction
344{
345 friend class PdfAction;
346
347 PdfActionRichMediaExecute(PdfDocument& doc);
348
349 PdfActionRichMediaExecute(PdfObject& obj);
350
351 PdfActionRichMediaExecute(const PdfActionRichMediaExecute&) = default;
352public:
353};
354
355template<typename TAction>
356constexpr PdfActionType PdfAction::GetActionType()
357{
358 if (std::is_same_v<TAction, PdfActionGoTo>)
359 return PdfActionType::GoTo;
360 else if (std::is_same_v<TAction, PdfActionGoToR>)
361 return PdfActionType::GoToR;
362 else if (std::is_same_v<TAction, PdfActionGoToE>)
363 return PdfActionType::GoToE;
364 else if (std::is_same_v<TAction, PdfActionLaunch>)
365 return PdfActionType::Launch;
366 else if (std::is_same_v<TAction, PdfActionThread>)
367 return PdfActionType::Thread;
368 else if (std::is_same_v<TAction, PdfActionURI>)
369 return PdfActionType::URI;
370 else if (std::is_same_v<TAction, PdfActionSound>)
371 return PdfActionType::Sound;
372 else if (std::is_same_v<TAction, PdfActionMovie>)
373 return PdfActionType::Movie;
374 else if (std::is_same_v<TAction, PdfActionHide>)
375 return PdfActionType::Hide;
376 else if (std::is_same_v<TAction, PdfActionNamed>)
377 return PdfActionType::Named;
378 else if (std::is_same_v<TAction, PdfActionSubmitForm>)
379 return PdfActionType::SubmitForm;
380 else if (std::is_same_v<TAction, PdfActionResetForm>)
381 return PdfActionType::ResetForm;
382 else if (std::is_same_v<TAction, PdfActionImportData>)
383 return PdfActionType::ImportData;
384 else if (std::is_same_v<TAction, PdfActionJavaScript>)
385 return PdfActionType::JavaScript;
386 else if (std::is_same_v<TAction, PdfActionSetOCGState>)
387 return PdfActionType::SetOCGState;
388 else if (std::is_same_v<TAction, PdfActionRendition>)
389 return PdfActionType::Rendition;
390 else if (std::is_same_v<TAction, PdfActionTrans>)
391 return PdfActionType::Trans;
392 else if (std::is_same_v<TAction, PdfActionGoTo3DView>)
393 return PdfActionType::GoTo3DView;
394 else if (std::is_same_v<TAction, PdfActionRichMediaExecute>)
395 return PdfActionType::RichMediaExecute;
396 else
397 return PdfActionType::Unknown;
398}
399
400};
401
402#endif // PDF_ACTION_H
This file should be included as the FIRST file in every header of PoDoFo lib.
An action that can be performed in a PDF document.
Definition PdfAction.h:52
PdfActionType GetType() const
Get the type of this action.
Definition PdfAction.h:88
The PDF dictionary data type of PoDoFo (inherits from PdfDataContainer, the base class for such repre...
Definition PdfDictionary.h:80
PdfDocument is the core interface for working with PDF documents.
Definition PdfDocument.h:109
This class represents a PDF indirect Object in memory.
Definition PdfObject.h:33
A PDF outline item has an title and a destination.
Definition PdfOutlines.h:37
Convenient type for char array storage and/or buffer with std::string compatibility.
Definition basetypes.h:35
All classes, functions, types and enums of PoDoFo are members of these namespace.
Definition basetypes.h:13
@ Create
Create a new file or truncate existing one for writing/reading.
PdfActionType
The type of the action.
Definition PdfAction.h:26