hpdf 2.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History +57 -0
- data/License +25 -0
- data/README +165 -0
- data/examples/arc_demo.rb +82 -0
- data/examples/demo.rb +92 -0
- data/examples/encryption.rb +41 -0
- data/examples/ext_gstater_demo.rb +171 -0
- data/examples/font_demo.rb +67 -0
- data/examples/jpfont_demo.rb +122 -0
- data/examples/line_demo.rb +301 -0
- data/examples/slide_show_demo.rb +139 -0
- data/examples/text_demo2.rb +189 -0
- data/examples/ttfont_demo.rb +106 -0
- data/ext/extconf.rb +6 -0
- data/ext/hpdf.c +3779 -0
- data/ext/hpdf_annotation.c +415 -0
- data/ext/hpdf_array.c +344 -0
- data/ext/hpdf_binary.c +117 -0
- data/ext/hpdf_boolean.c +47 -0
- data/ext/hpdf_catalog.c +354 -0
- data/ext/hpdf_destination.c +339 -0
- data/ext/hpdf_dict.c +488 -0
- data/ext/hpdf_doc.c +2020 -0
- data/ext/hpdf_doc_png.c +137 -0
- data/ext/hpdf_encoder.c +2991 -0
- data/ext/hpdf_encoder_cns.c +36359 -0
- data/ext/hpdf_encoder_cnt.c +15307 -0
- data/ext/hpdf_encoder_jp.c +16125 -0
- data/ext/hpdf_encoder_kr.c +27978 -0
- data/ext/hpdf_encrypt.c +632 -0
- data/ext/hpdf_encryptdict.c +240 -0
- data/ext/hpdf_error.c +114 -0
- data/ext/hpdf_ext_gstate.c +150 -0
- data/ext/hpdf_font.c +229 -0
- data/ext/hpdf_font_cid.c +1030 -0
- data/ext/hpdf_font_tt.c +406 -0
- data/ext/hpdf_font_type1.c +391 -0
- data/ext/hpdf_fontdef.c +56 -0
- data/ext/hpdf_fontdef_base14.c +4506 -0
- data/ext/hpdf_fontdef_cid.c +194 -0
- data/ext/hpdf_fontdef_cns.c +471 -0
- data/ext/hpdf_fontdef_cnt.c +250 -0
- data/ext/hpdf_fontdef_jp.c +1904 -0
- data/ext/hpdf_fontdef_kr.c +1572 -0
- data/ext/hpdf_fontdef_tt.c +2230 -0
- data/ext/hpdf_fontdef_type1.c +524 -0
- data/ext/hpdf_gstate.c +119 -0
- data/ext/hpdf_image.c +568 -0
- data/ext/hpdf_image_png.c +424 -0
- data/ext/hpdf_info.c +164 -0
- data/ext/hpdf_list.c +333 -0
- data/ext/hpdf_mmgr.c +243 -0
- data/ext/hpdf_name.c +71 -0
- data/ext/hpdf_null.c +31 -0
- data/ext/hpdf_number.c +49 -0
- data/ext/hpdf_objects.c +172 -0
- data/ext/hpdf_outline.c +329 -0
- data/ext/hpdf_page_label.c +74 -0
- data/ext/hpdf_page_operator.c +2764 -0
- data/ext/hpdf_pages.c +1508 -0
- data/ext/hpdf_real.c +61 -0
- data/ext/hpdf_streams.c +1435 -0
- data/ext/hpdf_string.c +189 -0
- data/ext/hpdf_utils.c +438 -0
- data/ext/hpdf_xref.c +348 -0
- data/ext/include/hpdf.h +1227 -0
- data/ext/include/hpdf_annotation.h +74 -0
- data/ext/include/hpdf_catalog.h +81 -0
- data/ext/include/hpdf_conf.h +76 -0
- data/ext/include/hpdf_consts.h +549 -0
- data/ext/include/hpdf_destination.h +41 -0
- data/ext/include/hpdf_doc.h +159 -0
- data/ext/include/hpdf_encoder.h +311 -0
- data/ext/include/hpdf_encrypt.h +156 -0
- data/ext/include/hpdf_encryptdict.h +66 -0
- data/ext/include/hpdf_error.h +201 -0
- data/ext/include/hpdf_ext_gstate.h +38 -0
- data/ext/include/hpdf_font.h +112 -0
- data/ext/include/hpdf_fontdef.h +403 -0
- data/ext/include/hpdf_gstate.h +80 -0
- data/ext/include/hpdf_image.h +72 -0
- data/ext/include/hpdf_info.h +48 -0
- data/ext/include/hpdf_list.h +85 -0
- data/ext/include/hpdf_mmgr.h +82 -0
- data/ext/include/hpdf_objects.h +587 -0
- data/ext/include/hpdf_outline.h +74 -0
- data/ext/include/hpdf_page_label.h +35 -0
- data/ext/include/hpdf_pages.h +128 -0
- data/ext/include/hpdf_streams.h +276 -0
- data/ext/include/hpdf_types.h +488 -0
- data/ext/include/hpdf_utils.h +161 -0
- data/tests/arc_demo.rb +82 -0
- data/tests/demo.rb +91 -0
- data/tests/encryption.rb +41 -0
- data/tests/ext_gstater_demo.rb +171 -0
- data/tests/font_demo.rb +67 -0
- data/tests/line_demo.rb +301 -0
- data/tests/slide_show_demo.rb +139 -0
- data/tests/test_all_examples.rb +31 -0
- data/tests/text_demo2.rb +189 -0
- metadata +147 -0
data/ext/hpdf_pages.c
ADDED
@@ -0,0 +1,1508 @@
|
|
1
|
+
/*
|
2
|
+
* << Haru Free PDF Library 2.0.3 >> -- hpdf_pages.c
|
3
|
+
*
|
4
|
+
* Copyright (c) 1999-2006 Takeshi Kanno <takeshi_kanno@est.hi-ho.ne.jp>
|
5
|
+
*
|
6
|
+
* Permission to use, copy, modify, distribute and sell this software
|
7
|
+
* and its documentation for any purpose is hereby granted without fee,
|
8
|
+
* provided that the above copyright notice appear in all copies and
|
9
|
+
* that both that copyright notice and this permission notice appear
|
10
|
+
* in supporting documentation.
|
11
|
+
* It is provided "as is" without express or implied warranty.
|
12
|
+
*
|
13
|
+
*/
|
14
|
+
|
15
|
+
#include "hpdf_conf.h"
|
16
|
+
#include "hpdf_utils.h"
|
17
|
+
#include "hpdf.h"
|
18
|
+
#include "hpdf_annotation.h"
|
19
|
+
#include "hpdf_destination.h"
|
20
|
+
|
21
|
+
/*----------------------------------------------------------------------------*/
|
22
|
+
|
23
|
+
typedef struct _HPDF_PageSizeValue {
|
24
|
+
HPDF_REAL x;
|
25
|
+
HPDF_REAL y;
|
26
|
+
} HPDF_PageSizeValue;
|
27
|
+
|
28
|
+
static HPDF_PageSizeValue HPDF_PREDEFINED_PAGE_SIZES[] = {
|
29
|
+
{612, 792}, /* HPDF_PAGE_SIZE_LETTER */
|
30
|
+
{612, 1008}, /* HPDF_PAGE_SIZE_LEGAL */
|
31
|
+
{841.89, 1199.551}, /* HPDF_PAGE_SIZE_A3 */
|
32
|
+
{595.276, 841.89}, /* HPDF_PAGE_SIZE_A4 */
|
33
|
+
{419.528, 595.276}, /* HPDF_PAGE_SIZE_A5 */
|
34
|
+
{708.661, 1000.63}, /* HPDF_PAGE_SIZE_B4 */
|
35
|
+
{498.898, 708.661}, /* HPDF_PAGE_SIZE_B5 */
|
36
|
+
{522, 756}, /* HPDF_PAGE_SIZE_EXECUTIVE */
|
37
|
+
{288, 432}, /* HPDF_PAGE_SIZE_US4x6 */
|
38
|
+
{288, 576}, /* HPDF_PAGE_SIZE_US4x8 */
|
39
|
+
{360, 504}, /* HPDF_PAGE_SIZE_US5x7 */
|
40
|
+
{297, 684} /* HPDF_PAGE_SIZE_COMM10 */
|
41
|
+
};
|
42
|
+
|
43
|
+
|
44
|
+
static const HPDF_RGBColor DEF_RGB_COLOR = {0, 0, 0};
|
45
|
+
|
46
|
+
static const HPDF_CMYKColor DEF_CMYK_COLOR = {0, 0, 0, 0};
|
47
|
+
|
48
|
+
|
49
|
+
static HPDF_STATUS
|
50
|
+
Pages_BeforeWrite (HPDF_Dict obj);
|
51
|
+
|
52
|
+
|
53
|
+
static HPDF_STATUS
|
54
|
+
Page_BeforeWrite (HPDF_Dict obj);
|
55
|
+
|
56
|
+
|
57
|
+
static void
|
58
|
+
Page_OnFree (HPDF_Dict obj);
|
59
|
+
|
60
|
+
|
61
|
+
static HPDF_STATUS
|
62
|
+
AddResource (HPDF_Page page);
|
63
|
+
|
64
|
+
|
65
|
+
static HPDF_STATUS
|
66
|
+
AddAnnotation (HPDF_Page page,
|
67
|
+
HPDF_Annotation annot);
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
static HPDF_UINT
|
72
|
+
GetPageCount (HPDF_Dict pages);
|
73
|
+
|
74
|
+
static const char *HPDF_INHERITABLE_ENTRIES[5] = {
|
75
|
+
"Resources",
|
76
|
+
"MediaBox",
|
77
|
+
"CropBox",
|
78
|
+
"Rotate",
|
79
|
+
NULL
|
80
|
+
};
|
81
|
+
|
82
|
+
|
83
|
+
/*----------------------------------------------------------------------------*/
|
84
|
+
/*----- HPDF_Pages -----------------------------------------------------------*/
|
85
|
+
|
86
|
+
HPDF_Pages
|
87
|
+
HPDF_Pages_New (HPDF_MMgr mmgr,
|
88
|
+
HPDF_Pages parent,
|
89
|
+
HPDF_Xref xref)
|
90
|
+
{
|
91
|
+
HPDF_STATUS ret = HPDF_OK;
|
92
|
+
HPDF_Pages pages;
|
93
|
+
|
94
|
+
|
95
|
+
HPDF_PTRACE((" HPDF_Pages_New\n"));
|
96
|
+
|
97
|
+
pages = HPDF_Dict_New (mmgr);
|
98
|
+
if (!pages)
|
99
|
+
return NULL;
|
100
|
+
|
101
|
+
pages->header.obj_class |= HPDF_OSUBCLASS_PAGES;
|
102
|
+
pages->before_write_fn = Pages_BeforeWrite;
|
103
|
+
|
104
|
+
if (HPDF_Xref_Add (xref, pages) != HPDF_OK)
|
105
|
+
return NULL;
|
106
|
+
|
107
|
+
/* add requiered elements */
|
108
|
+
ret += HPDF_Dict_AddName (pages, "Type", "Pages");
|
109
|
+
ret += HPDF_Dict_Add (pages, "Kids", HPDF_Array_New (pages->mmgr));
|
110
|
+
ret += HPDF_Dict_Add (pages, "Count", HPDF_Number_New (pages->mmgr, 0));
|
111
|
+
|
112
|
+
if (ret == HPDF_OK && parent)
|
113
|
+
ret += HPDF_Pages_AddKids (parent, pages);
|
114
|
+
|
115
|
+
if (ret != HPDF_OK)
|
116
|
+
return NULL;
|
117
|
+
|
118
|
+
return pages;
|
119
|
+
}
|
120
|
+
|
121
|
+
|
122
|
+
HPDF_STATUS
|
123
|
+
HPDF_Pages_AddKids (HPDF_Pages parent,
|
124
|
+
HPDF_Dict kid)
|
125
|
+
{
|
126
|
+
HPDF_Array kids;
|
127
|
+
HPDF_STATUS ret;
|
128
|
+
|
129
|
+
HPDF_PTRACE((" HPDF_Pages_AddKids\n"));
|
130
|
+
|
131
|
+
if (HPDF_Dict_GetItem (kid, "Parent", HPDF_OCLASS_DICT))
|
132
|
+
return HPDF_SetError (parent->error, HPDF_PAGE_CANNOT_SET_PARENT, 0);
|
133
|
+
|
134
|
+
if ((ret = HPDF_Dict_Add (kid, "Parent", parent)) != HPDF_OK)
|
135
|
+
return ret;
|
136
|
+
|
137
|
+
kids = (HPDF_Array )HPDF_Dict_GetItem (parent, "Kids", HPDF_OCLASS_ARRAY);
|
138
|
+
if (!kids)
|
139
|
+
return HPDF_SetError (parent->error, HPDF_PAGES_MISSING_KIDS_ENTRY, 0);
|
140
|
+
|
141
|
+
if (kid->header.obj_class == (HPDF_OCLASS_DICT | HPDF_OSUBCLASS_PAGE)) {
|
142
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)kid->attr;
|
143
|
+
|
144
|
+
attr->parent = parent;
|
145
|
+
}
|
146
|
+
|
147
|
+
return HPDF_Array_Add (kids, kid);
|
148
|
+
}
|
149
|
+
|
150
|
+
|
151
|
+
HPDF_STATUS
|
152
|
+
HPDF_Page_InsertBefore (HPDF_Page page,
|
153
|
+
HPDF_Page target)
|
154
|
+
{
|
155
|
+
HPDF_Page parent;
|
156
|
+
HPDF_Array kids;
|
157
|
+
HPDF_STATUS ret;
|
158
|
+
HPDF_PageAttr attr;
|
159
|
+
|
160
|
+
HPDF_PTRACE((" HPDF_Page_InsertBefore\n"));
|
161
|
+
|
162
|
+
attr = (HPDF_PageAttr )target->attr;
|
163
|
+
parent = attr->parent;
|
164
|
+
|
165
|
+
if (!parent)
|
166
|
+
return HPDF_SetError (parent->error, HPDF_PAGE_CANNOT_SET_PARENT, 0);
|
167
|
+
|
168
|
+
if (HPDF_Dict_GetItem (page, "Parent", HPDF_OCLASS_DICT))
|
169
|
+
return HPDF_SetError (parent->error, HPDF_PAGE_CANNOT_SET_PARENT, 0);
|
170
|
+
|
171
|
+
if ((ret = HPDF_Dict_Add (page, "Parent", parent)) != HPDF_OK)
|
172
|
+
return ret;
|
173
|
+
|
174
|
+
kids = (HPDF_Array )HPDF_Dict_GetItem (parent, "Kids", HPDF_OCLASS_ARRAY);
|
175
|
+
if (!kids)
|
176
|
+
return HPDF_SetError (parent->error, HPDF_PAGES_MISSING_KIDS_ENTRY, 0);
|
177
|
+
|
178
|
+
attr = (HPDF_PageAttr)page->attr;
|
179
|
+
attr->parent = parent;
|
180
|
+
|
181
|
+
return HPDF_Array_Insert (kids, target, page);
|
182
|
+
}
|
183
|
+
|
184
|
+
|
185
|
+
HPDF_STATUS
|
186
|
+
Pages_BeforeWrite (HPDF_Dict obj)
|
187
|
+
{
|
188
|
+
HPDF_Array kids = (HPDF_Array )HPDF_Dict_GetItem (obj, "Kids",
|
189
|
+
HPDF_OCLASS_ARRAY);
|
190
|
+
HPDF_Number count = (HPDF_Number)HPDF_Dict_GetItem (obj, "Count",
|
191
|
+
HPDF_OCLASS_NUMBER);
|
192
|
+
HPDF_STATUS ret;
|
193
|
+
|
194
|
+
HPDF_PTRACE((" HPDF_Pages_BeforeWrite\n"));
|
195
|
+
|
196
|
+
if (!kids)
|
197
|
+
return HPDF_SetError (obj->error, HPDF_PAGES_MISSING_KIDS_ENTRY, 0);
|
198
|
+
|
199
|
+
if (count)
|
200
|
+
count->value = GetPageCount (obj);
|
201
|
+
else {
|
202
|
+
count = HPDF_Number_New (obj->mmgr, GetPageCount (obj));
|
203
|
+
if (!count)
|
204
|
+
return HPDF_Error_GetCode (obj->error);
|
205
|
+
|
206
|
+
if ((ret = HPDF_Dict_Add (obj, "Count", count)) != HPDF_OK)
|
207
|
+
return ret;
|
208
|
+
}
|
209
|
+
|
210
|
+
return HPDF_OK;
|
211
|
+
}
|
212
|
+
|
213
|
+
|
214
|
+
static HPDF_STATUS
|
215
|
+
Page_BeforeWrite (HPDF_Dict obj)
|
216
|
+
{
|
217
|
+
HPDF_STATUS ret;
|
218
|
+
HPDF_Page page = (HPDF_Page)obj;
|
219
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)obj->attr;
|
220
|
+
|
221
|
+
HPDF_PTRACE((" HPDF_Page_BeforeWrite\n"));
|
222
|
+
|
223
|
+
if (attr->gmode == HPDF_GMODE_PATH_OBJECT) {
|
224
|
+
HPDF_PTRACE((" HPDF_Page_BeforeWrite warning path object is not"
|
225
|
+
" end\n"));
|
226
|
+
|
227
|
+
if ((ret = HPDF_Page_EndPath (page)) != HPDF_OK)
|
228
|
+
return ret;
|
229
|
+
}
|
230
|
+
|
231
|
+
if (attr->gmode == HPDF_GMODE_TEXT_OBJECT) {
|
232
|
+
HPDF_PTRACE((" HPDF_Page_BeforeWrite warning text block is not end\n"));
|
233
|
+
|
234
|
+
if ((ret = HPDF_Page_EndText (page)) != HPDF_OK)
|
235
|
+
return ret;
|
236
|
+
}
|
237
|
+
|
238
|
+
if (attr->gstate)
|
239
|
+
while (attr->gstate->prev) {
|
240
|
+
if ((ret = HPDF_Page_GRestore (page)) != HPDF_OK)
|
241
|
+
return ret;
|
242
|
+
}
|
243
|
+
|
244
|
+
return HPDF_OK;
|
245
|
+
}
|
246
|
+
|
247
|
+
|
248
|
+
static HPDF_UINT
|
249
|
+
GetPageCount (HPDF_Dict pages)
|
250
|
+
{
|
251
|
+
HPDF_UINT i;
|
252
|
+
HPDF_UINT count = 0;
|
253
|
+
HPDF_Array kids = (HPDF_Array)HPDF_Dict_GetItem (pages, "Kids",
|
254
|
+
HPDF_OCLASS_ARRAY);
|
255
|
+
|
256
|
+
HPDF_PTRACE((" GetPageCount\n"));
|
257
|
+
|
258
|
+
if (!kids)
|
259
|
+
return 0;
|
260
|
+
|
261
|
+
for (i = 0; i < kids->list->count; i++) {
|
262
|
+
void *obj = HPDF_Array_GetItem (kids, i, HPDF_OCLASS_DICT);
|
263
|
+
HPDF_Obj_Header *header = (HPDF_Obj_Header *)obj;
|
264
|
+
|
265
|
+
if (header->obj_class == (HPDF_OCLASS_DICT | HPDF_OSUBCLASS_PAGES))
|
266
|
+
count += GetPageCount ((HPDF_Dict)obj);
|
267
|
+
else if (header->obj_class == (HPDF_OCLASS_DICT | HPDF_OSUBCLASS_PAGE))
|
268
|
+
count += 1;
|
269
|
+
}
|
270
|
+
|
271
|
+
return count;
|
272
|
+
}
|
273
|
+
|
274
|
+
|
275
|
+
HPDF_BOOL
|
276
|
+
HPDF_Pages_Validate (HPDF_Pages pages)
|
277
|
+
{
|
278
|
+
HPDF_Obj_Header *header = (HPDF_Obj_Header *)pages;
|
279
|
+
|
280
|
+
HPDF_PTRACE((" HPDF_Pages_Validate\n"));
|
281
|
+
|
282
|
+
if (!pages || header->obj_class != (HPDF_OCLASS_DICT |
|
283
|
+
HPDF_OSUBCLASS_PAGES))
|
284
|
+
return HPDF_FALSE;
|
285
|
+
|
286
|
+
return HPDF_TRUE;
|
287
|
+
}
|
288
|
+
|
289
|
+
|
290
|
+
/*----------------------------------------------------------------------------*/
|
291
|
+
/*----- HPDF_Page ------------------------------------------------------------*/
|
292
|
+
|
293
|
+
|
294
|
+
HPDF_Page
|
295
|
+
HPDF_Page_New (HPDF_MMgr mmgr,
|
296
|
+
HPDF_Xref xref)
|
297
|
+
{
|
298
|
+
HPDF_STATUS ret;
|
299
|
+
HPDF_PageAttr attr;
|
300
|
+
HPDF_Page page;
|
301
|
+
|
302
|
+
HPDF_PTRACE((" HPDF_Page_New\n"));
|
303
|
+
|
304
|
+
page = HPDF_Dict_New (mmgr);
|
305
|
+
if (!page)
|
306
|
+
return NULL;
|
307
|
+
|
308
|
+
page->header.obj_class |= HPDF_OSUBCLASS_PAGE;
|
309
|
+
page->free_fn = Page_OnFree;
|
310
|
+
page->before_write_fn = Page_BeforeWrite;
|
311
|
+
|
312
|
+
attr = HPDF_GetMem (page->mmgr, sizeof(HPDF_PageAttr_Rec));
|
313
|
+
if (!attr) {
|
314
|
+
HPDF_Dict_Free (page);
|
315
|
+
return NULL;
|
316
|
+
}
|
317
|
+
|
318
|
+
page->attr = attr;
|
319
|
+
HPDF_MemSet (attr, 0, sizeof(HPDF_PageAttr_Rec));
|
320
|
+
attr->gmode = HPDF_GMODE_PAGE_DESCRIPTION;
|
321
|
+
attr->cur_pos = HPDF_ToPoint (0, 0);
|
322
|
+
attr->text_pos = HPDF_ToPoint (0, 0);
|
323
|
+
|
324
|
+
ret = HPDF_Xref_Add (xref, page);
|
325
|
+
if (ret != HPDF_OK)
|
326
|
+
return NULL;
|
327
|
+
|
328
|
+
attr->gstate = HPDF_GState_New (page->mmgr, NULL);
|
329
|
+
attr->contents = HPDF_DictStream_New (page->mmgr, xref);
|
330
|
+
|
331
|
+
if (!attr->gstate || !attr->contents)
|
332
|
+
return NULL;
|
333
|
+
|
334
|
+
attr->stream = attr->contents->stream;
|
335
|
+
attr->xref = xref;
|
336
|
+
|
337
|
+
/* add requiered elements */
|
338
|
+
ret += HPDF_Dict_AddName (page, "Type", "Page");
|
339
|
+
ret += HPDF_Dict_Add (page, "MediaBox", HPDF_Box_Array_New (page->mmgr,
|
340
|
+
HPDF_ToBox (0, 0, HPDF_DEF_PAGE_WIDTH, HPDF_DEF_PAGE_HEIGHT)));
|
341
|
+
ret += HPDF_Dict_Add (page, "Contents", attr->contents);
|
342
|
+
|
343
|
+
ret += AddResource (page);
|
344
|
+
|
345
|
+
if (ret != HPDF_OK)
|
346
|
+
return NULL;
|
347
|
+
|
348
|
+
return page;
|
349
|
+
}
|
350
|
+
|
351
|
+
|
352
|
+
|
353
|
+
|
354
|
+
static void
|
355
|
+
Page_OnFree (HPDF_Dict obj)
|
356
|
+
{
|
357
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)obj->attr;
|
358
|
+
|
359
|
+
HPDF_PTRACE((" HPDF_Page_OnFree\n"));
|
360
|
+
|
361
|
+
if (attr) {
|
362
|
+
if (attr->gstate)
|
363
|
+
HPDF_GState_Free (obj->mmgr, attr->gstate);
|
364
|
+
|
365
|
+
HPDF_FreeMem (obj->mmgr, attr);
|
366
|
+
}
|
367
|
+
}
|
368
|
+
|
369
|
+
|
370
|
+
HPDF_STATUS
|
371
|
+
HPDF_Page_CheckState (HPDF_Page page,
|
372
|
+
HPDF_UINT mode)
|
373
|
+
{
|
374
|
+
if (!page)
|
375
|
+
return HPDF_INVALID_OBJECT;
|
376
|
+
|
377
|
+
if (page->header.obj_class != (HPDF_OSUBCLASS_PAGE | HPDF_OCLASS_DICT))
|
378
|
+
return HPDF_INVALID_PAGE;
|
379
|
+
|
380
|
+
if (!(((HPDF_PageAttr)page->attr)->gmode & mode))
|
381
|
+
return HPDF_RaiseError (page->error, HPDF_PAGE_INVALID_GMODE, 0);
|
382
|
+
|
383
|
+
return HPDF_OK;
|
384
|
+
}
|
385
|
+
|
386
|
+
|
387
|
+
void*
|
388
|
+
HPDF_Page_GetInheritableItem (HPDF_Page page,
|
389
|
+
const char *key,
|
390
|
+
HPDF_UINT16 obj_class)
|
391
|
+
{
|
392
|
+
HPDF_BOOL chk = HPDF_FALSE;
|
393
|
+
HPDF_INT i = 0;
|
394
|
+
void * obj;
|
395
|
+
|
396
|
+
HPDF_PTRACE((" HPDF_Page_GetInheritableItem\n"));
|
397
|
+
|
398
|
+
/* check whether the specified key is valid */
|
399
|
+
while (HPDF_INHERITABLE_ENTRIES[i]) {
|
400
|
+
if (HPDF_StrCmp (key, HPDF_INHERITABLE_ENTRIES[i]) == 0) {
|
401
|
+
chk = HPDF_TRUE;
|
402
|
+
break;
|
403
|
+
}
|
404
|
+
i++;
|
405
|
+
}
|
406
|
+
|
407
|
+
/* the key is not inheritable */
|
408
|
+
if (chk != HPDF_TRUE) {
|
409
|
+
HPDF_SetError (page->error, HPDF_INVALID_PARAMETER, 0);
|
410
|
+
return NULL;
|
411
|
+
}
|
412
|
+
|
413
|
+
obj = HPDF_Dict_GetItem (page, key, obj_class);
|
414
|
+
|
415
|
+
/* if resources of the object is NULL, search resources of parent
|
416
|
+
* pages recursivly
|
417
|
+
*/
|
418
|
+
if (!obj) {
|
419
|
+
HPDF_Pages pages = HPDF_Dict_GetItem (page, "Parent", HPDF_OCLASS_DICT);
|
420
|
+
while (pages) {
|
421
|
+
obj = HPDF_Dict_GetItem (page, key, obj_class);
|
422
|
+
|
423
|
+
if (obj)
|
424
|
+
break;
|
425
|
+
|
426
|
+
pages = HPDF_Dict_GetItem (pages, "Parent", HPDF_OCLASS_DICT);
|
427
|
+
}
|
428
|
+
}
|
429
|
+
|
430
|
+
return obj;
|
431
|
+
}
|
432
|
+
|
433
|
+
|
434
|
+
HPDF_STATUS
|
435
|
+
AddResource (HPDF_Page page)
|
436
|
+
{
|
437
|
+
HPDF_STATUS ret = HPDF_OK;
|
438
|
+
HPDF_Dict resource;
|
439
|
+
HPDF_Array procset;
|
440
|
+
|
441
|
+
HPDF_PTRACE((" HPDF_Page_AddResource\n"));
|
442
|
+
|
443
|
+
resource = HPDF_Dict_New (page->mmgr);
|
444
|
+
if (!resource)
|
445
|
+
return HPDF_Error_GetCode (page->error);
|
446
|
+
|
447
|
+
/* althoth ProcSet-entry is obsolete, add it to resouce for
|
448
|
+
* compatibility
|
449
|
+
*/
|
450
|
+
|
451
|
+
ret += HPDF_Dict_Add (page, "Resources", resource);
|
452
|
+
|
453
|
+
procset = HPDF_Array_New (page->mmgr);
|
454
|
+
if (!procset)
|
455
|
+
return HPDF_Error_GetCode (page->error);
|
456
|
+
|
457
|
+
ret += HPDF_Dict_Add (resource, "ProcSet", procset);
|
458
|
+
ret += HPDF_Array_Add (procset, HPDF_Name_New (page->mmgr, "PDF"));
|
459
|
+
ret += HPDF_Array_Add (procset, HPDF_Name_New (page->mmgr, "Text"));
|
460
|
+
ret += HPDF_Array_Add (procset, HPDF_Name_New (page->mmgr, "ImageB"));
|
461
|
+
ret += HPDF_Array_Add (procset, HPDF_Name_New (page->mmgr, "ImageC"));
|
462
|
+
ret += HPDF_Array_Add (procset, HPDF_Name_New (page->mmgr, "ImageI"));
|
463
|
+
|
464
|
+
return ret;
|
465
|
+
}
|
466
|
+
|
467
|
+
|
468
|
+
const char*
|
469
|
+
HPDF_Page_GetLocalFontName (HPDF_Page page,
|
470
|
+
HPDF_Font font)
|
471
|
+
{
|
472
|
+
HPDF_PageAttr attr = (HPDF_PageAttr )page->attr;
|
473
|
+
const char *key;
|
474
|
+
|
475
|
+
HPDF_PTRACE((" HPDF_Page_GetLocalFontName\n"));
|
476
|
+
|
477
|
+
/* whether check font-resource exists. when it does not exists,
|
478
|
+
* create font-resource
|
479
|
+
* 2006.07.21 Fixed a problem which may cause a memory leak.
|
480
|
+
*/
|
481
|
+
if (!attr->fonts) {
|
482
|
+
HPDF_Dict resources;
|
483
|
+
HPDF_Dict fonts;
|
484
|
+
|
485
|
+
resources = HPDF_Page_GetInheritableItem (page, "Resources",
|
486
|
+
HPDF_OCLASS_DICT);
|
487
|
+
if (!resources)
|
488
|
+
return NULL;
|
489
|
+
|
490
|
+
fonts = HPDF_Dict_New (page->mmgr);
|
491
|
+
if (!fonts)
|
492
|
+
return NULL;
|
493
|
+
|
494
|
+
if (HPDF_Dict_Add (resources, "Font", fonts) != HPDF_OK)
|
495
|
+
return NULL;
|
496
|
+
|
497
|
+
attr->fonts = fonts;
|
498
|
+
}
|
499
|
+
|
500
|
+
/* search font-object from font-resource */
|
501
|
+
key = HPDF_Dict_GetKeyByObj (attr->fonts, font);
|
502
|
+
if (!key) {
|
503
|
+
/* if the font is not resisterd in font-resource, register font to
|
504
|
+
* font-resource.
|
505
|
+
*/
|
506
|
+
char fontName[HPDF_LIMIT_MAX_NAME_LEN + 1];
|
507
|
+
char *ptr;
|
508
|
+
char *end_ptr = fontName + HPDF_LIMIT_MAX_NAME_LEN;
|
509
|
+
|
510
|
+
ptr = HPDF_StrCpy (fontName, "F", end_ptr);
|
511
|
+
HPDF_IToA (ptr, attr->fonts->list->count + 1, end_ptr);
|
512
|
+
|
513
|
+
if (HPDF_Dict_Add (attr->fonts, fontName, font) != HPDF_OK)
|
514
|
+
return NULL;
|
515
|
+
|
516
|
+
key = HPDF_Dict_GetKeyByObj (attr->fonts, font);
|
517
|
+
}
|
518
|
+
|
519
|
+
return key;
|
520
|
+
}
|
521
|
+
|
522
|
+
|
523
|
+
HPDF_Box
|
524
|
+
HPDF_Page_GetMediaBox (HPDF_Page page)
|
525
|
+
{
|
526
|
+
HPDF_Box media_box = {0, 0, 0, 0};
|
527
|
+
|
528
|
+
HPDF_PTRACE((" HPDF_Page_GetMediaBox\n"));
|
529
|
+
|
530
|
+
if (HPDF_Page_Validate (page)) {
|
531
|
+
HPDF_Array array = HPDF_Page_GetInheritableItem (page, "MediaBox",
|
532
|
+
HPDF_OCLASS_ARRAY);
|
533
|
+
|
534
|
+
if (array) {
|
535
|
+
HPDF_Real r;
|
536
|
+
|
537
|
+
r = HPDF_Array_GetItem (array, 0, HPDF_OCLASS_REAL);
|
538
|
+
if (r)
|
539
|
+
media_box.left = r->value;
|
540
|
+
|
541
|
+
r = HPDF_Array_GetItem (array, 1, HPDF_OCLASS_REAL);
|
542
|
+
if (r)
|
543
|
+
media_box.bottom = r->value;
|
544
|
+
|
545
|
+
r = HPDF_Array_GetItem (array, 2, HPDF_OCLASS_REAL);
|
546
|
+
if (r)
|
547
|
+
media_box.right = r->value;
|
548
|
+
|
549
|
+
r = HPDF_Array_GetItem (array, 3, HPDF_OCLASS_REAL);
|
550
|
+
if (r)
|
551
|
+
media_box.top = r->value;
|
552
|
+
|
553
|
+
HPDF_CheckError (page->error);
|
554
|
+
} else HPDF_RaiseError (page->error, HPDF_PAGE_CANNOT_FIND_OBJECT, 0);
|
555
|
+
}
|
556
|
+
|
557
|
+
return media_box;
|
558
|
+
}
|
559
|
+
|
560
|
+
|
561
|
+
const char*
|
562
|
+
HPDF_Page_GetXObjectName (HPDF_Page page,
|
563
|
+
HPDF_XObject xobj)
|
564
|
+
{
|
565
|
+
HPDF_PageAttr attr = (HPDF_PageAttr )page->attr;
|
566
|
+
const char *key;
|
567
|
+
|
568
|
+
HPDF_PTRACE((" HPDF_Page_GetXObjectName\n"));
|
569
|
+
|
570
|
+
if (!attr->xobjects) {
|
571
|
+
HPDF_Dict resources;
|
572
|
+
HPDF_Dict xobjects;
|
573
|
+
|
574
|
+
resources = HPDF_Page_GetInheritableItem (page, "Resources",
|
575
|
+
HPDF_OCLASS_DICT);
|
576
|
+
if (!resources)
|
577
|
+
return NULL;
|
578
|
+
|
579
|
+
xobjects = HPDF_Dict_New (page->mmgr);
|
580
|
+
if (!xobjects)
|
581
|
+
return NULL;
|
582
|
+
|
583
|
+
if (HPDF_Dict_Add (resources, "XObject", xobjects) != HPDF_OK)
|
584
|
+
return NULL;
|
585
|
+
|
586
|
+
attr->xobjects = xobjects;
|
587
|
+
}
|
588
|
+
|
589
|
+
/* search xobject-object from xobject-resource */
|
590
|
+
key = HPDF_Dict_GetKeyByObj (attr->xobjects, xobj);
|
591
|
+
if (!key) {
|
592
|
+
/* if the xobject is not resisterd in xobject-resource, register
|
593
|
+
* xobject to xobject-resource.
|
594
|
+
*/
|
595
|
+
char xobj_name[HPDF_LIMIT_MAX_NAME_LEN + 1];
|
596
|
+
char *ptr;
|
597
|
+
char *end_ptr = xobj_name + HPDF_LIMIT_MAX_NAME_LEN;
|
598
|
+
|
599
|
+
ptr = HPDF_StrCpy (xobj_name, "X", end_ptr);
|
600
|
+
HPDF_IToA (ptr, attr->xobjects->list->count + 1, end_ptr);
|
601
|
+
|
602
|
+
if (HPDF_Dict_Add (attr->xobjects, xobj_name, xobj) != HPDF_OK)
|
603
|
+
return NULL;
|
604
|
+
|
605
|
+
key = HPDF_Dict_GetKeyByObj (attr->xobjects, xobj);
|
606
|
+
}
|
607
|
+
|
608
|
+
return key;
|
609
|
+
}
|
610
|
+
|
611
|
+
|
612
|
+
const char*
|
613
|
+
HPDF_Page_GetExtGStateName (HPDF_Page page,
|
614
|
+
HPDF_ExtGState state)
|
615
|
+
{
|
616
|
+
HPDF_PageAttr attr = (HPDF_PageAttr )page->attr;
|
617
|
+
const char *key;
|
618
|
+
|
619
|
+
HPDF_PTRACE((" HPDF_Page_GetExtGStateName\n"));
|
620
|
+
|
621
|
+
if (!attr->ext_gstates) {
|
622
|
+
HPDF_Dict resources;
|
623
|
+
HPDF_Dict ext_gstates;
|
624
|
+
|
625
|
+
resources = HPDF_Page_GetInheritableItem (page, "Resources",
|
626
|
+
HPDF_OCLASS_DICT);
|
627
|
+
if (!resources)
|
628
|
+
return NULL;
|
629
|
+
|
630
|
+
ext_gstates = HPDF_Dict_New (page->mmgr);
|
631
|
+
if (!ext_gstates)
|
632
|
+
return NULL;
|
633
|
+
|
634
|
+
if (HPDF_Dict_Add (resources, "ExtGState", ext_gstates) != HPDF_OK)
|
635
|
+
return NULL;
|
636
|
+
|
637
|
+
attr->ext_gstates = ext_gstates;
|
638
|
+
}
|
639
|
+
|
640
|
+
/* search ext_gstate-object from ext_gstate-resource */
|
641
|
+
key = HPDF_Dict_GetKeyByObj (attr->ext_gstates, state);
|
642
|
+
if (!key) {
|
643
|
+
/* if the ext-gstate is not resisterd in ext-gstate resource, register
|
644
|
+
* to ext-gstate resource.
|
645
|
+
*/
|
646
|
+
char ext_gstate_name[HPDF_LIMIT_MAX_NAME_LEN + 1];
|
647
|
+
char *ptr;
|
648
|
+
char *end_ptr = ext_gstate_name + HPDF_LIMIT_MAX_NAME_LEN;
|
649
|
+
|
650
|
+
ptr = HPDF_StrCpy (ext_gstate_name, "E", end_ptr);
|
651
|
+
HPDF_IToA (ptr, attr->ext_gstates->list->count + 1, end_ptr);
|
652
|
+
|
653
|
+
if (HPDF_Dict_Add (attr->ext_gstates, ext_gstate_name, state) != HPDF_OK)
|
654
|
+
return NULL;
|
655
|
+
|
656
|
+
key = HPDF_Dict_GetKeyByObj (attr->ext_gstates, state);
|
657
|
+
}
|
658
|
+
|
659
|
+
return key;
|
660
|
+
}
|
661
|
+
|
662
|
+
|
663
|
+
static HPDF_STATUS
|
664
|
+
AddAnnotation (HPDF_Page page,
|
665
|
+
HPDF_Annotation annot)
|
666
|
+
{
|
667
|
+
HPDF_Array array;
|
668
|
+
HPDF_STATUS ret;
|
669
|
+
|
670
|
+
HPDF_PTRACE((" HPDF_Pages\n"));
|
671
|
+
|
672
|
+
/* find "Annots" entry */
|
673
|
+
array = HPDF_Dict_GetItem (page, "Annots", HPDF_OCLASS_ARRAY);
|
674
|
+
|
675
|
+
if (!array) {
|
676
|
+
array = HPDF_Array_New (page->mmgr);
|
677
|
+
if (!array)
|
678
|
+
return HPDF_Error_GetCode (page->error);
|
679
|
+
|
680
|
+
ret = HPDF_Dict_Add (page, "Annots", array);
|
681
|
+
if (ret != HPDF_OK)
|
682
|
+
return ret;
|
683
|
+
}
|
684
|
+
|
685
|
+
return HPDF_Array_Add (array, annot);
|
686
|
+
}
|
687
|
+
|
688
|
+
|
689
|
+
HPDF_EXPORT(HPDF_REAL)
|
690
|
+
HPDF_Page_TextWidth (HPDF_Page page,
|
691
|
+
const char *text)
|
692
|
+
{
|
693
|
+
HPDF_PageAttr attr;
|
694
|
+
HPDF_TextWidth tw;
|
695
|
+
HPDF_REAL ret = 0;
|
696
|
+
HPDF_UINT len = HPDF_StrLen(text, HPDF_LIMIT_MAX_STRING_LEN + 1);
|
697
|
+
|
698
|
+
HPDF_PTRACE((" HPDF_Page_TextWidth\n"));
|
699
|
+
|
700
|
+
if (!HPDF_Page_Validate (page) || len == 0)
|
701
|
+
return 0;
|
702
|
+
|
703
|
+
attr = (HPDF_PageAttr )page->attr;
|
704
|
+
|
705
|
+
/* no font exists */
|
706
|
+
if (!attr->gstate->font) {
|
707
|
+
HPDF_RaiseError (page->error, HPDF_PAGE_FONT_NOT_FOUND, 0);
|
708
|
+
return 0;
|
709
|
+
}
|
710
|
+
|
711
|
+
tw = HPDF_Font_TextWidth (attr->gstate->font, text, len);
|
712
|
+
|
713
|
+
ret += attr->gstate->word_space * tw.numspace;
|
714
|
+
ret += tw.width * attr->gstate->font_size / 1000;
|
715
|
+
ret += attr->gstate->char_space * tw.numchars;
|
716
|
+
|
717
|
+
HPDF_CheckError (page->error);
|
718
|
+
|
719
|
+
return ret;
|
720
|
+
}
|
721
|
+
|
722
|
+
|
723
|
+
HPDF_EXPORT(HPDF_UINT)
|
724
|
+
HPDF_Page_MeasureText (HPDF_Page page,
|
725
|
+
const char *text,
|
726
|
+
HPDF_REAL width,
|
727
|
+
HPDF_BOOL wordwrap,
|
728
|
+
HPDF_REAL *real_width)
|
729
|
+
{
|
730
|
+
HPDF_PageAttr attr;
|
731
|
+
HPDF_UINT len = HPDF_StrLen(text, HPDF_LIMIT_MAX_STRING_LEN + 1);
|
732
|
+
HPDF_UINT ret;
|
733
|
+
|
734
|
+
if (!HPDF_Page_Validate (page) || len == 0)
|
735
|
+
return 0;
|
736
|
+
|
737
|
+
attr = (HPDF_PageAttr )page->attr;
|
738
|
+
|
739
|
+
HPDF_PTRACE((" HPDF_Page_MeasureText\n"));
|
740
|
+
|
741
|
+
/* no font exists */
|
742
|
+
if (!attr->gstate->font) {
|
743
|
+
HPDF_RaiseError (page->error, HPDF_PAGE_FONT_NOT_FOUND, 0);
|
744
|
+
return 0;
|
745
|
+
}
|
746
|
+
|
747
|
+
ret = HPDF_Font_MeasureText (attr->gstate->font, text, len, width,
|
748
|
+
attr->gstate->font_size, attr->gstate->char_space,
|
749
|
+
attr->gstate->word_space, wordwrap, real_width);
|
750
|
+
|
751
|
+
HPDF_CheckError (page->error);
|
752
|
+
|
753
|
+
return ret;
|
754
|
+
}
|
755
|
+
|
756
|
+
|
757
|
+
HPDF_EXPORT(HPDF_REAL)
|
758
|
+
HPDF_Page_GetWidth (HPDF_Page page)
|
759
|
+
{
|
760
|
+
return HPDF_Page_GetMediaBox (page).right;
|
761
|
+
}
|
762
|
+
|
763
|
+
|
764
|
+
HPDF_EXPORT(HPDF_REAL)
|
765
|
+
HPDF_Page_GetHeight (HPDF_Page page)
|
766
|
+
{
|
767
|
+
return HPDF_Page_GetMediaBox (page).top;
|
768
|
+
}
|
769
|
+
|
770
|
+
|
771
|
+
HPDF_EXPORT(HPDF_Font)
|
772
|
+
HPDF_Page_GetCurrentFont (HPDF_Page page)
|
773
|
+
{
|
774
|
+
HPDF_PTRACE((" HPDF_Page_GetFontName\n"));
|
775
|
+
|
776
|
+
if (HPDF_Page_Validate (page)) {
|
777
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
778
|
+
|
779
|
+
return attr->gstate->font;
|
780
|
+
} else
|
781
|
+
return NULL;
|
782
|
+
}
|
783
|
+
|
784
|
+
|
785
|
+
HPDF_EXPORT(HPDF_REAL)
|
786
|
+
HPDF_Page_GetCurrentFontSize (HPDF_Page page)
|
787
|
+
{
|
788
|
+
HPDF_PTRACE((" HPDF_Page_GetCurrentFontSize\n"));
|
789
|
+
|
790
|
+
if (HPDF_Page_Validate (page)) {
|
791
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
792
|
+
|
793
|
+
return (attr->gstate->font) ? attr->gstate->font_size : 0;
|
794
|
+
} else
|
795
|
+
return 0;
|
796
|
+
}
|
797
|
+
|
798
|
+
|
799
|
+
HPDF_EXPORT(HPDF_TransMatrix)
|
800
|
+
HPDF_Page_GetTransMatrix (HPDF_Page page)
|
801
|
+
{
|
802
|
+
HPDF_TransMatrix DEF_MATRIX = {1, 0, 0, 1, 0, 0};
|
803
|
+
|
804
|
+
HPDF_PTRACE((" HPDF_Page_GetTransMatrix\n"));
|
805
|
+
if (HPDF_Page_Validate (page)) {
|
806
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
807
|
+
|
808
|
+
return attr->gstate->trans_matrix;
|
809
|
+
} else
|
810
|
+
return DEF_MATRIX;
|
811
|
+
}
|
812
|
+
|
813
|
+
|
814
|
+
HPDF_EXPORT(HPDF_REAL)
|
815
|
+
HPDF_Page_GetLineWidth (HPDF_Page page)
|
816
|
+
{
|
817
|
+
HPDF_PTRACE((" HPDF_Page_GetLineWidth\n"));
|
818
|
+
|
819
|
+
if (HPDF_Page_Validate (page)) {
|
820
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
821
|
+
|
822
|
+
return attr->gstate->line_width;
|
823
|
+
} else
|
824
|
+
return HPDF_DEF_LINEWIDTH;
|
825
|
+
}
|
826
|
+
|
827
|
+
|
828
|
+
HPDF_EXPORT(HPDF_LineCap)
|
829
|
+
HPDF_Page_GetLineCap (HPDF_Page page)
|
830
|
+
{
|
831
|
+
HPDF_PTRACE((" HPDF_Page_GetLineCap\n"));
|
832
|
+
|
833
|
+
if (HPDF_Page_Validate (page)) {
|
834
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
835
|
+
|
836
|
+
return attr->gstate->line_cap;
|
837
|
+
} else
|
838
|
+
return HPDF_DEF_LINECAP;
|
839
|
+
}
|
840
|
+
|
841
|
+
|
842
|
+
HPDF_EXPORT(HPDF_LineJoin)
|
843
|
+
HPDF_Page_GetLineJoin (HPDF_Page page)
|
844
|
+
{
|
845
|
+
HPDF_PTRACE((" HPDF_Page_GetLineJoin\n"));
|
846
|
+
|
847
|
+
if (HPDF_Page_Validate (page)) {
|
848
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
849
|
+
|
850
|
+
return attr->gstate->line_join;
|
851
|
+
} else
|
852
|
+
return HPDF_DEF_LINEJOIN;
|
853
|
+
}
|
854
|
+
|
855
|
+
|
856
|
+
HPDF_EXPORT(HPDF_REAL)
|
857
|
+
HPDF_Page_GetMiterLimit (HPDF_Page page)
|
858
|
+
{
|
859
|
+
HPDF_PTRACE((" HPDF_Page_GetMiterLimit\n"));
|
860
|
+
|
861
|
+
if (HPDF_Page_Validate (page)) {
|
862
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
863
|
+
|
864
|
+
return attr->gstate->miter_limit;
|
865
|
+
} else
|
866
|
+
return HPDF_DEF_MITERLIMIT;
|
867
|
+
}
|
868
|
+
|
869
|
+
|
870
|
+
HPDF_EXPORT(HPDF_DashMode)
|
871
|
+
HPDF_Page_GetDash (HPDF_Page page)
|
872
|
+
{
|
873
|
+
HPDF_DashMode mode = {{0, 0, 0, 0, 0, 0, 0, 0}, 0, 0};
|
874
|
+
|
875
|
+
HPDF_PTRACE((" HPDF_Page_GetDash\n"));
|
876
|
+
|
877
|
+
if (HPDF_Page_Validate (page)) {
|
878
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
879
|
+
|
880
|
+
mode = attr->gstate->dash_mode;
|
881
|
+
}
|
882
|
+
|
883
|
+
return mode;
|
884
|
+
}
|
885
|
+
|
886
|
+
|
887
|
+
HPDF_EXPORT(HPDF_REAL)
|
888
|
+
HPDF_Page_GetFlat (HPDF_Page page)
|
889
|
+
{
|
890
|
+
HPDF_PTRACE((" HPDF_Page_GetFlat\n"));
|
891
|
+
|
892
|
+
if (HPDF_Page_Validate (page)) {
|
893
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
894
|
+
|
895
|
+
return attr->gstate->flatness;
|
896
|
+
} else
|
897
|
+
return HPDF_DEF_FLATNESS;
|
898
|
+
}
|
899
|
+
|
900
|
+
|
901
|
+
HPDF_EXPORT(HPDF_REAL)
|
902
|
+
HPDF_Page_GetWordSpace (HPDF_Page page)
|
903
|
+
{
|
904
|
+
HPDF_PTRACE((" HPDF_Page_GetWordSpace\n"));
|
905
|
+
|
906
|
+
if (HPDF_Page_Validate (page)) {
|
907
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
908
|
+
|
909
|
+
return attr->gstate->word_space;
|
910
|
+
} else
|
911
|
+
return HPDF_DEF_WORDSPACE;
|
912
|
+
}
|
913
|
+
|
914
|
+
|
915
|
+
HPDF_EXPORT(HPDF_REAL)
|
916
|
+
HPDF_Page_GetCharSpace (HPDF_Page page)
|
917
|
+
{
|
918
|
+
HPDF_PTRACE((" HPDF_Page_GetCharSpace\n"));
|
919
|
+
|
920
|
+
if (HPDF_Page_Validate (page)) {
|
921
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
922
|
+
|
923
|
+
return attr->gstate->char_space;
|
924
|
+
} else
|
925
|
+
return HPDF_DEF_CHARSPACE;
|
926
|
+
}
|
927
|
+
|
928
|
+
|
929
|
+
HPDF_EXPORT(HPDF_REAL)
|
930
|
+
HPDF_Page_GetHorizontalScalling (HPDF_Page page)
|
931
|
+
{
|
932
|
+
HPDF_PTRACE((" HPDF_Page_GetHorizontalScalling\n"));
|
933
|
+
|
934
|
+
if (HPDF_Page_Validate (page)) {
|
935
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
936
|
+
|
937
|
+
return attr->gstate->h_scalling;
|
938
|
+
} else
|
939
|
+
return HPDF_DEF_HSCALING;
|
940
|
+
}
|
941
|
+
|
942
|
+
|
943
|
+
HPDF_EXPORT(HPDF_REAL)
|
944
|
+
HPDF_Page_GetTextLeading (HPDF_Page page)
|
945
|
+
{
|
946
|
+
HPDF_PTRACE((" HPDF_Page_GetTextLeading\n"));
|
947
|
+
|
948
|
+
if (HPDF_Page_Validate (page)) {
|
949
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
950
|
+
|
951
|
+
return attr->gstate->text_leading;
|
952
|
+
} else
|
953
|
+
return HPDF_DEF_LEADING;
|
954
|
+
}
|
955
|
+
|
956
|
+
|
957
|
+
HPDF_EXPORT(HPDF_TextRenderingMode)
|
958
|
+
HPDF_Page_GetTextRenderingMode (HPDF_Page page)
|
959
|
+
{
|
960
|
+
HPDF_PTRACE((" HPDF_Page_GettextRenderingMode\n"));
|
961
|
+
|
962
|
+
if (HPDF_Page_Validate (page)) {
|
963
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
964
|
+
|
965
|
+
return attr->gstate->rendering_mode;
|
966
|
+
} else
|
967
|
+
return HPDF_DEF_RENDERING_MODE;
|
968
|
+
}
|
969
|
+
|
970
|
+
|
971
|
+
HPDF_EXPORT(HPDF_REAL)
|
972
|
+
HPDF_Page_GetTextRaise (HPDF_Page page)
|
973
|
+
{
|
974
|
+
return HPDF_Page_GetTextRise (page);
|
975
|
+
}
|
976
|
+
|
977
|
+
HPDF_EXPORT(HPDF_REAL)
|
978
|
+
HPDF_Page_GetTextRise (HPDF_Page page)
|
979
|
+
{
|
980
|
+
HPDF_PTRACE((" HPDF_Page_GetTextRise\n"));
|
981
|
+
|
982
|
+
if (HPDF_Page_Validate (page)) {
|
983
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
984
|
+
|
985
|
+
return attr->gstate->text_rise;
|
986
|
+
} else
|
987
|
+
return HPDF_DEF_RISE;
|
988
|
+
}
|
989
|
+
|
990
|
+
|
991
|
+
HPDF_EXPORT(HPDF_RGBColor)
|
992
|
+
HPDF_Page_GetRGBFill (HPDF_Page page)
|
993
|
+
{
|
994
|
+
HPDF_RGBColor DEF_RGB_COLOR = {0, 0, 0};
|
995
|
+
|
996
|
+
HPDF_PTRACE((" HPDF_Page_GetRGBFill\n"));
|
997
|
+
|
998
|
+
if (HPDF_Page_Validate (page)) {
|
999
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
1000
|
+
|
1001
|
+
if (attr->gstate->cs_fill == HPDF_CS_DEVICE_RGB)
|
1002
|
+
return attr->gstate->rgb_fill;
|
1003
|
+
}
|
1004
|
+
|
1005
|
+
return DEF_RGB_COLOR;
|
1006
|
+
}
|
1007
|
+
|
1008
|
+
|
1009
|
+
HPDF_EXPORT(HPDF_RGBColor)
|
1010
|
+
HPDF_Page_GetRGBStroke (HPDF_Page page)
|
1011
|
+
{
|
1012
|
+
HPDF_RGBColor DEF_RGB_COLOR = {0, 0, 0};
|
1013
|
+
|
1014
|
+
HPDF_PTRACE((" HPDF_Page_GetRGBStroke\n"));
|
1015
|
+
|
1016
|
+
if (HPDF_Page_Validate (page)) {
|
1017
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
1018
|
+
|
1019
|
+
if (attr->gstate->cs_stroke == HPDF_CS_DEVICE_RGB)
|
1020
|
+
return attr->gstate->rgb_stroke;
|
1021
|
+
}
|
1022
|
+
|
1023
|
+
return DEF_RGB_COLOR;
|
1024
|
+
}
|
1025
|
+
|
1026
|
+
HPDF_EXPORT(HPDF_CMYKColor)
|
1027
|
+
HPDF_Page_GetCMYKFill (HPDF_Page page)
|
1028
|
+
{
|
1029
|
+
HPDF_CMYKColor DEF_CMYK_COLOR = {0, 0, 0, 0};
|
1030
|
+
|
1031
|
+
HPDF_PTRACE((" HPDF_Page_GetCMYKFill\n"));
|
1032
|
+
|
1033
|
+
if (HPDF_Page_Validate (page)) {
|
1034
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
1035
|
+
|
1036
|
+
if (attr->gstate->cs_fill == HPDF_CS_DEVICE_CMYK)
|
1037
|
+
return attr->gstate->cmyk_fill;
|
1038
|
+
}
|
1039
|
+
|
1040
|
+
return DEF_CMYK_COLOR;
|
1041
|
+
}
|
1042
|
+
|
1043
|
+
|
1044
|
+
HPDF_EXPORT(HPDF_CMYKColor)
|
1045
|
+
HPDF_Page_GetCMYKStroke (HPDF_Page page)
|
1046
|
+
{
|
1047
|
+
HPDF_CMYKColor DEF_CMYK_COLOR = {0, 0, 0, 0};
|
1048
|
+
|
1049
|
+
HPDF_PTRACE((" HPDF_Page_GetCMYKStroke\n"));
|
1050
|
+
|
1051
|
+
if (HPDF_Page_Validate (page)) {
|
1052
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
1053
|
+
|
1054
|
+
if (attr->gstate->cs_stroke == HPDF_CS_DEVICE_CMYK)
|
1055
|
+
return attr->gstate->cmyk_stroke;
|
1056
|
+
}
|
1057
|
+
|
1058
|
+
return DEF_CMYK_COLOR;
|
1059
|
+
}
|
1060
|
+
|
1061
|
+
|
1062
|
+
HPDF_EXPORT(HPDF_REAL)
|
1063
|
+
HPDF_Page_GetGrayFill (HPDF_Page page)
|
1064
|
+
{
|
1065
|
+
HPDF_PTRACE((" HPDF_Page_GetGrayFill\n"));
|
1066
|
+
|
1067
|
+
if (HPDF_Page_Validate (page)) {
|
1068
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
1069
|
+
|
1070
|
+
if (attr->gstate->cs_fill == HPDF_CS_DEVICE_GRAY)
|
1071
|
+
return attr->gstate->gray_fill;
|
1072
|
+
}
|
1073
|
+
|
1074
|
+
return 0;
|
1075
|
+
}
|
1076
|
+
|
1077
|
+
|
1078
|
+
HPDF_EXPORT(HPDF_REAL)
|
1079
|
+
HPDF_Page_GetGrayStroke (HPDF_Page page)
|
1080
|
+
{
|
1081
|
+
HPDF_PTRACE((" HPDF_Page_GetGrayStroke\n"));
|
1082
|
+
|
1083
|
+
if (HPDF_Page_Validate (page)) {
|
1084
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
1085
|
+
|
1086
|
+
if (attr->gstate->cs_stroke == HPDF_CS_DEVICE_GRAY)
|
1087
|
+
return attr->gstate->gray_stroke;
|
1088
|
+
}
|
1089
|
+
|
1090
|
+
return 0;
|
1091
|
+
}
|
1092
|
+
|
1093
|
+
|
1094
|
+
HPDF_EXPORT(HPDF_ColorSpace)
|
1095
|
+
HPDF_Page_GetStrokingColorSpace (HPDF_Page page)
|
1096
|
+
{
|
1097
|
+
HPDF_PTRACE((" HPDF_Page_GetStrokingColorSpace\n"));
|
1098
|
+
|
1099
|
+
if (HPDF_Page_Validate (page))
|
1100
|
+
return ((HPDF_PageAttr)page->attr)->gstate->cs_stroke;
|
1101
|
+
|
1102
|
+
return HPDF_CS_EOF;
|
1103
|
+
}
|
1104
|
+
|
1105
|
+
|
1106
|
+
HPDF_EXPORT(HPDF_ColorSpace)
|
1107
|
+
HPDF_Page_GetFillingColorSpace (HPDF_Page page)
|
1108
|
+
{
|
1109
|
+
HPDF_PTRACE((" HPDF_Page_GetFillingColorSpace\n"));
|
1110
|
+
|
1111
|
+
if (HPDF_Page_Validate (page))
|
1112
|
+
return ((HPDF_PageAttr)page->attr)->gstate->cs_fill;
|
1113
|
+
|
1114
|
+
return HPDF_CS_EOF;
|
1115
|
+
}
|
1116
|
+
|
1117
|
+
|
1118
|
+
HPDF_EXPORT(HPDF_TransMatrix)
|
1119
|
+
HPDF_Page_GetTextMatrix (HPDF_Page page)
|
1120
|
+
{
|
1121
|
+
HPDF_TransMatrix DEF_MATRIX = {1, 0, 0, 1, 0, 0};
|
1122
|
+
|
1123
|
+
HPDF_PTRACE((" HPDF_Page_GetTextMatrix\n"));
|
1124
|
+
if (HPDF_Page_Validate (page)) {
|
1125
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
1126
|
+
|
1127
|
+
return attr->text_matrix;
|
1128
|
+
} else
|
1129
|
+
return DEF_MATRIX;
|
1130
|
+
}
|
1131
|
+
|
1132
|
+
|
1133
|
+
HPDF_EXPORT(HPDF_UINT)
|
1134
|
+
HPDF_Page_GetGStateDepth (HPDF_Page page)
|
1135
|
+
{
|
1136
|
+
HPDF_PTRACE((" HPDF_Page_GetGStateDepth\n"));
|
1137
|
+
|
1138
|
+
if (HPDF_Page_Validate (page)) {
|
1139
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
1140
|
+
|
1141
|
+
return attr->gstate->depth;
|
1142
|
+
} else
|
1143
|
+
return 0;
|
1144
|
+
}
|
1145
|
+
|
1146
|
+
|
1147
|
+
HPDF_EXPORT(HPDF_UINT16)
|
1148
|
+
HPDF_Page_GetGMode (HPDF_Page page)
|
1149
|
+
{
|
1150
|
+
if (HPDF_Page_Validate (page))
|
1151
|
+
return ((HPDF_PageAttr)page->attr)->gmode;
|
1152
|
+
|
1153
|
+
return 0;
|
1154
|
+
}
|
1155
|
+
|
1156
|
+
HPDF_EXPORT(HPDF_Point)
|
1157
|
+
HPDF_Page_GetCurrentPos (HPDF_Page page)
|
1158
|
+
{
|
1159
|
+
HPDF_Point pos = {0, 0};
|
1160
|
+
|
1161
|
+
HPDF_PTRACE((" HPDF_Page_GetCurrentPos\n"));
|
1162
|
+
|
1163
|
+
if (HPDF_Page_Validate (page)) {
|
1164
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
1165
|
+
|
1166
|
+
if (attr->gmode & HPDF_GMODE_PATH_OBJECT)
|
1167
|
+
pos = attr->cur_pos;
|
1168
|
+
}
|
1169
|
+
|
1170
|
+
return pos;
|
1171
|
+
}
|
1172
|
+
|
1173
|
+
|
1174
|
+
HPDF_EXPORT(HPDF_STATUS)
|
1175
|
+
HPDF_Page_GetCurrentPos2 (HPDF_Page page,
|
1176
|
+
HPDF_Point *pos)
|
1177
|
+
{
|
1178
|
+
HPDF_PageAttr attr;
|
1179
|
+
HPDF_PTRACE((" HPDF_Page_GetCurrentPos2\n"));
|
1180
|
+
|
1181
|
+
pos->x = 0;
|
1182
|
+
pos->y = 0;
|
1183
|
+
if (!HPDF_Page_Validate (page))
|
1184
|
+
return HPDF_INVALID_PAGE;
|
1185
|
+
|
1186
|
+
attr = (HPDF_PageAttr)page->attr;
|
1187
|
+
|
1188
|
+
if (attr->gmode & HPDF_GMODE_PATH_OBJECT)
|
1189
|
+
*pos = attr->cur_pos;
|
1190
|
+
|
1191
|
+
return HPDF_OK;
|
1192
|
+
}
|
1193
|
+
|
1194
|
+
|
1195
|
+
HPDF_EXPORT(HPDF_Point)
|
1196
|
+
HPDF_Page_GetCurrentTextPos (HPDF_Page page)
|
1197
|
+
{
|
1198
|
+
HPDF_Point pos = {0, 0};
|
1199
|
+
|
1200
|
+
HPDF_PTRACE((" HPDF_Page_GetCurrentTextPos\n"));
|
1201
|
+
|
1202
|
+
if (HPDF_Page_Validate (page)) {
|
1203
|
+
HPDF_PageAttr attr = (HPDF_PageAttr)page->attr;
|
1204
|
+
|
1205
|
+
if (attr->gmode & HPDF_GMODE_TEXT_OBJECT)
|
1206
|
+
pos = attr->text_pos;
|
1207
|
+
}
|
1208
|
+
|
1209
|
+
return pos;
|
1210
|
+
}
|
1211
|
+
|
1212
|
+
|
1213
|
+
HPDF_EXPORT(HPDF_STATUS)
|
1214
|
+
HPDF_Page_GetCurrentTextPos2 (HPDF_Page page,
|
1215
|
+
HPDF_Point *pos)
|
1216
|
+
{
|
1217
|
+
HPDF_PageAttr attr;
|
1218
|
+
|
1219
|
+
HPDF_PTRACE((" HPDF_Page_GetCurrentTextPos2\n"));
|
1220
|
+
|
1221
|
+
pos->x = 0;
|
1222
|
+
pos->y = 0;
|
1223
|
+
if (!HPDF_Page_Validate (page))
|
1224
|
+
return HPDF_INVALID_PAGE;
|
1225
|
+
|
1226
|
+
attr = (HPDF_PageAttr)page->attr;
|
1227
|
+
|
1228
|
+
if (attr->gmode & HPDF_GMODE_TEXT_OBJECT)
|
1229
|
+
*pos = attr->text_pos;
|
1230
|
+
|
1231
|
+
return HPDF_OK;
|
1232
|
+
}
|
1233
|
+
|
1234
|
+
|
1235
|
+
HPDF_STATUS
|
1236
|
+
HPDF_Page_SetBoxValue (HPDF_Page page,
|
1237
|
+
const char *name,
|
1238
|
+
HPDF_UINT index,
|
1239
|
+
HPDF_REAL value)
|
1240
|
+
{
|
1241
|
+
HPDF_Real r;
|
1242
|
+
HPDF_Array array;
|
1243
|
+
|
1244
|
+
HPDF_PTRACE((" HPDF_Page_SetBoxValue\n"));
|
1245
|
+
|
1246
|
+
if (!HPDF_Page_Validate (page))
|
1247
|
+
return HPDF_INVALID_PAGE;
|
1248
|
+
|
1249
|
+
array = HPDF_Page_GetInheritableItem (page, name, HPDF_OCLASS_ARRAY);
|
1250
|
+
if (!array)
|
1251
|
+
return HPDF_SetError (page->error, HPDF_PAGE_CANNOT_FIND_OBJECT, 0);
|
1252
|
+
|
1253
|
+
r = HPDF_Array_GetItem (array, index, HPDF_OCLASS_REAL);
|
1254
|
+
if (!r)
|
1255
|
+
return HPDF_SetError (page->error, HPDF_PAGE_INVALID_INDEX, 0);
|
1256
|
+
|
1257
|
+
r->value = value;
|
1258
|
+
|
1259
|
+
return HPDF_OK;
|
1260
|
+
}
|
1261
|
+
|
1262
|
+
|
1263
|
+
HPDF_EXPORT(HPDF_STATUS)
|
1264
|
+
HPDF_Page_SetRotate (HPDF_Page page,
|
1265
|
+
HPDF_UINT16 angle)
|
1266
|
+
{
|
1267
|
+
HPDF_Number n;
|
1268
|
+
HPDF_STATUS ret = HPDF_OK;
|
1269
|
+
|
1270
|
+
HPDF_PTRACE((" HPDF_Page_SetRotate\n"));
|
1271
|
+
|
1272
|
+
if (!HPDF_Page_Validate (page))
|
1273
|
+
return HPDF_INVALID_PAGE;
|
1274
|
+
|
1275
|
+
if (angle % 90 != 0)
|
1276
|
+
return HPDF_RaiseError (page->error, HPDF_PAGE_INVALID_ROTATE_VALUE,
|
1277
|
+
(HPDF_STATUS)angle);
|
1278
|
+
|
1279
|
+
n = HPDF_Page_GetInheritableItem (page, "Rotate", HPDF_OCLASS_NUMBER);
|
1280
|
+
|
1281
|
+
if (!n)
|
1282
|
+
ret = HPDF_Dict_AddNumber (page, "Rotate", angle);
|
1283
|
+
else
|
1284
|
+
n->value = angle;
|
1285
|
+
|
1286
|
+
return ret;
|
1287
|
+
}
|
1288
|
+
|
1289
|
+
|
1290
|
+
HPDF_EXPORT(HPDF_STATUS)
|
1291
|
+
HPDF_Page_SetWidth (HPDF_Page page,
|
1292
|
+
HPDF_REAL value)
|
1293
|
+
{
|
1294
|
+
HPDF_PTRACE((" HPDF_Page_SetWidth\n"));
|
1295
|
+
|
1296
|
+
if (value < 3 || value > 14400)
|
1297
|
+
return HPDF_RaiseError (page->error, HPDF_PAGE_INVALID_SIZE, 0);
|
1298
|
+
|
1299
|
+
if (HPDF_Page_SetBoxValue (page, "MediaBox", 2, value) != HPDF_OK)
|
1300
|
+
return HPDF_CheckError (page->error);
|
1301
|
+
|
1302
|
+
return HPDF_OK;
|
1303
|
+
}
|
1304
|
+
|
1305
|
+
|
1306
|
+
HPDF_EXPORT(HPDF_STATUS)
|
1307
|
+
HPDF_Page_SetHeight (HPDF_Page page,
|
1308
|
+
HPDF_REAL value)
|
1309
|
+
{
|
1310
|
+
HPDF_PTRACE((" HPDF_Page_SetWidth\n"));
|
1311
|
+
|
1312
|
+
if (value < 3 || value > 14400)
|
1313
|
+
return HPDF_RaiseError (page->error, HPDF_PAGE_INVALID_SIZE, 0);
|
1314
|
+
|
1315
|
+
if (HPDF_Page_SetBoxValue (page, "MediaBox", 3, value) != HPDF_OK)
|
1316
|
+
return HPDF_CheckError (page->error);
|
1317
|
+
|
1318
|
+
return HPDF_OK;
|
1319
|
+
}
|
1320
|
+
|
1321
|
+
|
1322
|
+
HPDF_EXPORT(HPDF_STATUS)
|
1323
|
+
HPDF_Page_SetSize (HPDF_Page page,
|
1324
|
+
HPDF_PageSizes size,
|
1325
|
+
HPDF_PageDirection direction)
|
1326
|
+
{
|
1327
|
+
HPDF_STATUS ret = HPDF_OK;
|
1328
|
+
|
1329
|
+
HPDF_PTRACE((" HPDF_Page_SetSize\n"));
|
1330
|
+
|
1331
|
+
if (!HPDF_Page_Validate (page))
|
1332
|
+
return HPDF_INVALID_PAGE;
|
1333
|
+
|
1334
|
+
if (size < 0 || size > HPDF_PAGE_SIZE_EOF)
|
1335
|
+
return HPDF_RaiseError (page->error, HPDF_PAGE_INVALID_SIZE,
|
1336
|
+
(HPDF_STATUS)direction);
|
1337
|
+
|
1338
|
+
if (direction == HPDF_PAGE_LANDSCAPE) {
|
1339
|
+
ret += HPDF_Page_SetHeight (page,
|
1340
|
+
HPDF_PREDEFINED_PAGE_SIZES[(HPDF_UINT)size].x);
|
1341
|
+
ret += HPDF_Page_SetWidth (page,
|
1342
|
+
HPDF_PREDEFINED_PAGE_SIZES[(HPDF_UINT)size].y);
|
1343
|
+
} else if (direction == HPDF_PAGE_PORTRAIT) {
|
1344
|
+
ret += HPDF_Page_SetHeight (page,
|
1345
|
+
HPDF_PREDEFINED_PAGE_SIZES[(HPDF_UINT)size].y);
|
1346
|
+
ret += HPDF_Page_SetWidth (page,
|
1347
|
+
HPDF_PREDEFINED_PAGE_SIZES[(HPDF_UINT)size].x);
|
1348
|
+
} else
|
1349
|
+
ret = HPDF_SetError (page->error, HPDF_PAGE_INVALID_DIRECTION,
|
1350
|
+
(HPDF_STATUS)direction);
|
1351
|
+
|
1352
|
+
if (ret != HPDF_OK)
|
1353
|
+
return HPDF_CheckError (page->error);
|
1354
|
+
|
1355
|
+
return HPDF_OK;
|
1356
|
+
}
|
1357
|
+
|
1358
|
+
|
1359
|
+
HPDF_BOOL
|
1360
|
+
HPDF_Page_Validate (HPDF_Page page)
|
1361
|
+
{
|
1362
|
+
HPDF_Obj_Header *header = (HPDF_Obj_Header *)page;
|
1363
|
+
|
1364
|
+
HPDF_PTRACE((" HPDF_Page_Validate\n"));
|
1365
|
+
|
1366
|
+
if (!page || !page->attr)
|
1367
|
+
return HPDF_FALSE;
|
1368
|
+
|
1369
|
+
if (header->obj_class != (HPDF_OCLASS_DICT | HPDF_OSUBCLASS_PAGE))
|
1370
|
+
return HPDF_FALSE;
|
1371
|
+
|
1372
|
+
return HPDF_TRUE;
|
1373
|
+
}
|
1374
|
+
|
1375
|
+
|
1376
|
+
HPDF_EXPORT(HPDF_Destination)
|
1377
|
+
HPDF_Page_CreateDestination (HPDF_Page page)
|
1378
|
+
{
|
1379
|
+
HPDF_PageAttr attr;
|
1380
|
+
HPDF_Destination dst;
|
1381
|
+
|
1382
|
+
HPDF_PTRACE((" HPDF_Page_CreateDestination\n"));
|
1383
|
+
|
1384
|
+
if (!HPDF_Page_Validate (page))
|
1385
|
+
return NULL;
|
1386
|
+
|
1387
|
+
attr = (HPDF_PageAttr)page->attr;
|
1388
|
+
|
1389
|
+
dst = HPDF_Destination_New (page->mmgr, page, attr->xref);
|
1390
|
+
if (!dst)
|
1391
|
+
HPDF_CheckError (page->error);
|
1392
|
+
|
1393
|
+
return dst;
|
1394
|
+
}
|
1395
|
+
|
1396
|
+
|
1397
|
+
HPDF_EXPORT(HPDF_Annotation)
|
1398
|
+
HPDF_Page_CreateTextAnnot (HPDF_Page page,
|
1399
|
+
HPDF_Rect rect,
|
1400
|
+
const char *text,
|
1401
|
+
HPDF_Encoder encoder)
|
1402
|
+
{
|
1403
|
+
HPDF_PageAttr attr;
|
1404
|
+
HPDF_Annotation annot;
|
1405
|
+
|
1406
|
+
HPDF_PTRACE((" HPDF_Page_CreateTextAnnot\n"));
|
1407
|
+
|
1408
|
+
if (!HPDF_Page_Validate (page))
|
1409
|
+
return NULL;
|
1410
|
+
|
1411
|
+
attr = (HPDF_PageAttr)page->attr;
|
1412
|
+
|
1413
|
+
if (encoder && !HPDF_Encoder_Validate (encoder)) {
|
1414
|
+
HPDF_RaiseError (page->error, HPDF_INVALID_ENCODER, 0);
|
1415
|
+
return NULL;
|
1416
|
+
}
|
1417
|
+
|
1418
|
+
annot = HPDF_TextAnnot_New (page->mmgr, attr->xref, rect, text, encoder);
|
1419
|
+
if (annot) {
|
1420
|
+
if (AddAnnotation (page, annot) != HPDF_OK) {
|
1421
|
+
HPDF_CheckError (page->error);
|
1422
|
+
annot = NULL;
|
1423
|
+
}
|
1424
|
+
} else
|
1425
|
+
HPDF_CheckError (page->error);
|
1426
|
+
|
1427
|
+
return annot;
|
1428
|
+
}
|
1429
|
+
|
1430
|
+
|
1431
|
+
HPDF_EXPORT(HPDF_Annotation)
|
1432
|
+
HPDF_Page_CreateLinkAnnot (HPDF_Page page,
|
1433
|
+
HPDF_Rect rect,
|
1434
|
+
HPDF_Destination dst)
|
1435
|
+
{
|
1436
|
+
HPDF_PageAttr attr;
|
1437
|
+
HPDF_Annotation annot;
|
1438
|
+
|
1439
|
+
HPDF_PTRACE((" HPDF_Page_CreateLinkAnnot\n"));
|
1440
|
+
|
1441
|
+
if (!HPDF_Page_Validate (page))
|
1442
|
+
return NULL;
|
1443
|
+
|
1444
|
+
attr = (HPDF_PageAttr)page->attr;
|
1445
|
+
|
1446
|
+
if (!HPDF_Destination_Validate (dst)) {
|
1447
|
+
HPDF_RaiseError (page->error, HPDF_INVALID_DESTINATION, 0);
|
1448
|
+
return NULL;
|
1449
|
+
}
|
1450
|
+
|
1451
|
+
annot = HPDF_LinkAnnot_New (page->mmgr, attr->xref, rect, dst);
|
1452
|
+
if (annot) {
|
1453
|
+
if (AddAnnotation (page, annot) != HPDF_OK) {
|
1454
|
+
HPDF_CheckError (page->error);
|
1455
|
+
annot = NULL;
|
1456
|
+
}
|
1457
|
+
} else
|
1458
|
+
HPDF_CheckError (page->error);
|
1459
|
+
|
1460
|
+
return annot;
|
1461
|
+
}
|
1462
|
+
|
1463
|
+
|
1464
|
+
HPDF_EXPORT(HPDF_Annotation)
|
1465
|
+
HPDF_Page_CreateURILinkAnnot (HPDF_Page page,
|
1466
|
+
HPDF_Rect rect,
|
1467
|
+
const char *uri)
|
1468
|
+
{
|
1469
|
+
HPDF_PageAttr attr;
|
1470
|
+
HPDF_Annotation annot;
|
1471
|
+
|
1472
|
+
HPDF_PTRACE((" HPDF_Page_CreateURILinkAnnot\n"));
|
1473
|
+
|
1474
|
+
if (!HPDF_Page_Validate (page))
|
1475
|
+
return NULL;
|
1476
|
+
|
1477
|
+
attr = (HPDF_PageAttr)page->attr;
|
1478
|
+
|
1479
|
+
if (HPDF_StrLen (uri, HPDF_LIMIT_MAX_STRING_LEN) <= 0) {
|
1480
|
+
HPDF_RaiseError (page->error, HPDF_INVALID_URI, 0);
|
1481
|
+
return NULL;
|
1482
|
+
}
|
1483
|
+
|
1484
|
+
annot = HPDF_URILinkAnnot_New (page->mmgr, attr->xref, rect, uri);
|
1485
|
+
if (annot) {
|
1486
|
+
if (AddAnnotation (page, annot) != HPDF_OK) {
|
1487
|
+
HPDF_CheckError (page->error);
|
1488
|
+
annot = NULL;
|
1489
|
+
}
|
1490
|
+
} else
|
1491
|
+
HPDF_CheckError (page->error);
|
1492
|
+
|
1493
|
+
return annot;
|
1494
|
+
}
|
1495
|
+
|
1496
|
+
|
1497
|
+
void
|
1498
|
+
HPDF_Page_SetFilter (HPDF_Page page,
|
1499
|
+
HPDF_UINT filter)
|
1500
|
+
{
|
1501
|
+
HPDF_PageAttr attr;
|
1502
|
+
|
1503
|
+
HPDF_PTRACE((" HPDF_Page_SetFilter\n"));
|
1504
|
+
|
1505
|
+
attr = (HPDF_PageAttr)page->attr;
|
1506
|
+
attr->contents->filter = filter;
|
1507
|
+
}
|
1508
|
+
|