• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef PUBLIC_FPDF_ATTACHMENT_H_
6 #define PUBLIC_FPDF_ATTACHMENT_H_
7 
8 // NOLINTNEXTLINE(build/include)
9 #include "fpdfview.h"
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif  // __cplusplus
14 
15 // Experimental API.
16 // Get the number of embedded files in |document|.
17 //
18 //   document - handle to a document.
19 //
20 // Returns the number of embedded files in |document|.
21 FPDF_EXPORT int FPDF_CALLCONV
22 FPDFDoc_GetAttachmentCount(FPDF_DOCUMENT document);
23 
24 // Experimental API.
25 // Add an embedded file with |name| in |document|. If |name| is empty, or if
26 // |name| is the name of a existing embedded file in |document|, or if
27 // |document|'s embedded file name tree is too deep (i.e. |document| has too
28 // many embedded files already), then a new attachment will not be added.
29 //
30 //   document - handle to a document.
31 //   name     - name of the new attachment.
32 //
33 // Returns a handle to the new attachment object, or NULL on failure.
34 FPDF_EXPORT FPDF_ATTACHMENT FPDF_CALLCONV
35 FPDFDoc_AddAttachment(FPDF_DOCUMENT document, FPDF_WIDESTRING name);
36 
37 // Experimental API.
38 // Get the embedded attachment at |index| in |document|. Note that the returned
39 // attachment handle is only valid while |document| is open.
40 //
41 //   document - handle to a document.
42 //   index    - the index of the requested embedded file.
43 //
44 // Returns the handle to the attachment object, or NULL on failure.
45 FPDF_EXPORT FPDF_ATTACHMENT FPDF_CALLCONV
46 FPDFDoc_GetAttachment(FPDF_DOCUMENT document, int index);
47 
48 // Experimental API.
49 // Delete the embedded attachment at |index| in |document|. Note that this does
50 // not remove the attachment data from the PDF file; it simply removes the
51 // file's entry in the embedded files name tree so that it does not appear in
52 // the attachment list. This behavior may change in the future.
53 //
54 //   document - handle to a document.
55 //   index    - the index of the embedded file to be deleted.
56 //
57 // Returns true if successful.
58 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
59 FPDFDoc_DeleteAttachment(FPDF_DOCUMENT document, int index);
60 
61 // Experimental API.
62 // Get the name of the |attachment| file. |buffer| is only modified if |buflen|
63 // is longer than the length of the file name. On errors, |buffer| is unmodified
64 // and the returned length is 0.
65 //
66 //   attachment - handle to an attachment.
67 //   buffer     - buffer for holding the file name, encoded in UTF16-LE.
68 //   buflen     - length of the buffer.
69 //
70 // Returns the length of the file name.
71 FPDF_EXPORT unsigned long FPDF_CALLCONV
72 FPDFAttachment_GetName(FPDF_ATTACHMENT attachment,
73                        void* buffer,
74                        unsigned long buflen);
75 
76 // Experimental API.
77 // Check if the params dictionary of |attachment| has |key| as a key.
78 //
79 //   attachment - handle to an attachment.
80 //   key        - the key to look for, encoded in UTF-8.
81 //
82 // Returns true if |key| exists.
83 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
84 FPDFAttachment_HasKey(FPDF_ATTACHMENT attachment, FPDF_BYTESTRING key);
85 
86 // Experimental API.
87 // Get the type of the value corresponding to |key| in the params dictionary of
88 // the embedded |attachment|.
89 //
90 //   attachment - handle to an attachment.
91 //   key        - the key to look for, encoded in UTF-8.
92 //
93 // Returns the type of the dictionary value.
94 FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV
95 FPDFAttachment_GetValueType(FPDF_ATTACHMENT attachment, FPDF_BYTESTRING key);
96 
97 // Experimental API.
98 // Set the string value corresponding to |key| in the params dictionary of the
99 // embedded file |attachment|, overwriting the existing value if any. The value
100 // type should be FPDF_OBJECT_STRING after this function call succeeds.
101 //
102 //   attachment - handle to an attachment.
103 //   key        - the key to the dictionary entry, encoded in UTF-8.
104 //   value      - the string value to be set, encoded in UTF16-LE.
105 //
106 // Returns true if successful.
107 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
108 FPDFAttachment_SetStringValue(FPDF_ATTACHMENT attachment,
109                               FPDF_BYTESTRING key,
110                               FPDF_WIDESTRING value);
111 
112 // Experimental API.
113 // Get the string value corresponding to |key| in the params dictionary of the
114 // embedded file |attachment|. |buffer| is only modified if |buflen| is longer
115 // than the length of the string value. Note that if |key| does not exist in the
116 // dictionary or if |key|'s corresponding value in the dictionary is not a
117 // string (i.e. the value is not of type FPDF_OBJECT_STRING or
118 // FPDF_OBJECT_NAME), then an empty string would be copied to |buffer| and the
119 // return value would be 2. On other errors, nothing would be added to |buffer|
120 // and the return value would be 0.
121 //
122 //   attachment - handle to an attachment.
123 //   key        - the key to the requested string value, encoded in UTF-8.
124 //   buffer     - buffer for holding the string value encoded in UTF16-LE.
125 //   buflen     - length of the buffer.
126 //
127 // Returns the length of the dictionary value string.
128 FPDF_EXPORT unsigned long FPDF_CALLCONV
129 FPDFAttachment_GetStringValue(FPDF_ATTACHMENT attachment,
130                               FPDF_BYTESTRING key,
131                               void* buffer,
132                               unsigned long buflen);
133 
134 // Experimental API.
135 // Set the file data of |attachment|, overwriting the existing file data if any.
136 // The creation date and checksum will be updated, while all other dictionary
137 // entries will be deleted. Note that only contents with |len| smaller than
138 // INT_MAX is supported.
139 //
140 //   attachment - handle to an attachment.
141 //   contents   - buffer holding the file data to be written in raw bytes.
142 //   len        - length of file data.
143 //
144 // Returns true if successful.
145 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
146 FPDFAttachment_SetFile(FPDF_ATTACHMENT attachment,
147                        FPDF_DOCUMENT document,
148                        const void* contents,
149                        const unsigned long len);
150 
151 // Experimental API.
152 // Get the file data of |attachment|. |buffer| is only modified if |buflen| is
153 // longer than the length of the file. On errors, |buffer| is unmodified and the
154 // returned length is 0.
155 //
156 //   attachment - handle to an attachment.
157 //   buffer     - buffer for holding the file data in raw bytes.
158 //   buflen     - length of the buffer.
159 //
160 // Returns the length of the file.
161 FPDF_EXPORT unsigned long FPDF_CALLCONV
162 FPDFAttachment_GetFile(FPDF_ATTACHMENT attachment,
163                        void* buffer,
164                        unsigned long buflen);
165 
166 #ifdef __cplusplus
167 }  // extern "C"
168 #endif  // __cplusplus
169 
170 #endif  // PUBLIC_FPDF_ATTACHMENT_H_
171