1// Copyright 2014 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// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#ifndef PUBLIC_FPDF_EDIT_H_
8#define PUBLIC_FPDF_EDIT_H_
9
10#include <stdint.h>
11
12#include "fpdfview.h"
13
14// Define all types used in the SDK. Note they can be simply regarded as opaque
15// pointers
16// or long integer numbers.
17
18#define FPDF_ARGB(a, r, g, b)                                     \
19  ((((uint32_t)(((uint8_t)(b) | ((FX_WORD)((uint8_t)(g)) << 8)) | \
20                (((FX_DWORD)(uint8_t)(r)) << 16)))) |             \
21   (((FX_DWORD)(uint8_t)(a)) << 24))
22#define FPDF_GetBValue(argb) ((uint8_t)(argb))
23#define FPDF_GetGValue(argb) ((uint8_t)(((uint16_t)(argb)) >> 8))
24#define FPDF_GetRValue(argb) ((uint8_t)((argb) >> 16))
25#define FPDF_GetAValue(argb) ((uint8_t)((argb) >> 24))
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31//////////////////////////////////////////////////////////////////////
32//
33// Document functions
34//
35//////////////////////////////////////////////////////////////////////
36
37// Function: FPDF_CreateNewDocument
38//          Create a new PDF document.
39// Parameters:
40//          None.
41// Return value:
42//          A handle to a document. If failed, NULL is returned.
43DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument();
44
45//////////////////////////////////////////////////////////////////////
46//
47// Page functions
48//
49//////////////////////////////////////////////////////////////////////
50
51// Function: FPDFPage_New
52//          Construct an empty page.
53// Parameters:
54//          document    -   Handle to document. Returned by FPDF_LoadDocument
55//          and FPDF_CreateNewDocument.
56//          page_index  -   The index of a page.
57//          width       -   The page width.
58//          height      -   The page height.
59// Return value:
60//          The handle to the page.
61// Comments:
62//          Loaded page can be deleted by FPDFPage_Delete.
63DLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document,
64                                         int page_index,
65                                         double width,
66                                         double height);
67
68// Function: FPDFPage_Delete
69//          Delete a PDF page.
70// Parameters:
71//          document    -   Handle to document. Returned by FPDF_LoadDocument
72//          and FPDF_CreateNewDocument.
73//          page_index  -   The index of a page.
74// Return value:
75//          None.
76DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index);
77
78// Function: FPDFPage_GetRotation
79//          Get the page rotation. One of following values will be returned:
80//          0(0), 1(90), 2(180), 3(270).
81// Parameters:
82//          page        -   Handle to a page. Returned by FPDFPage_New or
83//          FPDF_LoadPage.
84// Return value:
85//          The PDF page rotation.
86// Comment:
87//          The PDF page rotation is rotated clockwise.
88DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page);
89
90// Function: FPDFPage_SetRotation
91//          Set page rotation. One of following values will be set: 0(0), 1(90),
92//          2(180), 3(270).
93// Parameters:
94//          page        -   Handle to a page. Returned by FPDFPage_New or
95//          FPDF_LoadPage.
96//          rotate      -   The value of the PDF page rotation.
97// Return value:
98//          None.
99// Comment:
100//          The PDF page rotation is rotated clockwise.
101//
102DLLEXPORT void STDCALL FPDFPage_SetRotation(FPDF_PAGE page, int rotate);
103
104// Function: FPDFPage_InsertObject
105//          Insert an object to the page. The page object is automatically
106//          freed.
107// Parameters:
108//          page        -   Handle to a page. Returned by FPDFPage_New or
109//          FPDF_LoadPage.
110//          page_obj    -   Handle to a page object. Returned by
111//          FPDFPageObj_NewTextObj,FPDFPageObj_NewTextObjEx and
112//                          FPDFPageObj_NewPathObj.
113// Return value:
114//          None.
115DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page,
116                                             FPDF_PAGEOBJECT page_obj);
117
118// Function: FPDFPage_CountObject
119//          Get number of page objects inside the page.
120// Parameters:
121//          page        -   Handle to a page. Returned by FPDFPage_New or
122//          FPDF_LoadPage.
123// Return value:
124//          The number of the page object.
125DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page);
126
127// Function: FPDFPage_GetObject
128//          Get page object by index.
129// Parameters:
130//          page        -   Handle to a page. Returned by FPDFPage_New or
131//          FPDF_LoadPage.
132//          index       -   The index of a page object.
133// Return value:
134//          The handle of the page object. Null for failed.
135DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPage_GetObject(FPDF_PAGE page, int index);
136
137// Function: FPDFPage_HasTransparency
138//          Check that whether the content of specified PDF page contains
139//          transparency.
140// Parameters:
141//          page        -   Handle to a page. Returned by FPDFPage_New or
142//          FPDF_LoadPage.
143// Return value:
144//          TRUE means that the PDF page does contains transparency.
145//          Otherwise, returns FALSE.
146DLLEXPORT FPDF_BOOL STDCALL FPDFPage_HasTransparency(FPDF_PAGE page);
147
148// Function: FPDFPage_GenerateContent
149//          Generate PDF Page content.
150// Parameters:
151//          page        -   Handle to a page. Returned by FPDFPage_New or
152//          FPDF_LoadPage.
153// Return value:
154//          True if successful, false otherwise.
155// Comment:
156//          Before you save the page to a file, or reload the page, you must
157//          call the FPDFPage_GenerateContent function.
158//          Or the changed information will be lost.
159DLLEXPORT FPDF_BOOL STDCALL FPDFPage_GenerateContent(FPDF_PAGE page);
160
161//////////////////////////////////////////////////////////////////////
162//
163// Page Object functions
164//
165//////////////////////////////////////////////////////////////////////
166
167// Function: FPDFPageObj_HasTransparency
168//          Check that whether the specified PDF page object contains
169//          transparency.
170// Parameters:
171//          pageObject  -   Handle to a page object.
172// Return value:
173//          TRUE means that the PDF page object does contains transparency.
174//          Otherwise, returns FALSE.
175DLLEXPORT FPDF_BOOL STDCALL
176FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT pageObject);
177
178// Function: FPDFPageObj_Transform
179//          Transform (scale, rotate, shear, move) page object.
180// Parameters:
181//          page_object -   Handle to a page object. Returned by
182//          FPDFPageObj_NewImageObj.
183//          a           -   The coefficient "a" of the matrix.
184//          b           -   The coefficient "b" of the matrix.
185//          c           -   The coefficient "c" of the matrix.
186//          d           -   The coefficient "d" of the matrix.
187//          e           -   The coefficient "e" of the matrix.
188//          f           -   The coefficient "f" of the matrix.
189// Return value:
190//          None.
191DLLEXPORT void STDCALL FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object,
192                                             double a,
193                                             double b,
194                                             double c,
195                                             double d,
196                                             double e,
197                                             double f);
198
199// Function: FPDFPage_TransformAnnots
200//          Transform (scale, rotate, shear, move) all annots in a page.
201// Parameters:
202//          page        -   Handle to a page.
203//          a           -   The coefficient "a" of the matrix.
204//          b           -   The coefficient "b" of the matrix.
205//          c           -   The coefficient "c" of the matrix.
206//          d           -   The coefficient "d" of the matrix.
207//          e           -   The coefficient "e" of the matrix.
208//          f           -   The coefficient "f" of the matrix.
209// Return value:
210//          None.
211DLLEXPORT void STDCALL FPDFPage_TransformAnnots(FPDF_PAGE page,
212                                                double a,
213                                                double b,
214                                                double c,
215                                                double d,
216                                                double e,
217                                                double f);
218
219// The page object constants.
220#define FPDF_PAGEOBJ_TEXT 1
221#define FPDF_PAGEOBJ_PATH 2
222#define FPDF_PAGEOBJ_IMAGE 3
223#define FPDF_PAGEOBJ_SHADING 4
224#define FPDF_PAGEOBJ_FORM 5
225
226//////////////////////////////////////////////////////////////////////
227//
228// Image functions
229//
230//////////////////////////////////////////////////////////////////////
231
232// Function: FPDFPageObj_NewImgeObj
233//          Create a new Image Object.
234// Parameters:
235//          document        -   Handle to document. Returned by
236//          FPDF_LoadDocument or FPDF_CreateNewDocument function.
237// Return Value:
238//          Handle of image object.
239DLLEXPORT FPDF_PAGEOBJECT STDCALL
240FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document);
241
242// Function: FPDFImageObj_LoadJpegFile
243//          Load Image from a JPEG image file and then set it to an image
244//          object.
245// Parameters:
246//          pages           -   Pointers to the start of all loaded pages, could
247//          be NULL.
248//          nCount          -   Number of pages, could be 0.
249//          image_object    -   Handle of image object returned by
250//          FPDFPageObj_NewImgeObj.
251//          fileAccess      -   The custom file access handler, which specifies
252//          the JPEG image file.
253//  Return Value:
254//          TRUE if successful, FALSE otherwise.
255//  Note:
256//          The image object might already has an associated image, which is
257//          shared and cached by the loaded pages, In this case, we need to
258//          clear the cache of image for all the loaded pages.
259//          Pass pages and count to this API to clear the image cache.
260DLLEXPORT FPDF_BOOL STDCALL
261FPDFImageObj_LoadJpegFile(FPDF_PAGE* pages,
262                          int nCount,
263                          FPDF_PAGEOBJECT image_object,
264                          FPDF_FILEACCESS* fileAccess);
265
266// Function: FPDFImageObj_SetMatrix
267//          Set the matrix of an image object.
268// Parameters:
269//          image_object    -   Handle of image object returned by
270//          FPDFPageObj_NewImgeObj.
271//          a               -   The coefficient "a" of the matrix.
272//          b               -   The coefficient "b" of the matrix.
273//          c               -   The coefficient "c" of the matrix.
274//          d               -   The coefficient "d" of the matrix.
275//          e               -   The coefficient "e" of the matrix.
276//          f               -   The coefficient "f" of the matrix.
277// Return value:
278//          TRUE if successful, FALSE otherwise.
279DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetMatrix(FPDF_PAGEOBJECT image_object,
280                                                   double a,
281                                                   double b,
282                                                   double c,
283                                                   double d,
284                                                   double e,
285                                                   double f);
286
287// Function: FPDFImageObj_SetBitmap
288//          Set the bitmap to an image object.
289// Parameters:
290//          pages           -   Pointer's to the start of all loaded pages.
291//          nCount          -   Number of pages.
292//          image_object    -   Handle of image object returned by
293//          FPDFPageObj_NewImgeObj.
294//          bitmap          -   The handle of the bitmap which you want to set
295//          it to the image object.
296// Return value:
297//          TRUE if successful, FALSE otherwise.
298DLLEXPORT FPDF_BOOL STDCALL FPDFImageObj_SetBitmap(FPDF_PAGE* pages,
299                                                   int nCount,
300                                                   FPDF_PAGEOBJECT image_object,
301                                                   FPDF_BITMAP bitmap);
302
303#ifdef __cplusplus
304}
305#endif
306
307#endif  // PUBLIC_FPDF_EDIT_H_
308