PoDoFo 1.2.0
Loading...
Searching...
No Matches
PdfXMPPacket.h
1// SPDX-FileCopyrightText: 2022 Francesco Pretto <ceztko@gmail.com>
2// SPDX-License-Identifier: LGPL-2.0-or-later OR MPL-2.0
3
4#ifndef PDF_XMP_PACKET
5#define PDF_XMP_PACKET
6
7#include "PdfMetadataStore.h"
8
9extern "C"
10{
11 typedef struct _xmlDoc xmlDoc;
12 typedef xmlDoc* xmlDocPtr;
13 typedef struct _xmlNode xmlNode;
14 typedef xmlNode* xmlNodePtr;
15}
16
17namespace PoDoFo
18{
19 class PdfXMPPacket;
20
21 class PODOFO_API PdfXMPProperty final
22 {
23 friend class PdfXMPPacket;
24 private:
25 PdfXMPProperty();
26 public:
27 const std::string& GetName() const { return Name; }
28 const std::string& GetNamespace() const { return Namespace; }
29 const std::string& GetPrefix() const { return Prefix; }
30 std::string GetPrefixedName() const;
31 bool IsValid() const;
32 bool IsDuplicated() const;
33 bool HasInvalidPrefix() const;
34 private:
35 std::string Name;
36 std::string Namespace;
37 std::string Prefix;
38 unsigned Error;
39 };
40
41 class PODOFO_API PdfXMPPacket final
42 {
43 public:
44 PdfXMPPacket();
45 PdfXMPPacket(const PdfXMPPacket&) = delete;
46 ~PdfXMPPacket();
47
48 static std::unique_ptr<PdfXMPPacket> Create(const std::string_view& xmpview);
49
50 public:
51 PdfMetadataStore GetMetadata() const;
52 void GetMetadata(PdfMetadataStore& metadata) const;
53 void SetMetadata(const PdfMetadataStore& metadata);
54 void ToString(std::string& str) const;
55 std::string ToString() const;
57 void PruneAndValidate(PdfALevel level, const std::function<void(const PdfXMPProperty& prop)>& warnings = nullptr);
58#ifdef PODOFO_3RDPARTY_INTEROP_ENABLED
59 void PruneAndValidate(PdfALevel level, const std::function<void(const PdfXMPProperty& prop, xmlNodePtr)>& warnings);
60 xmlDocPtr GetDoc() { return m_Doc; }
61 xmlNodePtr GetOrCreateDescription();
62 xmlNodePtr GetDescription() { return m_Description; }
63#endif // PODOFO_3RDPARTY_INTEROP_ENABLED
64
65 public:
66 PdfXMPPacket& operator=(const PdfXMPPacket&) = delete;
67
68 private:
69 PdfXMPPacket(xmlDocPtr doc, xmlNodePtr xmpmeta);
70
71 private:
72 xmlDocPtr m_Doc;
73 xmlNodePtr m_XMPMeta;
74 xmlNodePtr m_Description;
75 };
76}
77
78#endif // PDF_XMP_PACKET
All classes, functions, types and enums of PoDoFo are members of these namespace.
Definition basetypes.h:13
@ Name
Name datatype. Names are used as keys in dictionary to reference values.
@ Create
Create a new file or truncate existing one for writing/reading.