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:
54 PdfObjectOutputStream(PdfObjectStream& stream, PdfFilterList&& filters,
55 bool raw, bool append);
56 PdfObjectOutputStream(PdfObjectStream& stream);
57private:
58 PdfObjectOutputStream(PdfObjectStream& stream, nullable<PdfFilterList> filters,
59 bool raw, bool append, bool skipSetDirty);
60protected:
61 void writeBuffer(const char* buffer, size_t size) override;
62 void flush() override;
63public:
64 PdfObjectOutputStream& operator=(PdfObjectOutputStream&& rhs) noexcept;
65private:
66 PdfObjectStream* m_stream;
67 std::unique_ptr<OutputStream> m_output;
68};
69
81class PODOFO_API PdfObjectStream final
82{
83 friend class PdfObject;
84 friend class PdfObjectInputStream;
85 friend class PdfObjectOutputStream;
86 PODOFO_PRIVATE_FRIEND(class PdfParserObject);
87 PODOFO_PRIVATE_FRIEND(class PdfImmediateWriter);
88
89private:
94 PdfObjectStream(PdfObject& parent, std::unique_ptr<PdfObjectStreamProvider>&& provider);
95
96public:
97 virtual ~PdfObjectStream();
98
99 PdfObjectOutputStream GetOutputStreamRaw(bool append = false);
100
101 PdfObjectOutputStream GetOutputStreamRaw(const PdfFilterList& filters, bool append = false);
102
103 PdfObjectOutputStream GetOutputStream(bool append = false);
104
105 PdfObjectOutputStream GetOutputStream(const PdfFilterList& filters, bool append = false);
106
107 PdfObjectInputStream GetInputStream(bool raw = false) const;
108
115 void SetData(const bufferview& buffer, bool raw = false);
116
126 void SetData(const bufferview& buffer, const PdfFilterList& filters, bool raw = false);
127
134 void SetData(InputStream& stream, bool raw = false);
135
145 void SetData(InputStream& stream, const PdfFilterList& filters, bool raw = false);
146
149 charbuff GetCopy(bool raw = false) const;
150
152 charbuff GetCopySafe() const;
153
157 void CopyTo(charbuff& buffer, bool raw = false) const;
158
160 void CopyToSafe(charbuff& buffer) const;
161
165 void CopyTo(OutputStream& stream, bool raw = false) const;
166
168 void CopyToSafe(OutputStream& stream) const;
169
171 void Unwrap();
172
174 void Clear();
175
180 size_t GetLength() const;
181
182 const PdfFilterList& GetFilters() { return m_Filters; }
183
187 PdfObjectStream& operator=(const PdfObjectStream& rhs);
188
189 PdfObjectStream& operator=(PdfObjectStream&& rhs) noexcept;
190
191 const PdfObjectStreamProvider& GetProvider() const { return *m_Provider; }
192
193 const PdfObject& GetParent() const { return *m_Parent; }
194
195 PdfObject& GetParent() { return *m_Parent; }
196
197private:
201 void Write(OutputStream& stream, const PdfStatefulEncrypt* encrypt);
202
203 void SetParent(PdfObject& parent) { m_Parent = &parent; }
204
205 void InitData(InputStream& stream, size_t len, PdfFilterList&& filterList);
206
208 void CopyFrom(const PdfObjectStream& rhs);
209
211 void MoveFrom(PdfObjectStream& rhs);
212
213 PdfObjectStreamProvider& GetProvider() { return *m_Provider; }
214
215private:
216 void ensureClosed() const;
217
218 std::unique_ptr<InputStream> getInputStream(bool raw, PdfFilterList& mediaFilters,
219 std::vector<const PdfDictionary*>& decodeParms);
220
221 void setData(InputStream& stream, PdfFilterList filters, bool raw,
222 ssize_t size, bool markObjectDirty);
223
224private:
225 PdfObjectStream(const PdfObjectStream& rhs) = delete;
226
227private:
228 PdfObject* m_Parent;
229 std::unique_ptr<PdfObjectStreamProvider> m_Provider;
230 PdfFilterList m_Filters;
231 bool m_locked;
232};
233
234};
235
236#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:17
An interface for writing blocks of data to a data source.
Definition OutputStream.h:15
A PDF stream can be appended to any PdfObject and can contain arbitrary data.
Definition PdfObjectStream.h:82
This class represents a PDF indirect Object in memory.
Definition PdfObject.h:31
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
cspan< char > bufferview
Convenient read-only char buffer span.
Definition basetypes.h:15