PoDoFo 1.2.0
Loading...
Searching...
No Matches
PdfNameTrees.h
1// SPDX-FileCopyrightText: 2006 Dominik Seichter <domseichter@web.de>
2// SPDX-FileCopyrightText: 2024 Francesco Pretto <ceztko@gmail.com>
3// SPDX-License-Identifier: LGPL-2.0-or-later OR MPL-2.0
4
5#ifndef PDF_NAME_TREES_H
6#define PDF_NAME_TREES_H
7
8#include "PdfNameTree.h"
9#include "PdfNameTreeOperations.h"
10
11namespace PoDoFo {
12
17class PODOFO_API PdfNameTrees final : public PdfDictionaryElement, public PdfNameTreeOperations
18{
19 friend class PdfDocument;
20
21private:
25
30
31 PdfNameTrees(const PdfNameTrees&) = delete;
32
33public:
34 template <typename TNameTree>
35 TNameTree* GetTree()
36 {
37 return static_cast<TNameTree*>(getNameTree(getType<TNameTree>()));
38 }
39
40 template <typename TNameTree>
41 const TNameTree* GetTree() const
42 {
43 return static_cast<const TNameTree*>(getNameTree(getType<TNameTree>()));
44 }
45
46 template <typename TNameTree>
47 TNameTree& MustGetTree()
48 {
49 return static_cast<TNameTree&>(mustGetNameTree(getType<TNameTree>()));
50 }
51
52 template <typename TNameTree>
53 const TNameTree& MustGetTree() const
54 {
55 return static_cast<const TNameTree&>(mustGetNameTree(getType<TNameTree>()));
56 }
57
58 template <typename TNameTree>
59 TNameTree& GetOrCreateTree()
60 {
61 return static_cast<TNameTree&>(getOrCreateNameTree(getType<TNameTree>()));
62 }
63
64public:
65 const PdfObject* GetValue(PdfKnownNameTree tree, const std::string_view& key) const override;
66 PdfObject* GetValue(PdfKnownNameTree tree, const std::string_view& key) override;
67 bool HasKey(PdfKnownNameTree tree, const std::string_view& key) const override;
68 void ToDictionary(PdfKnownNameTree tree, PdfStringMap<PdfObject>& dict, bool skipClear = false) const override;
69
70private:
71 void AddValue(PdfKnownNameTree tree, const PdfString& key, const PdfObject& value) override;
72 void AddValue(const PdfName& treeName, const PdfString& key, const PdfObject& value) override;
73 const PdfObject* GetValue(const std::string_view& treeName, const std::string_view& key) const override;
74 PdfObject* GetValue(const std::string_view& treeName, const std::string_view& key) override;
75 bool HasKey(const std::string_view& treeName, const std::string_view& key) const override;
76 void ToDictionary(const std::string_view& treeName, PdfStringMap<PdfObject>& dict, bool skipClear = false) const override;
77
78private:
95 PdfObject* getRootNode(const std::string_view& treeName) const;
96 PdfObject& getOrCreateRootNode(const PdfName& treeName);
97
98 PdfObject* getValue(const std::string_view& name, const std::string_view& key) const;
99
100 PdfNameTreeBase* getNameTree(PdfKnownNameTree tree) const;
101
102 PdfNameTreeBase& mustGetNameTree(PdfKnownNameTree tree) const;
103
104 PdfNameTreeBase& getOrCreateNameTree(PdfKnownNameTree tree);
105
106 template <typename TNameTree>
107 static constexpr PdfKnownNameTree getType()
108 {
109 if (std::is_same_v<TNameTree, PdfEmbeddedFiles>)
110 return PdfKnownNameTree::EmbeddedFiles;
111 else if (std::is_same_v<TNameTree, PdfDestinations>)
112 return PdfKnownNameTree::Dests;
113 else
114 return PdfKnownNameTree::Unknown;
115 }
116
117private:
118 nullable<std::unique_ptr<PdfNameTreeBase>> m_Trees[(unsigned)PdfKnownNameTree::Renditions];
119};
120
121};
122
123#endif // PDF_NAME_TREES_H
PdfDocument is the core interface for working with PDF documents.
Definition PdfDocument.h:108
A low level interface with operations to handle document name trees stored in the /Names element.
Definition PdfNameTreeOperations.h:15
Interface to access names trees in the document.
Definition PdfNameTrees.h:18
bool HasKey(PdfKnownNameTree tree, const std::string_view &key) const override
Tests whether a certain nametree has a value.
const PdfObject * GetValue(PdfKnownNameTree tree, const std::string_view &key) const override
Get the object referenced by a string key in one of the dictionaries of the name tree.
This class represents a PdfName.
Definition PdfName.h:21
This class represents a PDF indirect Object in memory.
Definition PdfObject.h:31
A string that can be written to a PDF document.
Definition PdfString.h:21
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