PoDoFo 1.0.0-dev
Loading...
Searching...
No Matches
PdfNameTrees.h
1
7#ifndef PDF_NAME_TREES_H
8#define PDF_NAME_TREES_H
9
10#include "PdfNameTree.h"
11#include "PdfNameTreeOperations.h"
12
13namespace PoDoFo {
14
21class PODOFO_API PdfNameTrees final : public PdfDictionaryElement, public PdfNameTreeOperations
22{
23 friend class PdfDocument;
24
25private:
30
36
37 PdfNameTrees(const PdfNameTrees&) = delete;
38
39public:
40 template <typename TNameTree>
41 TNameTree* GetTree()
42 {
43 return static_cast<TNameTree*>(getNameTree(getType<TNameTree>()));
44 }
45
46 template <typename TNameTree>
47 const TNameTree* GetTree() const
48 {
49 return static_cast<const TNameTree*>(getNameTree(getType<TNameTree>()));
50 }
51
52 template <typename TNameTree>
53 TNameTree& MustGetTree()
54 {
55 return static_cast<TNameTree&>(mustGetNameTree(getType<TNameTree>()));
56 }
57
58 template <typename TNameTree>
59 const TNameTree& MustGetTree() const
60 {
61 return static_cast<const TNameTree&>(mustGetNameTree(getType<TNameTree>()));
62 }
63
64 template <typename TNameTree>
65 TNameTree& GetOrCreateTree()
66 {
67 return static_cast<TNameTree&>(getOrCreateNameTree(getType<TNameTree>()));
68 }
69
70public:
71 const PdfObject* GetValue(PdfKnownNameTree tree, const std::string_view& key) const override;
72 PdfObject* GetValue(PdfKnownNameTree tree, const std::string_view& key) override;
73 bool HasKey(PdfKnownNameTree tree, const std::string_view& key) const override;
74 void ToDictionary(PdfKnownNameTree tree, PdfStringMap<PdfObject>& dict, bool skipClear = false) const override;
75
76private:
77 void AddValue(PdfKnownNameTree tree, const PdfString& key, const PdfObject& value) override;
78 void AddValue(const PdfName& treeName, const PdfString& key, const PdfObject& value) override;
79 const PdfObject* GetValue(const std::string_view& treeName, const std::string_view& key) const override;
80 PdfObject* GetValue(const std::string_view& treeName, const std::string_view& key) override;
81 bool HasKey(const std::string_view& treeName, const std::string_view& key) const override;
82 void ToDictionary(const std::string_view& treeName, PdfStringMap<PdfObject>& dict, bool skipClear = false) const override;
83
84private:
102 PdfObject* getRootNode(const std::string_view& treeName) const;
103 PdfObject& getOrCreateRootNode(const PdfName& treeName);
104
105 PdfObject* getValue(const std::string_view& name, const std::string_view& key) const;
106
107 PdfNameTreeBase* getNameTree(PdfKnownNameTree tree) const;
108
109 PdfNameTreeBase& mustGetNameTree(PdfKnownNameTree tree) const;
110
111 PdfNameTreeBase& getOrCreateNameTree(PdfKnownNameTree tree);
112
113 template <typename TNameTree>
114 static constexpr PdfKnownNameTree getType()
115 {
116 if (std::is_same_v<TNameTree, PdfEmbeddedFiles>)
117 return PdfKnownNameTree::EmbeddedFiles;
118 else if (std::is_same_v<TNameTree, PdfDestinations>)
119 return PdfKnownNameTree::Dests;
120 else
121 return PdfKnownNameTree::Unknown;
122 }
123
124private:
125 nullable<std::unique_ptr<PdfNameTreeBase>> m_Trees[(unsigned)PdfKnownNameTree::Renditions];
126};
127
128};
129
130#endif // PDF_NAME_TREES_H
PdfDocument is the core interface for working with PDF documents.
Definition PdfDocument.h:111
A low level interface with operations to handle document name trees stored in the /Names element.
Definition PdfNameTreeOperations.h:18
Interface to access names trees in the document.
Definition PdfNameTrees.h:22
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:24
This class represents a PDF indirect Object in memory.
Definition PdfObject.h:35
A string that can be written to a PDF document.
Definition PdfString.h:24
Convenient type for char array storage and/or buffer with std::string compatibility.
Definition basetypes.h:38
SPDX-FileCopyrightText: (C) 2022 Francesco Pretto ceztko@gmail.com SPDX-License-Identifier: LGPL-2....
Definition basetypes.h:16