hpdf 2.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. data/History +57 -0
  2. data/License +25 -0
  3. data/README +165 -0
  4. data/examples/arc_demo.rb +82 -0
  5. data/examples/demo.rb +92 -0
  6. data/examples/encryption.rb +41 -0
  7. data/examples/ext_gstater_demo.rb +171 -0
  8. data/examples/font_demo.rb +67 -0
  9. data/examples/jpfont_demo.rb +122 -0
  10. data/examples/line_demo.rb +301 -0
  11. data/examples/slide_show_demo.rb +139 -0
  12. data/examples/text_demo2.rb +189 -0
  13. data/examples/ttfont_demo.rb +106 -0
  14. data/ext/extconf.rb +6 -0
  15. data/ext/hpdf.c +3779 -0
  16. data/ext/hpdf_annotation.c +415 -0
  17. data/ext/hpdf_array.c +344 -0
  18. data/ext/hpdf_binary.c +117 -0
  19. data/ext/hpdf_boolean.c +47 -0
  20. data/ext/hpdf_catalog.c +354 -0
  21. data/ext/hpdf_destination.c +339 -0
  22. data/ext/hpdf_dict.c +488 -0
  23. data/ext/hpdf_doc.c +2020 -0
  24. data/ext/hpdf_doc_png.c +137 -0
  25. data/ext/hpdf_encoder.c +2991 -0
  26. data/ext/hpdf_encoder_cns.c +36359 -0
  27. data/ext/hpdf_encoder_cnt.c +15307 -0
  28. data/ext/hpdf_encoder_jp.c +16125 -0
  29. data/ext/hpdf_encoder_kr.c +27978 -0
  30. data/ext/hpdf_encrypt.c +632 -0
  31. data/ext/hpdf_encryptdict.c +240 -0
  32. data/ext/hpdf_error.c +114 -0
  33. data/ext/hpdf_ext_gstate.c +150 -0
  34. data/ext/hpdf_font.c +229 -0
  35. data/ext/hpdf_font_cid.c +1030 -0
  36. data/ext/hpdf_font_tt.c +406 -0
  37. data/ext/hpdf_font_type1.c +391 -0
  38. data/ext/hpdf_fontdef.c +56 -0
  39. data/ext/hpdf_fontdef_base14.c +4506 -0
  40. data/ext/hpdf_fontdef_cid.c +194 -0
  41. data/ext/hpdf_fontdef_cns.c +471 -0
  42. data/ext/hpdf_fontdef_cnt.c +250 -0
  43. data/ext/hpdf_fontdef_jp.c +1904 -0
  44. data/ext/hpdf_fontdef_kr.c +1572 -0
  45. data/ext/hpdf_fontdef_tt.c +2230 -0
  46. data/ext/hpdf_fontdef_type1.c +524 -0
  47. data/ext/hpdf_gstate.c +119 -0
  48. data/ext/hpdf_image.c +568 -0
  49. data/ext/hpdf_image_png.c +424 -0
  50. data/ext/hpdf_info.c +164 -0
  51. data/ext/hpdf_list.c +333 -0
  52. data/ext/hpdf_mmgr.c +243 -0
  53. data/ext/hpdf_name.c +71 -0
  54. data/ext/hpdf_null.c +31 -0
  55. data/ext/hpdf_number.c +49 -0
  56. data/ext/hpdf_objects.c +172 -0
  57. data/ext/hpdf_outline.c +329 -0
  58. data/ext/hpdf_page_label.c +74 -0
  59. data/ext/hpdf_page_operator.c +2764 -0
  60. data/ext/hpdf_pages.c +1508 -0
  61. data/ext/hpdf_real.c +61 -0
  62. data/ext/hpdf_streams.c +1435 -0
  63. data/ext/hpdf_string.c +189 -0
  64. data/ext/hpdf_utils.c +438 -0
  65. data/ext/hpdf_xref.c +348 -0
  66. data/ext/include/hpdf.h +1227 -0
  67. data/ext/include/hpdf_annotation.h +74 -0
  68. data/ext/include/hpdf_catalog.h +81 -0
  69. data/ext/include/hpdf_conf.h +76 -0
  70. data/ext/include/hpdf_consts.h +549 -0
  71. data/ext/include/hpdf_destination.h +41 -0
  72. data/ext/include/hpdf_doc.h +159 -0
  73. data/ext/include/hpdf_encoder.h +311 -0
  74. data/ext/include/hpdf_encrypt.h +156 -0
  75. data/ext/include/hpdf_encryptdict.h +66 -0
  76. data/ext/include/hpdf_error.h +201 -0
  77. data/ext/include/hpdf_ext_gstate.h +38 -0
  78. data/ext/include/hpdf_font.h +112 -0
  79. data/ext/include/hpdf_fontdef.h +403 -0
  80. data/ext/include/hpdf_gstate.h +80 -0
  81. data/ext/include/hpdf_image.h +72 -0
  82. data/ext/include/hpdf_info.h +48 -0
  83. data/ext/include/hpdf_list.h +85 -0
  84. data/ext/include/hpdf_mmgr.h +82 -0
  85. data/ext/include/hpdf_objects.h +587 -0
  86. data/ext/include/hpdf_outline.h +74 -0
  87. data/ext/include/hpdf_page_label.h +35 -0
  88. data/ext/include/hpdf_pages.h +128 -0
  89. data/ext/include/hpdf_streams.h +276 -0
  90. data/ext/include/hpdf_types.h +488 -0
  91. data/ext/include/hpdf_utils.h +161 -0
  92. data/tests/arc_demo.rb +82 -0
  93. data/tests/demo.rb +91 -0
  94. data/tests/encryption.rb +41 -0
  95. data/tests/ext_gstater_demo.rb +171 -0
  96. data/tests/font_demo.rb +67 -0
  97. data/tests/line_demo.rb +301 -0
  98. data/tests/slide_show_demo.rb +139 -0
  99. data/tests/test_all_examples.rb +31 -0
  100. data/tests/text_demo2.rb +189 -0
  101. metadata +147 -0
