PoDoFo 1.2.0
Loading...
Searching...
No Matches
PdfObjectStream.h
1// SPDX-FileCopyrightText: 2005 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_OBJECT_STREAM_H
6#define PDF_OBJECT_STREAM_H
7
8#include "PdfDeclarations.h"
9
10#include "PdfEncrypt.h"
11#include <podofo/auxiliary/OutputStream.h>
12#include <podofo/auxiliary/InputStream.h>
13#include "PdfObjectStreamProvider.h"
14
15namespace PoDoFo {
16
17class PdfObject;
18class PdfObjectStream;
19
20class PODOFO_API PdfObjectInputStream final : public InputStream
21{
22 friend class PdfObjectStream;
23public:
24 PdfObjectInputStream();
25 ~PdfObjectInputStream();
26 PdfObjectInputStream(PdfObjectInputStream&& rhs) noexcept;
27private:
28 PdfObjectInputStream(PdfObjectStream& stream, bool raw);
29public:
30 const PdfFilterList& GetMediaFilters() const { return m_MediaFilters; }
31 const std::vector<const PdfDictionary*>& GetMediaDecodeParms() const { return m_MediaDecodeParms; }
32protected:
33 size_t readBuffer(char* buffer, size_t size, bool& eof) override;
34 bool readChar(char& ch) override;
35public:
36 PdfObjectInputStream& operator=(PdfObjectInputStream&& rhs) noexcept;
37private:
38 PdfObjectStream* m_stream;
39 std::unique_ptr<InputStream> m_input;
40 PdfFilterList m_MediaFilters;
41 std::vector<const PdfDictionary*> m_MediaDecodeParms;
42};
43
44class PODOFO_API PdfObjectOutputStream final : public OutputStream
45{
46 friend class PdfObjectStream;
47public:
48 PdfObjectOutputStream();
49 ~PdfObjectOutputStream();
50 PdfObjectOutputStream(PdfObjectOutputStream&& rhs) noexcept;
51private:
56 PdfObjectOutputStream(PdfObjectStream& stream, PdfFilterList&& filters,
57 bool raw, bool append);
58 PdfObjectOutputStream(PdfObjectStream& stream);
59private:
60 PdfObjectOutputStream(PdfObjectStream& stream, nullable<PdfFilterList> filters,
61 bool raw, bool append, bool skipSetDirty);
62protected:
63 void writeBuffer(const char* buffer, size_t size) override;
64 void flush() override;
65public:
66 PdfObjectOutputStream& operator=(PdfObjectOutputStream&& rhs) noexcept;
67private:
68 PdfObjectStream* m_stream;
69 std::unique_ptr<OutputStream> m_output;
70};
71
84class PODOFO_API PdfObjectStream final
85{
86 friend class PdfObject;
87 friend class PdfObjectInputStream;
88 friend class PdfObjectOutputStream;
89 PODOFO_PRIVATE_FRIEND(class PdfParserObject);
90 PODOFO_PRIVATE_FRIEND(class PdfImmediateWriter);
91
92private:
98 PdfObjectStream(PdfObject& parent, std::unique_ptr<PdfObjectStreamProvider>&& provider);
99
100public:
101 virtual ~PdfObjectStream();
102
103 PdfObjectOutputStream GetOutputStreamRaw(bool append = false);
104
105 PdfObjectOutputStream GetOutputStreamRaw(const PdfFilterList& filters, bool append = false);
106
107 PdfObjectOutputStream GetOutputStream(bool append = false);
108
109 PdfObjectOutputStream GetOutputStream(const PdfFilterList& filters, bool append = false);
110
111 PdfObjectInputStream GetInputStream(bool raw = false) const;
112
120 void SetData(const bufferview& buffer, bool raw = false);
121
132 void SetData(const bufferview& buffer, const PdfFilterList& filters, bool raw = false);
133
141 void SetData(InputStream& stream, bool raw = false);
142
153 void SetData(InputStream& stream, const PdfFilterList& filters, bool raw = false);
154
158 charbuff GetCopy(bool raw = false) const;
159
162 charbuff GetCopySafe() const;
163
168 void CopyTo(charbuff& buffer, bool raw = false) const;
169
172 void CopyToSafe(charbuff& buffer) const;
173
178 void CopyTo(OutputStream& stream, bool raw = false) const;
179
182 void CopyToSafe(OutputStream& stream) const;
183
186 void Unwrap();
187
190 void Clear();
191
197 size_t GetLength() const;
198
199 const PdfFilterList& GetFilters() { return m_Filters; }
200
205 PdfObjectStream& operator=(const PdfObjectStream& rhs);
206
207 PdfObjectStream& operator=(PdfObjectStream&& rhs) noexcept;
208
209 const PdfObjectStreamProvider& GetProvider() const { return *m_Provider; }
210
211 const PdfObject& GetParent() const { return *m_Parent; }
212
213 PdfObject& GetParent() { return *m_Parent; }
214
215private:
220 void Write(OutputStream& stream, const PdfStatefulEncrypt* encrypt);
221
222 void SetParent(PdfObject& parent) { m_Parent = &parent; }
223
224 void InitData(InputStream& stream, size_t len, PdfFilterList&& filterList);
225
228 void CopyFrom(const PdfObjectStream& rhs);
229
232 void MoveFrom(PdfObjectStream& rhs);
233
234 PdfObjectStreamProvider& GetProvider() { return *m_Provider; }
235
236private:
237 void ensureClosed() const;
238
239 std::unique_ptr<InputStream> getInputStream(bool raw, PdfFilterList& mediaFilters,
240 std::vector<const PdfDictionary*>& decodeParms);
241
242 void setData(InputStream& stream, PdfFilterList filters, bool raw,
243 ssize_t size, bool markObjectDirty);
244
245private:
246 PdfObjectStream(const PdfObjectStream& rhs) = delete;
247
248private:
249 PdfObject* m_Parent;
250 std::unique_ptr<PdfObjectStreamProvider> m_Provider;
251 PdfFilterList m_Filters;
252 bool m_locked;
253};
254
255};
256
257#endif // PDF_OBJECT_STREAM_H
This file should be included as the FIRST file in every header of PoDoFo lib.
An interface for reading blocks of data from a data source.
Definition InputStream.h:18
An interface for writing blocks of data to a data source.
Definition OutputStream.h:16
A PDF stream can be appended to any PdfObject and can contain arbitrary data.
Definition PdfObjectStream.h:85
This class represents a PDF indirect Object in memory.
Definition PdfObject.h:33
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
cspan< char > bufferview
Convenient read-only char buffer span.
Definition basetypes.h:16