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