|  | // Copyright 2017 PDFium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef PUBLIC_FPDF_ATTACHMENT_H_ | 
|  | #define PUBLIC_FPDF_ATTACHMENT_H_ | 
|  |  | 
|  | // NOLINTNEXTLINE(build/include) | 
|  | #include "fpdfview.h" | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif  // __cplusplus | 
|  |  | 
|  | // Experimental API. | 
|  | // Get the number of embedded files in |document|. | 
|  | // | 
|  | //   document - handle to a document. | 
|  | // | 
|  | // Returns the number of embedded files in |document|. | 
|  | FPDF_EXPORT int FPDF_CALLCONV | 
|  | FPDFDoc_GetAttachmentCount(FPDF_DOCUMENT document); | 
|  |  | 
|  | // Experimental API. | 
|  | // Add an embedded file with |name| in |document|. If |name| is empty, or if | 
|  | // |name| is the name of a existing embedded file in |document|, or if | 
|  | // |document|'s embedded file name tree is too deep (i.e. |document| has too | 
|  | // many embedded files already), then a new attachment will not be added. | 
|  | // | 
|  | //   document - handle to a document. | 
|  | //   name     - name of the new attachment. | 
|  | // | 
|  | // Returns a handle to the new attachment object, or NULL on failure. | 
|  | FPDF_EXPORT FPDF_ATTACHMENT FPDF_CALLCONV | 
|  | FPDFDoc_AddAttachment(FPDF_DOCUMENT document, FPDF_WIDESTRING name); | 
|  |  | 
|  | // Experimental API. | 
|  | // Get the embedded attachment at |index| in |document|. Note that the returned | 
|  | // attachment handle is only valid while |document| is open. | 
|  | // | 
|  | //   document - handle to a document. | 
|  | //   index    - the index of the requested embedded file. | 
|  | // | 
|  | // Returns the handle to the attachment object, or NULL on failure. | 
|  | FPDF_EXPORT FPDF_ATTACHMENT FPDF_CALLCONV | 
|  | FPDFDoc_GetAttachment(FPDF_DOCUMENT document, int index); | 
|  |  | 
|  | // Experimental API. | 
|  | // Delete the embedded attachment at |index| in |document|. Note that this does | 
|  | // not remove the attachment data from the PDF file; it simply removes the | 
|  | // file's entry in the embedded files name tree so that it does not appear in | 
|  | // the attachment list. This behavior may change in the future. | 
|  | // | 
|  | //   document - handle to a document. | 
|  | //   index    - the index of the embedded file to be deleted. | 
|  | // | 
|  | // Returns true if successful. | 
|  | FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV | 
|  | FPDFDoc_DeleteAttachment(FPDF_DOCUMENT document, int index); | 
|  |  | 
|  | // Experimental API. | 
|  | // Get the name of the |attachment| file. |buffer| is only modified if |buflen| | 
|  | // is longer than the length of the file name. On errors, |buffer| is unmodified | 
|  | // and the returned length is 0. | 
|  | // | 
|  | //   attachment - handle to an attachment. | 
|  | //   buffer     - buffer for holding the file name, encoded in UTF-16LE. | 
|  | //   buflen     - length of the buffer in bytes. | 
|  | // | 
|  | // Returns the length of the file name in bytes. | 
|  | FPDF_EXPORT unsigned long FPDF_CALLCONV | 
|  | FPDFAttachment_GetName(FPDF_ATTACHMENT attachment, | 
|  | FPDF_WCHAR* buffer, | 
|  | unsigned long buflen); | 
|  |  | 
|  | // Experimental API. | 
|  | // Check if the params dictionary of |attachment| has |key| as a key. | 
|  | // | 
|  | //   attachment - handle to an attachment. | 
|  | //   key        - the key to look for, encoded in UTF-8. | 
|  | // | 
|  | // Returns true if |key| exists. | 
|  | FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV | 
|  | FPDFAttachment_HasKey(FPDF_ATTACHMENT attachment, FPDF_BYTESTRING key); | 
|  |  | 
|  | // Experimental API. | 
|  | // Get the type of the value corresponding to |key| in the params dictionary of | 
|  | // the embedded |attachment|. | 
|  | // | 
|  | //   attachment - handle to an attachment. | 
|  | //   key        - the key to look for, encoded in UTF-8. | 
|  | // | 
|  | // Returns the type of the dictionary value. | 
|  | FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV | 
|  | FPDFAttachment_GetValueType(FPDF_ATTACHMENT attachment, FPDF_BYTESTRING key); | 
|  |  | 
|  | // Experimental API. | 
|  | // Set the string value corresponding to |key| in the params dictionary of the | 
|  | // embedded file |attachment|, overwriting the existing value if any. The value | 
|  | // type should be FPDF_OBJECT_STRING after this function call succeeds. | 
|  | // | 
|  | //   attachment - handle to an attachment. | 
|  | //   key        - the key to the dictionary entry, encoded in UTF-8. | 
|  | //   value      - the string value to be set, encoded in UTF-16LE. | 
|  | // | 
|  | // Returns true if successful. | 
|  | FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV | 
|  | FPDFAttachment_SetStringValue(FPDF_ATTACHMENT attachment, | 
|  | FPDF_BYTESTRING key, | 
|  | FPDF_WIDESTRING value); | 
|  |  | 
|  | // Experimental API. | 
|  | // Get the string value corresponding to |key| in the params dictionary of the | 
|  | // embedded file |attachment|. |buffer| is only modified if |buflen| is longer | 
|  | // than the length of the string value. Note that if |key| does not exist in the | 
|  | // dictionary or if |key|'s corresponding value in the dictionary is not a | 
|  | // string (i.e. the value is not of type FPDF_OBJECT_STRING or | 
|  | // FPDF_OBJECT_NAME), then an empty string would be copied to |buffer| and the | 
|  | // return value would be 2. On other errors, nothing would be added to |buffer| | 
|  | // and the return value would be 0. | 
|  | // | 
|  | //   attachment - handle to an attachment. | 
|  | //   key        - the key to the requested string value, encoded in UTF-8. | 
|  | //   buffer     - buffer for holding the string value encoded in UTF-16LE. | 
|  | //   buflen     - length of the buffer in bytes. | 
|  | // | 
|  | // Returns the length of the dictionary value string in bytes. | 
|  | FPDF_EXPORT unsigned long FPDF_CALLCONV | 
|  | FPDFAttachment_GetStringValue(FPDF_ATTACHMENT attachment, | 
|  | FPDF_BYTESTRING key, | 
|  | FPDF_WCHAR* buffer, | 
|  | unsigned long buflen); | 
|  |  | 
|  | // Experimental API. | 
|  | // Set the file data of |attachment|, overwriting the existing file data if any. | 
|  | // The creation date and checksum will be updated, while all other dictionary | 
|  | // entries will be deleted. Note that only contents with |len| smaller than | 
|  | // INT_MAX is supported. | 
|  | // | 
|  | //   attachment - handle to an attachment. | 
|  | //   contents   - buffer holding the file data to write to |attachment|. | 
|  | //   len        - length of file data in bytes. | 
|  | // | 
|  | // Returns true if successful. | 
|  | FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV | 
|  | FPDFAttachment_SetFile(FPDF_ATTACHMENT attachment, | 
|  | FPDF_DOCUMENT document, | 
|  | const void* contents, | 
|  | unsigned long len); | 
|  |  | 
|  | // Experimental API. | 
|  | // Get the file data of |attachment|. | 
|  | // When the attachment file data is readable, true is returned, and |out_buflen| | 
|  | // is updated to indicate the file data size. |buffer| is only modified if | 
|  | // |buflen| is non-null and long enough to contain the entire file data. Callers | 
|  | // must check both the return value and the input |buflen| is no less than the | 
|  | // returned |out_buflen| before using the data. | 
|  | // | 
|  | // Otherwise, when the attachment file data is unreadable or when |out_buflen| | 
|  | // is null, false is returned and |buffer| and |out_buflen| remain unmodified. | 
|  | // | 
|  | //   attachment - handle to an attachment. | 
|  | //   buffer     - buffer for holding the file data from |attachment|. | 
|  | //   buflen     - length of the buffer in bytes. | 
|  | //   out_buflen - pointer to the variable that will receive the minimum buffer | 
|  | //                size to contain the file data of |attachment|. | 
|  | // | 
|  | // Returns true on success, false otherwise. | 
|  | FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV | 
|  | FPDFAttachment_GetFile(FPDF_ATTACHMENT attachment, | 
|  | void* buffer, | 
|  | unsigned long buflen, | 
|  | unsigned long* out_buflen); | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | }  // extern "C" | 
|  | #endif  // __cplusplus | 
|  |  | 
|  | #endif  // PUBLIC_FPDF_ATTACHMENT_H_ |