@@ -0,0 +1,240 @@
1
+ /*
2
+ * << Haru Free PDF Library 2.0.5 >> -- hpdf_encryptdict.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
+ * 2006.09.04 modified.
14
+ *---------------------------------------------------------------------------*/
15
+
16
+ #include <time.h>
17
+ #include "hpdf_conf.h"
18
+ #include "hpdf_utils.h"
19
+ #include "hpdf_objects.h"
20
+ #include "hpdf_encryptdict.h"
21
+ #include "hpdf_info.h"
22
+
23
+ /*---------------------------------------------------------------------------*/
24
+ /*------ HPDF_EncryptDict ---------------------------------------------------*/
25
+
26
+
27
+ HPDF_EncryptDict
28
+ HPDF_EncryptDict_New (HPDF_MMgr mmgr,
29
+ HPDF_Xref xref)
30
+ {
31
+ HPDF_Encrypt attr;
32
+ HPDF_EncryptDict dict;
33
+
34
+ HPDF_PTRACE((" HPDF_EncryptDict_New\n"));
35
+
36
+ dict = HPDF_Dict_New (mmgr);
37
+ if (!dict)
38
+ return NULL;
39
+
40
+ dict->header.obj_class |= HPDF_OSUBCLASS_ENCRYPT;
41
+ dict->free_fn = HPDF_EncryptDict_OnFree;
42
+
43
+ attr = HPDF_GetMem (dict->mmgr, sizeof(HPDF_Encrypt_Rec));
44
+ if (!attr) {
45
+ HPDF_Dict_Free (dict);
46
+ return NULL;
47
+ }
48
+
49
+ dict->attr = attr;
50
+ HPDF_Encrypt_Init (attr);
51
+
52
+ if (HPDF_Xref_Add (xref, dict) != HPDF_OK)
53
+ return NULL;
54
+
55
+ return dict;
56
+ }
57
+
58
+
59
+ void
60
+ HPDF_EncryptDict_CreateID (HPDF_EncryptDict dict,
61
+ HPDF_Dict info,
62
+ HPDF_Xref xref)
63
+ {
64
+ HPDF_MD5_CTX ctx;
65
+ HPDF_Encrypt attr = (HPDF_Encrypt)dict->attr;
66
+
67
+ /* use the result of 'time' function to get random value.
68
+ * when debugging, 'time' value is ignored.
69
+ */
70
+ #ifndef HPDF_DEBUG
71
+ time_t t = HPDF_TIME (NULL);
72
+ #endif /* HPDF_DEBUG */
73
+
74
+ HPDF_MD5Init (&ctx);
75
+
76
+ #ifndef HPDF_DEBUG
77
+ HPDF_MD5Update(&ctx, (HPDF_BYTE *)&t, sizeof(t));
78
+
79
+ /* create File Identifier from elements of Into dictionary. */
80
+ if (info) {
81
+ const char *s;
82
+ HPDF_UINT len;
83
+
84
+ /* Author */
85
+ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_AUTHOR);
86
+ if ((len = HPDF_StrLen (s, -1)) > 0)
87
+ HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len);
88
+
89
+ /* Creator */
90
+ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_CREATOR);
91
+ if ((len = HPDF_StrLen (s, -1)) > 0)
92
+ HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len);
93
+
94
+ /* Producer */
95
+ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_PRODUCER);
96
+ if ((len = HPDF_StrLen (s, -1)) > 0)
97
+ HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len);
98
+
99
+ /* Title */
100
+ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_TITLE);
101
+ if ((len = HPDF_StrLen (s, -1)) > 0)
102
+ HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len);
103
+
104
+ /* Subject */
105
+ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_SUBJECT);
106
+ if ((len = HPDF_StrLen (s, -1)) > 0)
107
+ HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len);
108
+
109
+ /* Keywords */
110
+ s = HPDF_Info_GetInfoAttr (info, HPDF_INFO_KEYWORDS);
111
+ if ((len = HPDF_StrLen (s, -1)) > 0)
112
+ HPDF_MD5Update(&ctx, (const HPDF_BYTE *)s, len);
113
+
114
+ HPDF_MD5Update(&ctx, (const HPDF_BYTE *)&(xref->entries->count),
115
+ sizeof(HPDF_UINT32));
116
+
117
+ }
118
+ #endif
119
+ HPDF_MD5Final(attr->encrypt_id, &ctx);
120
+ }
121
+
122
+
123
+ HPDF_STATUS
124
+ HPDF_EncryptDict_Prepare (HPDF_EncryptDict dict,
125
+ HPDF_Dict info,
126
+ HPDF_Xref xref)
127
+ {
128
+ HPDF_STATUS ret;
129
+ HPDF_Encrypt attr = (HPDF_Encrypt)dict->attr;
130
+ HPDF_Binary user_key;
131
+ HPDF_Binary owner_key;
132
+
133
+ HPDF_PTRACE((" HPDF_EncryptDict_Prepare\n"));
134
+
135
+ HPDF_EncryptDict_CreateID (dict, info, xref);
136
+ HPDF_Encrypt_CreateOwnerKey (attr);
137
+ HPDF_Encrypt_CreateEncryptionKey (attr);
138
+ HPDF_Encrypt_CreateUserKey (attr);
139
+
140
+ owner_key = HPDF_Binary_New (dict->mmgr, attr->owner_key, HPDF_PASSWD_LEN);
141
+ if (!owner_key)
142
+ return HPDF_Error_GetCode (dict->error);
143
+
144
+ if ((ret = HPDF_Dict_Add (dict, "O", owner_key)) != HPDF_OK)
145
+ return ret;
146
+
147
+ user_key = HPDF_Binary_New (dict->mmgr, attr->user_key, HPDF_PASSWD_LEN);
148
+ if (!user_key)
149
+ return HPDF_Error_GetCode (dict->error);
150
+
151
+ if ((ret = HPDF_Dict_Add (dict, "U", user_key)) != HPDF_OK)
152
+ return ret;
153
+
154
+ ret += HPDF_Dict_AddName (dict, "Filter", "Standard");
155
+
156
+ if (attr->mode == HPDF_ENCRYPT_R2) {
157
+ ret += HPDF_Dict_AddNumber (dict, "V", 1);
158
+ ret += HPDF_Dict_AddNumber (dict, "R", 2);
159
+ } else if (attr->mode == HPDF_ENCRYPT_R3) {
160
+ ret += HPDF_Dict_AddNumber (dict, "V", 2);
161
+ ret += HPDF_Dict_AddNumber (dict, "R", 3);
162
+ ret += HPDF_Dict_AddNumber (dict, "Length", attr->key_len * 8);
163
+ }
164
+
165
+ ret += HPDF_Dict_AddNumber (dict, "P", attr->permission);
166
+
167
+ if (ret != HPDF_OK)
168
+ return HPDF_Error_GetCode (dict->error);
169
+
170
+ return HPDF_OK;
171
+ }
172
+
173
+
174
+ void
175
+ HPDF_EncryptDict_OnFree (HPDF_Dict obj)
176
+ {
177
+ HPDF_Encrypt attr = (HPDF_Encrypt)obj->attr;
178
+
179
+ HPDF_PTRACE((" HPDF_EncryptDict_OnFree\n"));
180
+
181
+ if (attr)
182
+ HPDF_FreeMem (obj->mmgr, attr);
183
+ }
184
+
185
+
186
+ HPDF_STATUS
187
+ HPDF_EncryptDict_SetPassword (HPDF_EncryptDict dict,
188
+ const char *owner_passwd,
189
+ const char *user_passwd)
190
+ {
191
+ HPDF_Encrypt attr = (HPDF_Encrypt)dict->attr;
192
+
193
+ HPDF_PTRACE((" HPDF_EncryptDict_SetPassword\n"));
194
+
195
+ if (HPDF_StrLen(owner_passwd, 2) == 0)
196
+ return HPDF_SetError(dict->error, HPDF_ENCRYPT_INVALID_PASSWORD, 0);
197
+
198
+ if (owner_passwd && user_passwd &&
199
+ HPDF_StrCmp (owner_passwd, user_passwd) == 0)
200
+ return HPDF_SetError(dict->error, HPDF_ENCRYPT_INVALID_PASSWORD, 0);
201
+
202
+ HPDF_PadOrTrancatePasswd (owner_passwd, attr->owner_passwd);
203
+ HPDF_PadOrTrancatePasswd (user_passwd, attr->user_passwd);
204
+
205
+ return HPDF_OK;
206
+ }
207
+
208
+
209
+ HPDF_BOOL
210
+ HPDF_EncryptDict_Validate (HPDF_EncryptDict dict)
211
+ {
212
+ HPDF_Obj_Header *header = (HPDF_Obj_Header *)dict;
213
+
214
+ HPDF_PTRACE((" HPDF_EncryptDict_Validate\n"));
215
+
216
+ if (!dict || !dict->attr)
217
+ return HPDF_FALSE;
218
+
219
+ if (header->obj_class != (HPDF_OCLASS_DICT | HPDF_OSUBCLASS_ENCRYPT))
220
+ return HPDF_FALSE;
221
+
222
+ return HPDF_TRUE;
223
+ }
224
+
225
+
226
+ HPDF_Encrypt
227
+ HPDF_EncryptDict_GetAttr (HPDF_EncryptDict dict)
228
+ {
229
+ HPDF_Obj_Header *header = (HPDF_Obj_Header *)dict;
230
+
231
+ HPDF_PTRACE((" HPDF_EncryptDict_GetAttr\n"));
232
+
233
+ if (dict && dict->attr &&
234
+ (header->obj_class == (HPDF_OCLASS_DICT | HPDF_OSUBCLASS_ENCRYPT)))
235
+ return (HPDF_Encrypt)dict->attr;
236
+
237
+ return NULL;
238
+ }
239
+
240
+
@@ -0,0 +1,114 @@
1
+ /*
2
+ * << Haru Free PDF Library 2.0.0 >> -- hpdf_error.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_error.h"
18
+ #include "hpdf_consts.h"
19
+
20
+ #ifndef HPDF_STDCALL
21
+ #ifdef HPDF_DLL_MAKE
22
+ #define HPDF_STDCALL __stdcall
23
+ #else
24
+ #ifdef HPDF_DLL
25
+ #define HPDF_STDCALL __stdcall
26
+ #else
27
+ #define HPDF_STDCALL
28
+ #endif
29
+ #endif
30
+ #endif
31
+
32
+ void
33
+ HPDF_CopyError (HPDF_Error dst,
34
+ HPDF_Error src);
35
+
36
+
37
+ void
38
+ HPDF_Error_Init (HPDF_Error error,
39
+ void *user_data)
40
+ {
41
+ HPDF_MemSet(error, 0, sizeof(HPDF_Error_Rec));
42
+
43
+ error->user_data = user_data;
44
+ }
45
+
46
+ HPDF_STATUS
47
+ HPDF_Error_GetCode (HPDF_Error error)
48
+ {
49
+ return error->error_no;
50
+ }
51
+
52
+ HPDF_STATUS
53
+ HPDF_Error_GetDetailCode (HPDF_Error error)
54
+ {
55
+ return error->detail_no;
56
+ }
57
+
58
+ void
59
+ HPDF_CopyError (HPDF_Error dst,
60
+ HPDF_Error src)
61
+ {
62
+ dst->error_no = src->error_no;
63
+ dst->detail_no = src->detail_no;
64
+ dst->error_fn = src->error_fn;
65
+ dst->user_data = src->user_data;
66
+ }
67
+
68
+ HPDF_STATUS
69
+ HPDF_SetError (HPDF_Error error,
70
+ HPDF_STATUS error_no,
71
+ HPDF_STATUS detail_no)
72
+ {
73
+ HPDF_PTRACE((" HPDF_SetError: error_no=0x%04X "
74
+ "detail_no=0x%04X\n", (HPDF_UINT)error_no, (HPDF_UINT)detail_no));
75
+
76
+ error->error_no = error_no;
77
+ error->detail_no = detail_no;
78
+
79
+ return error_no;
80
+ }
81
+
82
+
83
+ HPDF_STATUS
84
+ HPDF_CheckError (HPDF_Error error)
85
+ {
86
+ HPDF_PTRACE((" HPDF_CheckError: error_no=0x%04X detail_no=0x%04X\n",
87
+ (HPDF_UINT)error->error_no, (HPDF_UINT)error->detail_no));
88
+
89
+ if (error->error_no != HPDF_OK && error->error_fn)
90
+ error->error_fn (error->error_no, error->detail_no, error->user_data);
91
+
92
+ return error->error_no;
93
+ }
94
+
95
+
96
+ HPDF_STATUS
97
+ HPDF_RaiseError (HPDF_Error error,
98
+ HPDF_STATUS error_no,
99
+ HPDF_STATUS detail_no)
100
+ {
101
+ HPDF_SetError (error, error_no, detail_no);
102
+
103
+ return HPDF_CheckError (error);
104
+ }
105
+
106
+
107
+ void
108
+ HPDF_Error_Reset (HPDF_Error error)
109
+ {
110
+ error->error_no = HPDF_NOERROR;
111
+ error->detail_no = HPDF_NOERROR;
112
+ }
113
+
114
+
@@ -0,0 +1,150 @@
1
+ /*
2
+ * << Haru Free PDF Library 2.0.0 >> -- hpdf_ext_gstate.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_ext_gstate.h"
18
+ #include "hpdf.h"
19
+
20
+ const static char *HPDF_BM_NAMES[] = {
21
+ "Normal",
22
+ "Multiply",
23
+ "Screen",
24
+ "Overlay",
25
+ "Darken",
26
+ "Lighten",
27
+ "ColorDodge",
28
+ "ColorBurn",
29
+ "HardLight",
30
+ "SoftLight",
31
+ "Difference",
32
+ "Exclusion"
33
+ };
34
+
35
+
36
+ HPDF_BOOL
37
+ HPDF_ExtGState_Validate (HPDF_ExtGState ext_gstate)
38
+ {
39
+ if (!ext_gstate || (ext_gstate->header.obj_class !=
40
+ (HPDF_OSUBCLASS_EXT_GSTATE | HPDF_OCLASS_DICT) &&
41
+ ext_gstate->header.obj_class !=
42
+ (HPDF_OSUBCLASS_EXT_GSTATE_R | HPDF_OCLASS_DICT)))
43
+ return HPDF_FALSE;
44
+
45
+ return HPDF_TRUE;
46
+ }
47
+
48
+
49
+ HPDF_STATUS
50
+ ExtGState_Check (HPDF_ExtGState ext_gstate)
51
+ {
52
+ if (!HPDF_ExtGState_Validate (ext_gstate))
53
+ return HPDF_INVALID_OBJECT;
54
+
55
+ if (ext_gstate->header.obj_class ==
56
+ (HPDF_OSUBCLASS_EXT_GSTATE_R | HPDF_OCLASS_DICT))
57
+ return HPDF_RaiseError (ext_gstate->error, HPDF_EXT_GSTATE_READ_ONLY,
58
+ 0);
59
+
60
+ return HPDF_OK;
61
+ }
62
+
63
+
64
+ HPDF_Dict
65
+ HPDF_ExtGState_New (HPDF_MMgr mmgr,
66
+ HPDF_Xref xref)
67
+ {
68
+ HPDF_Dict obj = HPDF_Dict_New (mmgr);
69
+
70
+ HPDF_PTRACE ((" HPDF_ExtGState_New\n"));
71
+
72
+ if (!obj)
73
+ return NULL;
74
+
75
+ if (HPDF_Xref_Add (xref, obj) != HPDF_OK)
76
+ return NULL;
77
+
78
+ if (HPDF_Dict_AddName (obj, "Type", "ExtGState") != HPDF_OK)
79
+ return NULL;
80
+
81
+ obj->header.obj_class |= HPDF_OSUBCLASS_EXT_GSTATE;
82
+
83
+ return obj;
84
+ }
85
+
86
+
87
+ HPDF_EXPORT(HPDF_STATUS)
88
+ HPDF_ExtGState_SetAlphaStroke (HPDF_ExtGState ext_gstate,
89
+ HPDF_REAL value)
90
+ {
91
+ HPDF_STATUS ret = ExtGState_Check (ext_gstate);
92
+
93
+ if (ret != HPDF_OK)
94
+ return ret;
95
+
96
+ if (value < 0 || value > 1.0f)
97
+ return HPDF_RaiseError (ext_gstate->error,
98
+ HPDF_EXT_GSTATE_OUT_OF_RANGE, 0);
99
+
100
+ return HPDF_Dict_AddReal (ext_gstate, "CA", value);
101
+ }
102
+
103
+
104
+ HPDF_EXPORT(HPDF_STATUS)
105
+ HPDF_ExtGState_SetAlphaFill (HPDF_ExtGState ext_gstate,
106
+ HPDF_REAL value)
107
+ {
108
+ HPDF_STATUS ret = ExtGState_Check (ext_gstate);
109
+
110
+ if (ret != HPDF_OK)
111
+ return ret;
112
+
113
+ if (value < 0 || value > 1.0f)
114
+ return HPDF_RaiseError (ext_gstate->error,
115
+ HPDF_EXT_GSTATE_OUT_OF_RANGE, 0);
116
+
117
+ return HPDF_Dict_AddReal (ext_gstate, "ca", value);
118
+ }
119
+
120
+
121
+ HPDF_EXPORT(HPDF_STATUS)
122
+ HPDF_ExtGState_SetBlendMode (HPDF_ExtGState ext_gstate,
123
+ HPDF_BlendMode bmode)
124
+ {
125
+ HPDF_STATUS ret = ExtGState_Check (ext_gstate);
126
+
127
+ if (ret != HPDF_OK)
128
+ return ret;
129
+
130
+ if ((int)bmode < 0 || (int)bmode > (int)HPDF_BM_EOF)
131
+ return HPDF_RaiseError (ext_gstate->error,
132
+ HPDF_EXT_GSTATE_OUT_OF_RANGE, 0);
133
+
134
+ return HPDF_Dict_AddName (ext_gstate, "BM", HPDF_BM_NAMES[(int)bmode]);
135
+ }
136
+
137
+ /*
138
+ HPDF_STATUS
139
+ HPDF_ExtGState_SetStrokeAdjustment (HPDF_ExtGState ext_gstate,
140
+ HPDF_BOOL value)
141
+ {
142
+ HPDF_STATUS ret = ExtGState_Check (ext_gstate);
143
+
144
+ if (ret != HPDF_OK)
145
+ return ret;
146
+
147
+ return HPDF_Dict_AddBoolean (ext_gstate, "SA", value);
148
+ }
149
+ */
150
+