poppler 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +369 -0
- data/README +37 -0
- data/Rakefile +72 -0
- data/extconf.rb +49 -0
- data/sample/number-pdf.rb +32 -0
- data/sample/pdf2.rb +107 -0
- data/sample/pdf2svg.rb +26 -0
- data/sample/pdf2text.rb +16 -0
- data/sample/pdfdiv.rb +36 -0
- data/src/lib/poppler.rb +108 -0
- data/src/rbpoppler-action.c +222 -0
- data/src/rbpoppler-annotation.c +307 -0
- data/src/rbpoppler-attachment.c +116 -0
- data/src/rbpoppler-document.c +492 -0
- data/src/rbpoppler-form-field.c +291 -0
- data/src/rbpoppler-page.c +773 -0
- data/src/rbpoppler-private.h +56 -0
- data/src/rbpoppler.c +90 -0
- data/src/rbpoppler.h +60 -0
- data/src/rbpopplerversion.h +24 -0
- data/test/poppler-test-utils.rb +47 -0
- data/test/run-test.rb +27 -0
- data/test/test_annotation.rb +84 -0
- data/test/test_color.rb +26 -0
- data/test/test_constants.rb +30 -0
- data/test/test_document.rb +41 -0
- data/test/test_page.rb +78 -0
- metadata +122 -0
@@ -0,0 +1,307 @@
|
|
1
|
+
/* -*- c-file-style: "ruby" -*- */
|
2
|
+
/**********************************************************************
|
3
|
+
|
4
|
+
rbpoppler-annotation.c -
|
5
|
+
|
6
|
+
Copyright (C) 2008 Ruby-GNOME2 Project Team
|
7
|
+
|
8
|
+
**********************************************************************/
|
9
|
+
|
10
|
+
#include "rbpoppler-private.h"
|
11
|
+
|
12
|
+
#define SELF(self) (POPPLER_ANNOT(RVAL2GOBJ(self)))
|
13
|
+
|
14
|
+
#define TYPE2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_ANNOT_TYPE))
|
15
|
+
#define FLAG2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_ANNOT_FLAG))
|
16
|
+
#define REPLY_TYPE2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_ANNOT_MARKUP_REPLY_TYPE))
|
17
|
+
#define DATA_TYPE2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_ANNOT_EXTERNAL_DATA_TYPE))
|
18
|
+
#define TEXT_ICON2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_ANNOT_TEXT_ICON))
|
19
|
+
#define TEXT_STATE2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_ANNOT_TEXT_STATE))
|
20
|
+
#define QUADDING2RVAL(obj) (GENUM2RVAL(obj, POPPLER_TYPE_ANNOT_FREE_TEXT_QUADDING))
|
21
|
+
#define LINE2RVAL(obj) (BOXED2RVAL(obj, POPPLER_TYPE_ANNOT_CALLOUT_LINE))
|
22
|
+
#define RVAL2LINE(obj) ((PopplerAnnotCalloutLine *)RVAL2BOXED(obj, POPPLER_TYPE_ANNOT_CALLOUT_LINE))
|
23
|
+
|
24
|
+
static VALUE rb_cDate;
|
25
|
+
static ID id_new;
|
26
|
+
|
27
|
+
|
28
|
+
static VALUE
|
29
|
+
annot_get_annot_type(VALUE self)
|
30
|
+
{
|
31
|
+
return TYPE2RVAL(poppler_annot_get_annot_type(SELF(self)));
|
32
|
+
}
|
33
|
+
|
34
|
+
static VALUE
|
35
|
+
annot_get_contents(VALUE self)
|
36
|
+
{
|
37
|
+
return CSTR2RVAL_FREE(poppler_annot_get_contents(SELF(self)));
|
38
|
+
}
|
39
|
+
|
40
|
+
static VALUE
|
41
|
+
annot_get_name(VALUE self)
|
42
|
+
{
|
43
|
+
return CSTR2RVAL_FREE(poppler_annot_get_name(SELF(self)));
|
44
|
+
}
|
45
|
+
|
46
|
+
static VALUE
|
47
|
+
annot_get_modified(VALUE self)
|
48
|
+
{
|
49
|
+
return CSTR2RVAL_FREE(poppler_annot_get_modified(SELF(self)));
|
50
|
+
}
|
51
|
+
|
52
|
+
static VALUE
|
53
|
+
annot_get_flags(VALUE self)
|
54
|
+
{
|
55
|
+
return FLAG2RVAL(poppler_annot_get_flags(SELF(self)));
|
56
|
+
}
|
57
|
+
|
58
|
+
static VALUE
|
59
|
+
annot_get_color(VALUE self)
|
60
|
+
{
|
61
|
+
return POPPLER_COLOR2RVAL_FREE(poppler_annot_get_color(SELF(self)));
|
62
|
+
}
|
63
|
+
|
64
|
+
/* PopplerAnnotMarkup */
|
65
|
+
#undef SELF
|
66
|
+
#define SELF(self) (POPPLER_ANNOT_MARKUP(RVAL2GOBJ(self)))
|
67
|
+
|
68
|
+
static VALUE
|
69
|
+
annot_markup_get_label(VALUE self)
|
70
|
+
{
|
71
|
+
return CSTR2RVAL_FREE(poppler_annot_markup_get_label(SELF(self)));
|
72
|
+
}
|
73
|
+
|
74
|
+
static VALUE
|
75
|
+
annot_markup_get_popup_is_open(VALUE self)
|
76
|
+
{
|
77
|
+
return CBOOL2RVAL(poppler_annot_markup_get_popup_is_open(SELF(self)));
|
78
|
+
}
|
79
|
+
|
80
|
+
static VALUE
|
81
|
+
annot_markup_get_opacity(VALUE self)
|
82
|
+
{
|
83
|
+
return rb_float_new(poppler_annot_markup_get_opacity(SELF(self)));
|
84
|
+
}
|
85
|
+
|
86
|
+
static VALUE
|
87
|
+
annot_markup_get_date(VALUE self)
|
88
|
+
{
|
89
|
+
GDate *date;
|
90
|
+
VALUE rb_date;
|
91
|
+
|
92
|
+
date = poppler_annot_markup_get_date(SELF(self));
|
93
|
+
rb_date = rb_funcall(rb_cDate, id_new, 3,
|
94
|
+
UINT2NUM(g_date_get_year(date)),
|
95
|
+
UINT2NUM(g_date_get_month(date)),
|
96
|
+
UINT2NUM(g_date_get_day(date)));
|
97
|
+
g_date_free(date);
|
98
|
+
return rb_date;
|
99
|
+
}
|
100
|
+
|
101
|
+
static VALUE
|
102
|
+
annot_markup_get_subject(VALUE self)
|
103
|
+
{
|
104
|
+
return CSTR2RVAL_FREE(poppler_annot_markup_get_subject(SELF(self)));
|
105
|
+
}
|
106
|
+
|
107
|
+
static VALUE
|
108
|
+
annot_markup_get_reply_to(VALUE self)
|
109
|
+
{
|
110
|
+
return REPLY_TYPE2RVAL(poppler_annot_markup_get_reply_to(SELF(self)));
|
111
|
+
}
|
112
|
+
|
113
|
+
static VALUE
|
114
|
+
annot_markup_get_external_data(VALUE self)
|
115
|
+
{
|
116
|
+
return DATA_TYPE2RVAL(poppler_annot_markup_get_external_data(SELF(self)));
|
117
|
+
}
|
118
|
+
|
119
|
+
/* PopplerAnnotText */
|
120
|
+
#undef SELF
|
121
|
+
#define SELF(self) (POPPLER_ANNOT_TEXT(RVAL2GOBJ(self)))
|
122
|
+
|
123
|
+
static VALUE
|
124
|
+
annot_text_get_is_open(VALUE self)
|
125
|
+
{
|
126
|
+
return CBOOL2RVAL(poppler_annot_text_get_is_open(SELF(self)));
|
127
|
+
}
|
128
|
+
|
129
|
+
static VALUE
|
130
|
+
annot_text_get_icon(VALUE self)
|
131
|
+
{
|
132
|
+
#if POPPLER_CHECK_VERSION(0, 9, 0)
|
133
|
+
return CSTR2RVAL_FREE(poppler_annot_text_get_icon(SELF(self)));
|
134
|
+
#else
|
135
|
+
return TEXT_ICON2RVAL(poppler_annot_text_get_icon(SELF(self)));
|
136
|
+
#endif
|
137
|
+
}
|
138
|
+
|
139
|
+
static VALUE
|
140
|
+
annot_text_get_state(VALUE self)
|
141
|
+
{
|
142
|
+
return TEXT_STATE2RVAL(poppler_annot_text_get_state(SELF(self)));
|
143
|
+
}
|
144
|
+
|
145
|
+
/* PopplerAnnotFreeText */
|
146
|
+
#undef SELF
|
147
|
+
#define SELF(self) (POPPLER_ANNOT_FREE_TEXT(RVAL2GOBJ(self)))
|
148
|
+
|
149
|
+
static VALUE
|
150
|
+
annot_free_text_get_quadding(VALUE self)
|
151
|
+
{
|
152
|
+
return QUADDING2RVAL(poppler_annot_free_text_get_quadding(SELF(self)));
|
153
|
+
}
|
154
|
+
|
155
|
+
static VALUE
|
156
|
+
annot_free_text_get_callout_line(VALUE self)
|
157
|
+
{
|
158
|
+
return LINE2RVAL(poppler_annot_free_text_get_callout_line(SELF(self)));
|
159
|
+
}
|
160
|
+
|
161
|
+
/* PopplerCalloutLine */
|
162
|
+
static VALUE
|
163
|
+
annot_callout_line_initialize(VALUE self, VALUE multiline, VALUE x1, VALUE y1,
|
164
|
+
VALUE x2, VALUE y2, VALUE x3, VALUE y3)
|
165
|
+
{
|
166
|
+
PopplerAnnotCalloutLine *line;
|
167
|
+
|
168
|
+
line = poppler_annot_callout_line_new();
|
169
|
+
line->multiline = RVAL2CBOOL(multiline);
|
170
|
+
line->x1 = NUM2DBL(x1);
|
171
|
+
line->y1 = NUM2DBL(y1);
|
172
|
+
line->x2 = NUM2DBL(x2);
|
173
|
+
line->y2 = NUM2DBL(y2);
|
174
|
+
line->x3 = NUM2DBL(x3);
|
175
|
+
line->y3 = NUM2DBL(y3);
|
176
|
+
|
177
|
+
G_INITIALIZE(self, line);
|
178
|
+
return Qnil;
|
179
|
+
}
|
180
|
+
|
181
|
+
DEF_ACCESSOR(annot_callout_line, multiline, RVAL2LINE, CBOOL2RVAL, RVAL2CBOOL)
|
182
|
+
DEF_ACCESSOR(annot_callout_line, x1, RVAL2LINE, rb_float_new, NUM2DBL)
|
183
|
+
DEF_ACCESSOR(annot_callout_line, y1, RVAL2LINE, rb_float_new, NUM2DBL)
|
184
|
+
DEF_ACCESSOR(annot_callout_line, x2, RVAL2LINE, rb_float_new, NUM2DBL)
|
185
|
+
DEF_ACCESSOR(annot_callout_line, y2, RVAL2LINE, rb_float_new, NUM2DBL)
|
186
|
+
DEF_ACCESSOR(annot_callout_line, x3, RVAL2LINE, rb_float_new, NUM2DBL)
|
187
|
+
DEF_ACCESSOR(annot_callout_line, y3, RVAL2LINE, rb_float_new, NUM2DBL)
|
188
|
+
|
189
|
+
static VALUE
|
190
|
+
annot_callout_line_to_a(VALUE self)
|
191
|
+
{
|
192
|
+
PopplerAnnotCalloutLine *line;
|
193
|
+
|
194
|
+
line = RVAL2LINE(self);
|
195
|
+
return rb_ary_new3(7,
|
196
|
+
CBOOL2RVAL(line->multiline),
|
197
|
+
rb_float_new(line->x1),
|
198
|
+
rb_float_new(line->y1),
|
199
|
+
rb_float_new(line->x2),
|
200
|
+
rb_float_new(line->y2),
|
201
|
+
rb_float_new(line->x3),
|
202
|
+
rb_float_new(line->y3));
|
203
|
+
}
|
204
|
+
|
205
|
+
static VALUE
|
206
|
+
annot_callout_line_inspect(VALUE self)
|
207
|
+
{
|
208
|
+
VALUE inspected;
|
209
|
+
gchar *info;
|
210
|
+
PopplerAnnotCalloutLine *line;
|
211
|
+
|
212
|
+
line = RVAL2LINE(self);
|
213
|
+
inspected = rb_call_super(0, NULL);
|
214
|
+
rb_str_resize(inspected, RSTRING_LEN(inspected) - 1);
|
215
|
+
info = g_strdup_printf(": [%s, %g, %g, %g, %g, %g, %g]>",
|
216
|
+
line->multiline ? "true" : "false",
|
217
|
+
line->x1, line->y1,
|
218
|
+
line->x2, line->y2,
|
219
|
+
line->x3, line->y3);
|
220
|
+
rb_str_cat2(inspected, info);
|
221
|
+
g_free(info);
|
222
|
+
return inspected;
|
223
|
+
}
|
224
|
+
|
225
|
+
void
|
226
|
+
Init_poppler_annotation(VALUE mPoppler)
|
227
|
+
{
|
228
|
+
VALUE cAnnotation, cAnnotationMarkup, cAnnotationText;
|
229
|
+
VALUE cAnnotationFreeText, cAnnotationCalloutLine;
|
230
|
+
|
231
|
+
id_new = rb_intern("new");
|
232
|
+
rb_cDate = rb_const_get(rb_cObject, rb_intern("Date"));
|
233
|
+
|
234
|
+
cAnnotation = G_DEF_CLASS(POPPLER_TYPE_ANNOT, "Annotation", mPoppler);
|
235
|
+
rb_define_method(cAnnotation, "type", annot_get_annot_type, 0);
|
236
|
+
rb_define_method(cAnnotation, "contents", annot_get_contents, 0);
|
237
|
+
rb_define_method(cAnnotation, "name", annot_get_name, 0);
|
238
|
+
rb_define_method(cAnnotation, "modified", annot_get_modified, 0);
|
239
|
+
rb_define_method(cAnnotation, "flags", annot_get_flags, 0);
|
240
|
+
rb_define_method(cAnnotation, "color", annot_get_color, 0);
|
241
|
+
|
242
|
+
cAnnotationMarkup = G_DEF_CLASS(POPPLER_TYPE_ANNOT_MARKUP,
|
243
|
+
"AnnotationMarkup", mPoppler);
|
244
|
+
rb_define_method(cAnnotationMarkup, "label", annot_markup_get_label, 0);
|
245
|
+
rb_define_method(cAnnotationMarkup, "popup_is_open?",
|
246
|
+
annot_markup_get_popup_is_open, 0);
|
247
|
+
rb_define_method(cAnnotationMarkup, "opacity", annot_markup_get_opacity, 0);
|
248
|
+
rb_define_method(cAnnotationMarkup, "date", annot_markup_get_date, 0);
|
249
|
+
rb_define_method(cAnnotationMarkup, "subject", annot_markup_get_subject, 0);
|
250
|
+
rb_define_method(cAnnotationMarkup, "reply_to",
|
251
|
+
annot_markup_get_reply_to, 0);
|
252
|
+
rb_define_method(cAnnotationMarkup, "external_data",
|
253
|
+
annot_markup_get_external_data, 0);
|
254
|
+
|
255
|
+
cAnnotationText = G_DEF_CLASS(POPPLER_TYPE_ANNOT_TEXT,
|
256
|
+
"AnnotationText", mPoppler);
|
257
|
+
rb_define_method(cAnnotationText, "open?", annot_text_get_is_open, 0);
|
258
|
+
rb_define_method(cAnnotationText, "icon", annot_text_get_icon, 0);
|
259
|
+
rb_define_method(cAnnotationText, "state", annot_text_get_state, 0);
|
260
|
+
|
261
|
+
cAnnotationFreeText = G_DEF_CLASS(POPPLER_TYPE_ANNOT_FREE_TEXT,
|
262
|
+
"AnnotationFreeText", mPoppler);
|
263
|
+
rb_define_method(cAnnotationFreeText, "quadding",
|
264
|
+
annot_free_text_get_quadding, 0);
|
265
|
+
rb_define_method(cAnnotationFreeText, "callout_line",
|
266
|
+
annot_free_text_get_callout_line, 0);
|
267
|
+
|
268
|
+
cAnnotationCalloutLine = G_DEF_CLASS(POPPLER_TYPE_ANNOT_CALLOUT_LINE,
|
269
|
+
"AnnotationCalloutLine", mPoppler);
|
270
|
+
rb_define_method(cAnnotationCalloutLine, "initialize",
|
271
|
+
annot_callout_line_initialize, 7);
|
272
|
+
|
273
|
+
rb_define_method(cAnnotationCalloutLine, "multiline?",
|
274
|
+
annot_callout_line_get_multiline, 0);
|
275
|
+
rb_define_method(cAnnotationCalloutLine, "set_multiline",
|
276
|
+
annot_callout_line_set_multiline, 1);
|
277
|
+
rb_define_method(cAnnotationCalloutLine, "x1",
|
278
|
+
annot_callout_line_get_x1, 0);
|
279
|
+
rb_define_method(cAnnotationCalloutLine, "set_x1",
|
280
|
+
annot_callout_line_set_x1, 1);
|
281
|
+
rb_define_method(cAnnotationCalloutLine, "y1",
|
282
|
+
annot_callout_line_get_y1, 0);
|
283
|
+
rb_define_method(cAnnotationCalloutLine, "set_y1",
|
284
|
+
annot_callout_line_set_y1, 1);
|
285
|
+
rb_define_method(cAnnotationCalloutLine, "x2",
|
286
|
+
annot_callout_line_get_x2, 0);
|
287
|
+
rb_define_method(cAnnotationCalloutLine, "set_x2",
|
288
|
+
annot_callout_line_set_x2, 2);
|
289
|
+
rb_define_method(cAnnotationCalloutLine, "y2",
|
290
|
+
annot_callout_line_get_y2, 0);
|
291
|
+
rb_define_method(cAnnotationCalloutLine, "set_y2",
|
292
|
+
annot_callout_line_set_y2, 2);
|
293
|
+
rb_define_method(cAnnotationCalloutLine, "x3",
|
294
|
+
annot_callout_line_get_x3, 0);
|
295
|
+
rb_define_method(cAnnotationCalloutLine, "set_x3",
|
296
|
+
annot_callout_line_set_x3, 3);
|
297
|
+
rb_define_method(cAnnotationCalloutLine, "y3",
|
298
|
+
annot_callout_line_get_y3, 0);
|
299
|
+
rb_define_method(cAnnotationCalloutLine, "set_y3",
|
300
|
+
annot_callout_line_set_y3, 3);
|
301
|
+
|
302
|
+
rb_define_method(cAnnotationCalloutLine, "to_a", annot_callout_line_to_a, 0);
|
303
|
+
rb_define_method(cAnnotationCalloutLine, "inspect",
|
304
|
+
annot_callout_line_inspect, 0);
|
305
|
+
|
306
|
+
G_DEF_SETTERS(cAnnotationCalloutLine);
|
307
|
+
}
|
@@ -0,0 +1,116 @@
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
+
/**********************************************************************
|
3
|
+
|
4
|
+
rbpoppler-attachment.c -
|
5
|
+
|
6
|
+
$Author: ktou $
|
7
|
+
$Date: 2007/10/13 05:53:10 $
|
8
|
+
|
9
|
+
Copyright (C) 2006 Ruby-GNOME2 Project Team
|
10
|
+
|
11
|
+
**********************************************************************/
|
12
|
+
|
13
|
+
#include "rbpoppler.h"
|
14
|
+
|
15
|
+
#define SELF(self) ((PopplerAttachment *)RVAL2GOBJ(self))
|
16
|
+
|
17
|
+
static ID id_call;
|
18
|
+
|
19
|
+
static gboolean
|
20
|
+
attachment_save_func(const gchar *buf, gsize count, gpointer data,
|
21
|
+
GError **error)
|
22
|
+
{
|
23
|
+
VALUE result;
|
24
|
+
VALUE callback = (VALUE)data;
|
25
|
+
|
26
|
+
result = rb_funcall(callback, id_call, 1, rb_str_new(buf, count));
|
27
|
+
return RVAL2CBOOL(result);
|
28
|
+
}
|
29
|
+
|
30
|
+
static VALUE
|
31
|
+
attachment_save(int argc, VALUE *argv, VALUE self)
|
32
|
+
{
|
33
|
+
VALUE filename;
|
34
|
+
gboolean result;
|
35
|
+
GError *error = NULL;
|
36
|
+
|
37
|
+
rb_scan_args(argc, argv, "01", &filename);
|
38
|
+
|
39
|
+
if (NIL_P(filename)) {
|
40
|
+
if (rb_block_given_p()) {
|
41
|
+
gpointer user_data = (gpointer)rb_block_proc();
|
42
|
+
result = poppler_attachment_save_to_callback(SELF(self),
|
43
|
+
attachment_save_func,
|
44
|
+
user_data,
|
45
|
+
&error);
|
46
|
+
} else {
|
47
|
+
rb_raise(rb_eArgError, "must provide filename or block");
|
48
|
+
}
|
49
|
+
} else {
|
50
|
+
result = poppler_attachment_save(SELF(self), RVAL2CSTR(filename),
|
51
|
+
&error);
|
52
|
+
}
|
53
|
+
|
54
|
+
if (error)
|
55
|
+
RAISE_GERROR(error);
|
56
|
+
|
57
|
+
return CBOOL2RVAL(result);
|
58
|
+
}
|
59
|
+
|
60
|
+
static VALUE
|
61
|
+
attachment_get_name(VALUE self)
|
62
|
+
{
|
63
|
+
return CSTR2RVAL(SELF(self)->name);
|
64
|
+
}
|
65
|
+
|
66
|
+
static VALUE
|
67
|
+
attachment_get_description(VALUE self)
|
68
|
+
{
|
69
|
+
return CSTR2RVAL(SELF(self)->description);
|
70
|
+
}
|
71
|
+
|
72
|
+
static VALUE
|
73
|
+
attachment_get_size(VALUE self)
|
74
|
+
{
|
75
|
+
return INT2NUM(SELF(self)->size);
|
76
|
+
}
|
77
|
+
|
78
|
+
static VALUE
|
79
|
+
attachment_get_mtime(VALUE self)
|
80
|
+
{
|
81
|
+
return rb_time_new(SELF(self)->mtime, 0);
|
82
|
+
}
|
83
|
+
|
84
|
+
static VALUE
|
85
|
+
attachment_get_ctime(VALUE self)
|
86
|
+
{
|
87
|
+
return rb_time_new(SELF(self)->ctime, 0);
|
88
|
+
}
|
89
|
+
|
90
|
+
static VALUE
|
91
|
+
attachment_get_checksum(VALUE self)
|
92
|
+
{
|
93
|
+
GString *checksum;
|
94
|
+
checksum = SELF(self)->checksum;
|
95
|
+
return rb_str_new(checksum->str, checksum->len);
|
96
|
+
}
|
97
|
+
|
98
|
+
void
|
99
|
+
Init_poppler_attachment(VALUE mPoppler)
|
100
|
+
{
|
101
|
+
VALUE cAttachment;
|
102
|
+
|
103
|
+
id_call = rb_intern("call");
|
104
|
+
|
105
|
+
cAttachment = G_DEF_CLASS(POPPLER_TYPE_ATTACHMENT, "Attachment", mPoppler);
|
106
|
+
|
107
|
+
rb_define_method(cAttachment, "save", attachment_save, -1);
|
108
|
+
rb_define_method(cAttachment, "name", attachment_get_name, 0);
|
109
|
+
rb_define_method(cAttachment, "description", attachment_get_description, 0);
|
110
|
+
rb_define_method(cAttachment, "size", attachment_get_size, 0);
|
111
|
+
rb_define_method(cAttachment, "mtime", attachment_get_mtime, 0);
|
112
|
+
rb_define_method(cAttachment, "ctime", attachment_get_ctime, 0);
|
113
|
+
rb_define_method(cAttachment, "checksum", attachment_get_checksum, 0);
|
114
|
+
|
115
|
+
G_DEF_SETTERS(cAttachment);
|
116
|
+
}
|
@@ -0,0 +1,492 @@
|
|
1
|
+
/* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
|
2
|
+
/**********************************************************************
|
3
|
+
|
4
|
+
rbpoppler-document.c -
|
5
|
+
|
6
|
+
$Author: ktou $
|
7
|
+
$Date: 2007/10/13 05:56:39 $
|
8
|
+
|
9
|
+
Copyright (C) 2006 Ruby-GNOME2 Project Team
|
10
|
+
|
11
|
+
**********************************************************************/
|
12
|
+
|
13
|
+
#include "rbpoppler.h"
|
14
|
+
|
15
|
+
#define RVAL2DOC(obj) (POPPLER_DOCUMENT(RVAL2GOBJ(obj)))
|
16
|
+
|
17
|
+
#define IITER2RVAL(obj) (BOXED2RVAL(obj, POPPLER_TYPE_INDEX_ITER))
|
18
|
+
#define RVAL2IITER(obj) (RVAL2BOXED(obj, POPPLER_TYPE_INDEX_ITER))
|
19
|
+
#define FITER2RVAL(obj) (BOXED2RVAL(obj, POPPLER_TYPE_FONTS_ITER))
|
20
|
+
#define RVAL2FITER(obj) (RVAL2BOXED(obj, POPPLER_TYPE_FONTS_ITER))
|
21
|
+
|
22
|
+
static ID id_new, id_valid, id_pdf_data_p, id_ensure_uri;
|
23
|
+
static VALUE cIndexIter;
|
24
|
+
static VALUE cFontInfo;
|
25
|
+
|
26
|
+
|
27
|
+
static VALUE
|
28
|
+
doc_initialize(int argc, VALUE *argv, VALUE self)
|
29
|
+
{
|
30
|
+
PopplerDocument *document = NULL;
|
31
|
+
GError *error = NULL;
|
32
|
+
VALUE uri_or_data, rb_password;
|
33
|
+
const char *password;
|
34
|
+
|
35
|
+
rb_scan_args(argc, argv, "11", &uri_or_data, &rb_password);
|
36
|
+
|
37
|
+
password = NIL_P(rb_password) ? NULL : RVAL2CSTR(rb_password);
|
38
|
+
|
39
|
+
if (RVAL2CBOOL(rb_funcall(self, id_pdf_data_p, 1, uri_or_data))) {
|
40
|
+
document = poppler_document_new_from_data(RSTRING_PTR(uri_or_data),
|
41
|
+
RSTRING_LEN(uri_or_data),
|
42
|
+
password, &error);
|
43
|
+
}
|
44
|
+
|
45
|
+
if (!document && !error) {
|
46
|
+
uri_or_data = rb_funcall(self, id_ensure_uri, 1, uri_or_data);
|
47
|
+
document = poppler_document_new_from_file(RVAL2CSTR(uri_or_data),
|
48
|
+
password, &error);
|
49
|
+
}
|
50
|
+
|
51
|
+
if (error)
|
52
|
+
RAISE_GERROR(error);
|
53
|
+
|
54
|
+
G_INITIALIZE(self, document);
|
55
|
+
return Qnil;
|
56
|
+
}
|
57
|
+
|
58
|
+
static VALUE
|
59
|
+
doc_save(VALUE self, VALUE uri)
|
60
|
+
{
|
61
|
+
gboolean result;
|
62
|
+
GError *error = NULL;
|
63
|
+
|
64
|
+
uri = rb_funcall(self, id_ensure_uri, 1, uri);
|
65
|
+
result = poppler_document_save(RVAL2DOC(self), RVAL2CSTR(uri), &error);
|
66
|
+
|
67
|
+
if (error)
|
68
|
+
RAISE_GERROR(error);
|
69
|
+
|
70
|
+
return CBOOL2RVAL(result);
|
71
|
+
}
|
72
|
+
|
73
|
+
static VALUE
|
74
|
+
doc_save_a_copy(VALUE self, VALUE uri)
|
75
|
+
{
|
76
|
+
gboolean result;
|
77
|
+
GError *error = NULL;
|
78
|
+
|
79
|
+
uri = rb_funcall(self, id_ensure_uri, 1, uri);
|
80
|
+
result = poppler_document_save_a_copy(RVAL2DOC(self), RVAL2CSTR(uri),
|
81
|
+
&error);
|
82
|
+
|
83
|
+
if (error)
|
84
|
+
RAISE_GERROR(error);
|
85
|
+
|
86
|
+
return CBOOL2RVAL(result);
|
87
|
+
}
|
88
|
+
|
89
|
+
static VALUE
|
90
|
+
doc_get_n_pages(VALUE self)
|
91
|
+
{
|
92
|
+
return INT2NUM(poppler_document_get_n_pages(RVAL2DOC(self)));
|
93
|
+
}
|
94
|
+
|
95
|
+
static VALUE
|
96
|
+
doc_get_page(VALUE self, VALUE index_or_label)
|
97
|
+
{
|
98
|
+
VALUE rb_page;
|
99
|
+
PopplerPage *page;
|
100
|
+
|
101
|
+
if (RVAL2CBOOL(rb_obj_is_kind_of(index_or_label, rb_cInteger))) {
|
102
|
+
page = poppler_document_get_page(RVAL2DOC(self),
|
103
|
+
NUM2INT(index_or_label));
|
104
|
+
} else if (RVAL2CBOOL(rb_obj_is_kind_of(index_or_label, rb_cString))) {
|
105
|
+
page = poppler_document_get_page_by_label(RVAL2DOC(self),
|
106
|
+
RVAL2CSTR(index_or_label));
|
107
|
+
} else {
|
108
|
+
VALUE inspect;
|
109
|
+
inspect = rb_inspect(index_or_label);
|
110
|
+
rb_raise(rb_eArgError, "%s must be Integer or String",
|
111
|
+
RVAL2CSTR(inspect));
|
112
|
+
}
|
113
|
+
|
114
|
+
rb_page = GOBJ2RVAL(page);
|
115
|
+
if (page)
|
116
|
+
g_object_unref(page);
|
117
|
+
return rb_page;
|
118
|
+
}
|
119
|
+
|
120
|
+
static VALUE
|
121
|
+
doc_has_attachments(VALUE self)
|
122
|
+
{
|
123
|
+
return CBOOL2RVAL(poppler_document_has_attachments(RVAL2DOC(self)));
|
124
|
+
}
|
125
|
+
|
126
|
+
static VALUE
|
127
|
+
doc_get_attachments(VALUE self)
|
128
|
+
{
|
129
|
+
return GLIST2ARYF(poppler_document_get_attachments(RVAL2DOC(self)));
|
130
|
+
}
|
131
|
+
|
132
|
+
static VALUE
|
133
|
+
doc_find_dest(VALUE self, VALUE link_name)
|
134
|
+
{
|
135
|
+
return GOBJ2RVAL(poppler_document_find_dest(RVAL2DOC(self),
|
136
|
+
RVAL2CSTR(link_name)));
|
137
|
+
}
|
138
|
+
|
139
|
+
static VALUE
|
140
|
+
doc_get_form_field(VALUE self, VALUE id)
|
141
|
+
{
|
142
|
+
return GOBJ2RVAL(poppler_document_get_form_field(RVAL2DOC(self),
|
143
|
+
NUM2INT(id)));
|
144
|
+
}
|
145
|
+
|
146
|
+
static VALUE
|
147
|
+
doc_each(VALUE self)
|
148
|
+
{
|
149
|
+
PopplerDocument *document;
|
150
|
+
int i, n_pages;
|
151
|
+
|
152
|
+
document = RVAL2DOC(self);
|
153
|
+
n_pages = poppler_document_get_n_pages(document);
|
154
|
+
for (i = 0; i < n_pages; i++) {
|
155
|
+
PopplerPage *page;
|
156
|
+
VALUE rb_page;
|
157
|
+
|
158
|
+
page = poppler_document_get_page(document, i);
|
159
|
+
rb_page = GOBJ2RVAL(page);
|
160
|
+
if (page)
|
161
|
+
g_object_unref(page);
|
162
|
+
rb_yield(rb_page);
|
163
|
+
}
|
164
|
+
return self;
|
165
|
+
}
|
166
|
+
|
167
|
+
static VALUE
|
168
|
+
doc_get_index_iter(VALUE self)
|
169
|
+
{
|
170
|
+
return rb_funcall(cIndexIter, id_new, 1, self);
|
171
|
+
}
|
172
|
+
|
173
|
+
static VALUE
|
174
|
+
doc_get_font_info(VALUE self)
|
175
|
+
{
|
176
|
+
return rb_funcall(cFontInfo, id_new, 1, self);
|
177
|
+
}
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
/* Interface for getting the Index of a poppler_document */
|
182
|
+
#define CHECK_IITER_IS_VALID(iter) do { \
|
183
|
+
if (!RVAL2CBOOL(index_iter_valid_p(iter))) \
|
184
|
+
return Qnil; \
|
185
|
+
} while (0)
|
186
|
+
|
187
|
+
static VALUE
|
188
|
+
index_iter_valid_p(VALUE self)
|
189
|
+
{
|
190
|
+
return rb_ivar_get(self, id_valid);
|
191
|
+
}
|
192
|
+
|
193
|
+
static VALUE
|
194
|
+
index_iter_initialize(VALUE self, VALUE document)
|
195
|
+
{
|
196
|
+
PopplerIndexIter *iter;
|
197
|
+
iter = poppler_index_iter_new(RVAL2GOBJ(document));
|
198
|
+
G_INITIALIZE(self, iter);
|
199
|
+
poppler_index_iter_free(iter);
|
200
|
+
rb_ivar_set(self, id_valid, CBOOL2RVAL(iter));
|
201
|
+
return Qnil;
|
202
|
+
}
|
203
|
+
|
204
|
+
static VALUE
|
205
|
+
index_iter_get_child(VALUE self)
|
206
|
+
{
|
207
|
+
PopplerIndexIter *child;
|
208
|
+
VALUE rb_child;
|
209
|
+
|
210
|
+
CHECK_IITER_IS_VALID(self);
|
211
|
+
child = poppler_index_iter_get_child(RVAL2IITER(self));
|
212
|
+
rb_child = IITER2RVAL(child);
|
213
|
+
poppler_index_iter_free(child);
|
214
|
+
return rb_child;
|
215
|
+
}
|
216
|
+
|
217
|
+
static VALUE
|
218
|
+
index_iter_is_open(VALUE self)
|
219
|
+
{
|
220
|
+
CHECK_IITER_IS_VALID(self);
|
221
|
+
return CBOOL2RVAL(poppler_index_iter_is_open(RVAL2IITER(self)));
|
222
|
+
}
|
223
|
+
|
224
|
+
#ifndef HAVE_TYPE_POPPLERACTIONANY
|
225
|
+
static VALUE
|
226
|
+
index_iter_get_action(VALUE self)
|
227
|
+
{
|
228
|
+
CHECK_IITER_IS_VALID(self);
|
229
|
+
return POPPLER_ACTION2RVAL(poppler_index_iter_get_action(RVAL2IITER(self)));
|
230
|
+
}
|
231
|
+
#endif
|
232
|
+
|
233
|
+
static VALUE
|
234
|
+
index_iter_next(VALUE self)
|
235
|
+
{
|
236
|
+
if (poppler_index_iter_next(RVAL2IITER(self))) {
|
237
|
+
return Qtrue;
|
238
|
+
} else {
|
239
|
+
rb_ivar_set(self, id_valid, Qfalse);
|
240
|
+
return Qfalse;
|
241
|
+
}
|
242
|
+
}
|
243
|
+
|
244
|
+
static VALUE
|
245
|
+
index_iter_each(VALUE self)
|
246
|
+
{
|
247
|
+
PopplerIndexIter *iter;
|
248
|
+
|
249
|
+
CHECK_IITER_IS_VALID(self);
|
250
|
+
iter = RVAL2IITER(self);
|
251
|
+
do {
|
252
|
+
rb_yield(self);
|
253
|
+
} while (poppler_index_iter_next(iter));
|
254
|
+
rb_ivar_set(self, id_valid, Qfalse);
|
255
|
+
|
256
|
+
return self;
|
257
|
+
}
|
258
|
+
|
259
|
+
|
260
|
+
#if POPPLER_CHECK_VERSION(0, 6, 0)
|
261
|
+
|
262
|
+
static VALUE
|
263
|
+
font_info_initialize(VALUE self, VALUE document)
|
264
|
+
{
|
265
|
+
G_INITIALIZE(self, poppler_font_info_new(RVAL2GOBJ(document)));
|
266
|
+
return Qnil;
|
267
|
+
}
|
268
|
+
|
269
|
+
static VALUE
|
270
|
+
font_info_scan(VALUE self, VALUE n_pages)
|
271
|
+
{
|
272
|
+
VALUE rb_iter = Qnil;
|
273
|
+
PopplerFontsIter *iter;
|
274
|
+
|
275
|
+
if (poppler_font_info_scan(RVAL2GOBJ(self), NUM2INT(n_pages), &iter)) {
|
276
|
+
rb_iter = FITER2RVAL(iter);
|
277
|
+
rb_ivar_set(rb_iter, id_valid, Qtrue);
|
278
|
+
poppler_fonts_iter_free(iter);
|
279
|
+
}
|
280
|
+
return rb_iter;
|
281
|
+
}
|
282
|
+
#endif
|
283
|
+
|
284
|
+
|
285
|
+
#define CHECK_FITER_IS_VALID(iter) do { \
|
286
|
+
if (!RVAL2CBOOL(fonts_iter_valid_p(iter))) \
|
287
|
+
return Qnil; \
|
288
|
+
} while (0)
|
289
|
+
|
290
|
+
static VALUE
|
291
|
+
fonts_iter_valid_p(VALUE self)
|
292
|
+
{
|
293
|
+
return rb_ivar_get(self, id_valid);
|
294
|
+
}
|
295
|
+
|
296
|
+
static VALUE
|
297
|
+
fonts_iter_get_name(VALUE self)
|
298
|
+
{
|
299
|
+
CHECK_FITER_IS_VALID(self);
|
300
|
+
return CSTR2RVAL(poppler_fonts_iter_get_name(RVAL2FITER(self)));
|
301
|
+
}
|
302
|
+
|
303
|
+
static VALUE
|
304
|
+
fonts_iter_get_full_name(VALUE self)
|
305
|
+
{
|
306
|
+
CHECK_FITER_IS_VALID(self);
|
307
|
+
return CSTR2RVAL(poppler_fonts_iter_get_full_name(RVAL2FITER(self)));
|
308
|
+
}
|
309
|
+
|
310
|
+
static VALUE
|
311
|
+
fonts_iter_get_file_name(VALUE self)
|
312
|
+
{
|
313
|
+
CHECK_FITER_IS_VALID(self);
|
314
|
+
return CSTR2RVAL(poppler_fonts_iter_get_file_name(RVAL2FITER(self)));
|
315
|
+
}
|
316
|
+
|
317
|
+
static VALUE
|
318
|
+
fonts_iter_get_font_type(VALUE self)
|
319
|
+
{
|
320
|
+
CHECK_FITER_IS_VALID(self);
|
321
|
+
return GENUM2RVAL(poppler_fonts_iter_get_font_type(RVAL2FITER(self)),
|
322
|
+
POPPLER_TYPE_FONT_TYPE);
|
323
|
+
}
|
324
|
+
|
325
|
+
static VALUE
|
326
|
+
fonts_iter_is_embedded(VALUE self)
|
327
|
+
{
|
328
|
+
CHECK_FITER_IS_VALID(self);
|
329
|
+
return CBOOL2RVAL(poppler_fonts_iter_is_embedded(RVAL2FITER(self)));
|
330
|
+
}
|
331
|
+
|
332
|
+
static VALUE
|
333
|
+
fonts_iter_is_subset(VALUE self)
|
334
|
+
{
|
335
|
+
CHECK_FITER_IS_VALID(self);
|
336
|
+
return CBOOL2RVAL(poppler_fonts_iter_is_subset(RVAL2FITER(self)));
|
337
|
+
}
|
338
|
+
|
339
|
+
static VALUE
|
340
|
+
fonts_iter_next(VALUE self)
|
341
|
+
{
|
342
|
+
if (poppler_fonts_iter_next(RVAL2FITER(self))) {
|
343
|
+
return Qtrue;
|
344
|
+
} else {
|
345
|
+
rb_ivar_set(self, id_valid, Qfalse);
|
346
|
+
return Qfalse;
|
347
|
+
}
|
348
|
+
}
|
349
|
+
|
350
|
+
static VALUE
|
351
|
+
fonts_iter_each(VALUE self)
|
352
|
+
{
|
353
|
+
PopplerFontsIter *iter;
|
354
|
+
|
355
|
+
CHECK_FITER_IS_VALID(self);
|
356
|
+
iter = RVAL2FITER(self);
|
357
|
+
do {
|
358
|
+
rb_yield(self);
|
359
|
+
} while (poppler_fonts_iter_next(iter));
|
360
|
+
rb_ivar_set(self, id_valid, Qfalse);
|
361
|
+
|
362
|
+
return self;
|
363
|
+
}
|
364
|
+
|
365
|
+
|
366
|
+
/* Export to ps */
|
367
|
+
static VALUE
|
368
|
+
ps_file_initialize(VALUE self, VALUE document, VALUE filename,
|
369
|
+
VALUE first_page, VALUE n_pages)
|
370
|
+
{
|
371
|
+
PopplerPSFile *ps_file;
|
372
|
+
|
373
|
+
ps_file = poppler_ps_file_new(RVAL2GOBJ(document), RVAL2CSTR(filename),
|
374
|
+
NUM2INT(first_page), NUM2INT(n_pages));
|
375
|
+
|
376
|
+
if (!ps_file)
|
377
|
+
rb_raise(rb_eRuntimeError, "can't create Poppler::PSFile");
|
378
|
+
|
379
|
+
G_INITIALIZE(self, ps_file);
|
380
|
+
return Qnil;
|
381
|
+
}
|
382
|
+
|
383
|
+
static VALUE
|
384
|
+
ps_file_set_paper_size(VALUE self, VALUE width, VALUE height)
|
385
|
+
{
|
386
|
+
poppler_ps_file_set_paper_size(RVAL2GOBJ(self),
|
387
|
+
NUM2DBL(width), NUM2DBL(height));
|
388
|
+
return Qnil;
|
389
|
+
}
|
390
|
+
|
391
|
+
static VALUE
|
392
|
+
ps_file_set_duplex(VALUE self, VALUE duplex)
|
393
|
+
{
|
394
|
+
poppler_ps_file_set_duplex(RVAL2GOBJ(self), RVAL2CBOOL(duplex));
|
395
|
+
return Qnil;
|
396
|
+
}
|
397
|
+
|
398
|
+
void
|
399
|
+
Init_poppler_document(VALUE mPoppler)
|
400
|
+
{
|
401
|
+
VALUE cDocument, cFontsIter, cPSFile;
|
402
|
+
|
403
|
+
id_new = rb_intern("new");
|
404
|
+
id_valid = rb_intern("valid?");
|
405
|
+
id_pdf_data_p = rb_intern("pdf_data?");
|
406
|
+
id_ensure_uri = rb_intern("ensure_uri");
|
407
|
+
|
408
|
+
cDocument = G_DEF_CLASS(POPPLER_TYPE_DOCUMENT, "Document", mPoppler);
|
409
|
+
cIndexIter = G_DEF_CLASS(POPPLER_TYPE_INDEX_ITER, "IndexIter", mPoppler);
|
410
|
+
cFontInfo = G_DEF_CLASS(POPPLER_TYPE_FONT_INFO, "FontInfo", mPoppler);
|
411
|
+
cFontsIter = G_DEF_CLASS(POPPLER_TYPE_FONTS_ITER, "FontsIter", mPoppler);
|
412
|
+
cPSFile = G_DEF_CLASS(POPPLER_TYPE_PS_FILE, "PSFile", mPoppler);
|
413
|
+
|
414
|
+
G_DEF_CLASS(POPPLER_TYPE_PAGE_LAYOUT, "PageLayout", mPoppler);
|
415
|
+
G_DEF_CLASS(POPPLER_TYPE_PAGE_MODE, "PageMode", mPoppler);
|
416
|
+
G_DEF_CLASS(POPPLER_TYPE_FONT_TYPE, "FontType", mPoppler);
|
417
|
+
G_DEF_CLASS(POPPLER_TYPE_VIEWER_PREFERENCES, "ViewerPreferences", mPoppler);
|
418
|
+
G_DEF_CLASS(POPPLER_TYPE_PERMISSIONS, "Permissions", mPoppler);
|
419
|
+
|
420
|
+
rb_include_module(cDocument, rb_mEnumerable);
|
421
|
+
|
422
|
+
rb_define_method(cDocument, "initialize", doc_initialize, -1);
|
423
|
+
rb_define_method(cDocument, "save", doc_save, 1);
|
424
|
+
rb_define_method(cDocument, "save_a_copy", doc_save_a_copy, 1);
|
425
|
+
rb_define_method(cDocument, "n_pages", doc_get_n_pages, 0);
|
426
|
+
rb_define_alias(cDocument, "size", "n_pages");
|
427
|
+
rb_define_method(cDocument, "get_page", doc_get_page, 1);
|
428
|
+
rb_define_alias(cDocument, "[]", "get_page");
|
429
|
+
rb_define_method(cDocument, "has_attachments?", doc_has_attachments, 0);
|
430
|
+
rb_define_alias(cDocument, "have_attachments?", "has_attachments?");
|
431
|
+
rb_define_method(cDocument, "attachments", doc_get_attachments, 0);
|
432
|
+
rb_define_method(cDocument, "find_dest", doc_find_dest, 1);
|
433
|
+
rb_define_alias(cDocument, "get_destination", "find_dest");
|
434
|
+
|
435
|
+
rb_define_method(cDocument, "get_form_field", doc_get_form_field, 1);
|
436
|
+
|
437
|
+
rb_define_method(cDocument, "each", doc_each, 0);
|
438
|
+
rb_define_alias(cDocument, "pages", "to_a");
|
439
|
+
|
440
|
+
rb_define_method(cDocument, "index_iter", doc_get_index_iter, 0);
|
441
|
+
rb_define_method(cDocument, "font_info", doc_get_font_info, 0);
|
442
|
+
|
443
|
+
G_DEF_SETTERS(cDocument);
|
444
|
+
|
445
|
+
|
446
|
+
/* Interface for getting the Index of a poppler_document */
|
447
|
+
rb_include_module(cIndexIter, rb_mEnumerable);
|
448
|
+
|
449
|
+
rb_define_method(cIndexIter, "initialize", index_iter_initialize, 1);
|
450
|
+
rb_define_method(cIndexIter, "child", index_iter_get_child, 0);
|
451
|
+
rb_define_method(cIndexIter, "open?", index_iter_is_open, 0);
|
452
|
+
#ifndef HAVE_TYPE_POPPLERACTIONANY
|
453
|
+
rb_define_method(cIndexIter, "action", index_iter_get_action, 0);
|
454
|
+
#endif
|
455
|
+
rb_define_method(cIndexIter, "next", index_iter_next, 0);
|
456
|
+
|
457
|
+
rb_define_method(cIndexIter, "valid?", index_iter_valid_p, 0);
|
458
|
+
rb_define_method(cIndexIter, "each", index_iter_each, 0);
|
459
|
+
|
460
|
+
G_DEF_SETTERS(cIndexIter);
|
461
|
+
|
462
|
+
|
463
|
+
#if POPPLER_CHECK_VERSION(0, 6, 0)
|
464
|
+
rb_define_method(cFontInfo, "initialize", font_info_initialize, 1);
|
465
|
+
rb_define_method(cFontInfo, "scan", font_info_scan, 1);
|
466
|
+
G_DEF_SETTERS(cFontInfo);
|
467
|
+
#endif
|
468
|
+
|
469
|
+
rb_include_module(cFontsIter, rb_mEnumerable);
|
470
|
+
|
471
|
+
rb_define_method(cFontsIter, "name", fonts_iter_get_name, 0);
|
472
|
+
rb_define_method(cFontsIter, "full_name", fonts_iter_get_full_name, 0);
|
473
|
+
#if POPPLER_CHECK_VERSION(0, 6, 0)
|
474
|
+
rb_define_method(cFontsIter, "file_name", fonts_iter_get_file_name, 0);
|
475
|
+
#endif
|
476
|
+
rb_define_method(cFontsIter, "font_type", fonts_iter_get_font_type, 0);
|
477
|
+
rb_define_method(cFontsIter, "embedded?", fonts_iter_is_embedded, 0);
|
478
|
+
rb_define_method(cFontsIter, "subset?", fonts_iter_is_subset, 0);
|
479
|
+
rb_define_method(cFontsIter, "next", fonts_iter_next, 0);
|
480
|
+
|
481
|
+
rb_define_method(cFontsIter, "valid?", fonts_iter_valid_p, 0);
|
482
|
+
rb_define_method(cFontsIter, "each", fonts_iter_each, 0);
|
483
|
+
|
484
|
+
G_DEF_SETTERS(cFontsIter);
|
485
|
+
|
486
|
+
/* Export to ps */
|
487
|
+
rb_define_method(cPSFile, "initialize", ps_file_initialize, 4);
|
488
|
+
rb_define_method(cPSFile, "set_paper_size", ps_file_set_paper_size, 2);
|
489
|
+
rb_define_method(cPSFile, "set_duplex", ps_file_set_duplex, 1);
|
490
|
+
|
491
|
+
G_DEF_SETTERS(cPSFile);
|
492
|
+
}
|