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,161 @@
1
+ /*
2
+ * << Haru Free PDF Library 2.0.0 >> -- fpdf_utils.h
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
+ #ifndef _HPDF_UTILS_H
16
+ #define _HPDF_UTILS_H
17
+
18
+ #include "hpdf_types.h"
19
+
20
+ #ifdef __cplusplus
21
+ extern "C" {
22
+ #endif /* __cplusplus */
23
+
24
+ HPDF_INT
25
+ HPDF_AToI (const char* s);
26
+
27
+
28
+ HPDF_DOUBLE
29
+ HPDF_AToF (const char* s);
30
+
31
+
32
+ char*
33
+ HPDF_IToA (char* s,
34
+ HPDF_INT32 val,
35
+ char* eptr);
36
+
37
+
38
+ char*
39
+ HPDF_IToA2 (char *s,
40
+ HPDF_UINT32 val,
41
+ HPDF_UINT len);
42
+
43
+
44
+ char*
45
+ HPDF_FToA (char *s,
46
+ HPDF_REAL val,
47
+ char *eptr);
48
+
49
+
50
+ HPDF_BYTE*
51
+ HPDF_MemCpy (HPDF_BYTE* out,
52
+ const HPDF_BYTE* in,
53
+ HPDF_UINT n);
54
+
55
+
56
+ HPDF_BYTE*
57
+ HPDF_StrCpy (char* out,
58
+ const char* in,
59
+ char* eptr);
60
+
61
+
62
+ HPDF_INT
63
+ HPDF_MemCmp (const HPDF_BYTE* s1,
64
+ const HPDF_BYTE* s2,
65
+ HPDF_UINT n);
66
+
67
+
68
+ HPDF_INT
69
+ HPDF_StrCmp (const char* s1,
70
+ const char* s2);
71
+
72
+
73
+ const char*
74
+ HPDF_StrStr (const char *s1,
75
+ const char *s2,
76
+ HPDF_UINT maxlen);
77
+
78
+
79
+ void*
80
+ HPDF_MemSet (void* s,
81
+ HPDF_BYTE c,
82
+ HPDF_UINT n);
83
+
84
+
85
+ HPDF_UINT
86
+ HPDF_StrLen (const char* s,
87
+ HPDF_INT maxlen);
88
+
89
+
90
+ HPDF_Box
91
+ HPDF_ToBox (HPDF_INT16 left,
92
+ HPDF_INT16 bottom,
93
+ HPDF_INT16 right,
94
+ HPDF_INT16 top);
95
+
96
+
97
+ HPDF_Point
98
+ HPDF_ToPoint (HPDF_INT16 x,
99
+ HPDF_INT16 y);
100
+
101
+
102
+ HPDF_Rect
103
+ HPDF_ToRect (HPDF_REAL left,
104
+ HPDF_REAL bottom,
105
+ HPDF_REAL right,
106
+ HPDF_REAL top);
107
+
108
+
109
+ void
110
+ HPDF_UInt16Swap (HPDF_UINT16 *value);
111
+
112
+
113
+ #ifdef __cplusplus
114
+ }
115
+ #endif /* __cplusplus */
116
+
117
+ #define HPDF_NEEDS_ESCAPE(c) (c < 0x21 || \
118
+ c > 0x7e || \
119
+ c == '\\' || \
120
+ c == '%' || \
121
+ c == '#' || \
122
+ c == '/' || \
123
+ c == '(' || \
124
+ c == ')' || \
125
+ c == '<' || \
126
+ c == '>' || \
127
+ c == '[' || \
128
+ c == ']' || \
129
+ c == '{' || \
130
+ c == '}' ) \
131
+
132
+ #define HPDF_IS_WHITE_SPACE(c) (c == 0x00 || \
133
+ c == 0x09 || \
134
+ c == 0x0A || \
135
+ c == 0x0C || \
136
+ c == 0x0D || \
137
+ c == 0x20 ) \
138
+
139
+ /*----------------------------------------------------------------------------*/
140
+ /*----- macros for debug -----------------------------------------------------*/
141
+
142
+ #ifdef HPDF_DEBUG
143
+ #ifndef HPDF_PTRACE_ON
144
+ #define HPDF_PTRACE_ON
145
+ #endif /* HPDF_PTRACE_ON */
146
+ #endif /* HPDF_DEBUG */
147
+
148
+ #ifdef HPDF_PTRACE_ON
149
+ #define HPDF_PTRACE(ARGS) HPDF_PRINTF ARGS
150
+ #else
151
+ #define HPDF_PTRACE(ARGS) /* do nothing */
152
+ #endif /* HPDF_PTRACE */
153
+
154
+ #ifdef HPDF_DEBUG
155
+ #define HPDF_PRINT_BINARY(BUF, LEN, CAPTION) HPDF_PrintBinary(BUF, LEN, CAPTION)
156
+ #else
157
+ #define HPDF_PRINT_BINARY(BUF, LEN, CAPTION) /* do nothing */
158
+ #endif
159
+
160
+ #endif /* _HPDF_UTILS_H */
161
+
@@ -0,0 +1,82 @@
1
+ #
2
+ # << Haru Free PDF Library 2.0.2 >> -- arc_demo.rb
3
+ #
4
+ # http://libharu.sourceforge.net/
5
+ #
6
+ # Copyright (c) 1999-2006 Takeshi Kanno
7
+ #
8
+ # Permission to use, copy, modify, distribute and sell this software
9
+ # and its documentation for any purpose is hereby granted without fee,
10
+ # provided that the above copyright notice appear in all copies and
11
+ # that both that copyright notice and this permission notice appear
12
+ # in supporting documentation.
13
+ # It is provided "as is" without express or implied warranty.
14
+ #
15
+
16
+ require "hpdf"
17
+
18
+ pdf = HPDFDoc.new
19
+
20
+ # add a new page object. #
21
+ page = pdf.add_page
22
+
23
+ page.set_height(220)
24
+ page.set_width(200)
25
+
26
+ # draw pie chart
27
+ #
28
+ # A: 45% Red
29
+ # B: 25% Blue
30
+ # C: 15% green
31
+ # D: other yellow
32
+ #
33
+
34
+ # A #
35
+ page.set_rgb_fill(1.0, 0, 0)
36
+ page.move_to(100, 100)
37
+ page.line_to(100, 180)
38
+ page.arc(100, 100, 80, 0, 360 * 0.45)
39
+ pos = page.get_current_pos
40
+ page.line_to(100, 100)
41
+ page.fill
42
+
43
+ # B #
44
+ page.set_rgb_fill(0, 0, 1.0)
45
+ page.move_to(100, 100)
46
+ page.line_to(pos[0], pos[1])
47
+ page.arc(100, 100, 80, 360 * 0.45, 360 * 0.7)
48
+ pos = page.get_current_pos
49
+ page.line_to(100, 100)
50
+ page.fill
51
+
52
+ # C #
53
+ page.set_rgb_fill(0, 1.0, 0)
54
+ page.move_to(100, 100)
55
+ page.line_to(pos[0], pos[1])
56
+ page.arc(100, 100, 80, 360 * 0.7, 360 * 0.85)
57
+ pos = page.get_current_pos
58
+ page.line_to(100, 100)
59
+ page.fill
60
+
61
+ # D #
62
+ page.set_rgb_fill(1.0, 1.0, 0)
63
+ page.move_to(100, 100)
64
+ page.line_to(pos[0], pos[1])
65
+ page.arc(100, 100, 80, 360 * 0.85, 360)
66
+ pos = page.get_current_pos
67
+ page.line_to(100, 100)
68
+ page.fill
69
+
70
+ # draw center circle #
71
+ page.set_gray_stroke(0)
72
+ page.set_gray_fill(1)
73
+ page.circle(100, 100, 30)
74
+ page.fill
75
+
76
+ if $demo_output_filename
77
+ file_name= $demo_output_filename
78
+ else
79
+ file_name= $0 + ".pdf"
80
+ end
81
+
82
+ pdf.save_to_file(file_name)
@@ -0,0 +1,91 @@
1
+ #
2
+ # << Haru Free PDF Library 2.0.0 >> -- demo.rb
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
+ require "hpdf"
15
+
16
+ if ARGV.empty?
17
+ line = 'Ruby Rocks'
18
+ else
19
+ line = ARGV.join(" ")
20
+ end
21
+
22
+ pdf = HPDFDoc.new
23
+
24
+ page = pdf.add_page
25
+
26
+ x = 578
27
+ r1 = 25
28
+
29
+ 40.step(1, -3) do |xw|
30
+ tone = 1.0 - (xw / 40.0) * 0.2
31
+
32
+ page.set_line_width(xw.to_f)
33
+ page.set_rgb_stroke(tone, 1.0, tone)
34
+ page.circle(50.0, 750.0, r1.to_f)
35
+ page.stroke
36
+ r1 += xw
37
+ end
38
+
39
+ 40.step(1, -3) do |xw|
40
+ tone = 1.0 - (xw / 40.0) * 0.2
41
+
42
+ page.set_line_width(xw.to_f)
43
+ page.set_rgb_stroke(tone, tone, 1.0)
44
+ page.move_to(x.to_f, 0.0)
45
+ page.line_to(x.to_f, 842.0)
46
+ page.stroke
47
+ x = (x - xw - 2)
48
+ end
49
+
50
+ page.set_rgb_stroke(0.0, 0.0, 0.0)
51
+ page.set_line_width(1.0)
52
+ page.rectangle(20.0, 20.0, 558.0, 802.0)
53
+ page.stroke
54
+
55
+ font = pdf.get_font("Helvetica", nil)
56
+ bbox = font.get_bbox
57
+
58
+ y = 800
59
+ 50.step(5, -5) do |size|
60
+ height = (bbox[3] - bbox[1]) / 1000 * size
61
+ y = y - height
62
+
63
+ page.begin_text
64
+ page.set_font_and_size(font, size.to_f)
65
+ page.text_out(30.0, y.to_f, line)
66
+ page.end_text
67
+ end
68
+
69
+ (0...360).step(20) do |angle|
70
+ page.set_rgb_fill(rand, rand, rand)
71
+
72
+ page.begin_text
73
+ rad = angle / 180.0 * 3.141592
74
+ page.set_font_and_size(font, 20.0)
75
+ page.set_text_matrix(Math.cos(rad),
76
+ Math.sin(rad),
77
+ -Math.sin(rad),
78
+ Math.cos(rad),
79
+ 300 + Math.cos(rad) * 40,
80
+ 300 + Math.sin(rad) * 40)
81
+ page.show_text(line)
82
+ page.end_text
83
+ end
84
+
85
+ if $demo_output_filename
86
+ file_name= $demo_output_filename
87
+ else
88
+ file_name= $0 + ".pdf"
89
+ end
90
+
91
+ pdf.save_to_file(file_name)
@@ -0,0 +1,41 @@
1
+ #
2
+ # << Haru Free PDF Library 2.0.0 >> -- encryption.rb
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
+ require "hpdf"
15
+
16
+ pdf = HPDFDoc.new
17
+
18
+ text = "This is an encrypt document example."
19
+ owner_passwd = "owner"
20
+ user_passwd = "user"
21
+
22
+ font1 = pdf.get_font("Helvetica", nil)
23
+
24
+ page = pdf.add_page
25
+
26
+ page.set_size(HPDFDoc::HPDF_PAGE_SIZE_B5, HPDFDoc::HPDF_PAGE_LANDSCAPE)
27
+
28
+ page.begin_text
29
+ page.set_font_and_size(font1, 20)
30
+ page.text_rect(0, page.get_height / 2 + 20, page.get_width, page.get_height / 2 -10, text, HPDFDoc::HPDF_TALIGN_CENTER)
31
+ page.end_text
32
+
33
+ pdf.set_password(owner_passwd, user_passwd)
34
+
35
+ if $demo_output_filename
36
+ file_name= $demo_output_filename
37
+ else
38
+ file_name= $0 + ".pdf"
39
+ end
40
+
41
+ pdf.save_to_file(file_name)
@@ -0,0 +1,171 @@
1
+ #
2
+ # << Haru Free PDF Library 2.0.6 >> -- ext_gstate_demo.rb
3
+ #
4
+ # http://libharu.sourceforge.net/
5
+ #
6
+ # Copyright (c) 1999-2006 Takeshi Kanno
7
+ #
8
+ # Permission to use, copy, modify, distribute and sell this software
9
+ # and its documentation for any purpose is hereby granted without fee,
10
+ # provided that the above copyright notice appear in all copies and
11
+ # that both that copyright notice and this permission notice appear
12
+ # in supporting documentation.
13
+ # It is provided "as is" without express or implied warranty.
14
+ #
15
+
16
+ require "hpdf"
17
+
18
+ def draw_circles(page, description, x, y)
19
+ page.set_line_width(1)
20
+ page.set_rgb_stroke(0, 0, 0)
21
+
22
+ page.set_rgb_fill(1, 0, 0)
23
+ page.circle(x + 40, y + 40, 40)
24
+ page.close_path_fill_stroke()
25
+
26
+ page.set_rgb_fill(0, 1, 0)
27
+ page.circle(x + 100, y + 40, 40)
28
+ page.close_path_fill_stroke()
29
+
30
+ page.set_rgb_fill(0, 0, 1)
31
+ page.circle(x + 70, y + 74.64, 40)
32
+ page.close_path_fill_stroke()
33
+
34
+ page.set_rgb_fill(0, 0, 0)
35
+ page.begin_text()
36
+ page.text_out(x + 0.0, y + 130.0, description)
37
+ page.end_text()
38
+ end
39
+
40
+ pdf = HPDFDoc.new
41
+
42
+ PAGE_WIDTH = 600
43
+ PAGE_HEIGHT = 900
44
+
45
+ # add a new page object. #
46
+ page = pdf.add_page
47
+ page.set_height(PAGE_HEIGHT)
48
+ page.set_width(PAGE_WIDTH)
49
+
50
+ font = pdf.get_font("Helvetica-Bold", nil)
51
+
52
+ page.set_font_and_size(font, 10)
53
+
54
+ # normal
55
+ page.gsave()
56
+ draw_circles(page, "normal", 40, PAGE_HEIGHT - 170)
57
+ page.grestore()
58
+
59
+ # transparency (0.8)
60
+ page.gsave()
61
+ gstate = pdf.create_ext_gstate()
62
+ gstate.set_alpha_fill(0.8)
63
+ gstate.set_alpha_stroke(0.8)
64
+ page.set_ext_gstate(gstate)
65
+ draw_circles(page, "alpha fill = 0.8", 230, PAGE_HEIGHT - 170)
66
+ page.grestore()
67
+
68
+ # transparency (0.4)
69
+ page.gsave()
70
+ gstate = pdf.create_ext_gstate()
71
+ gstate.set_alpha_fill(0.4)
72
+ gstate.set_alpha_stroke(0.4)
73
+ page.set_ext_gstate(gstate)
74
+ draw_circles(page, "alpha fill = 0.4", 420, PAGE_HEIGHT - 170)
75
+ page.grestore()
76
+
77
+ # blend-mode=HPDF_BM_MULTIPLY
78
+ page.gsave()
79
+ gstate = pdf.create_ext_gstate()
80
+ gstate.set_blend_mode(HPDFDoc::HPDF_BM_MULTIPLY)
81
+ page.set_ext_gstate(gstate)
82
+ draw_circles(page, "HPDF_BM_MULTIPLY", 40, PAGE_HEIGHT - 340)
83
+ page.grestore()
84
+
85
+ # blend-mode=HPDF_BM_SCREEN
86
+ page.gsave()
87
+ gstate = pdf.create_ext_gstate()
88
+ gstate.set_blend_mode(HPDFDoc::HPDF_BM_SCREEN)
89
+ page.set_ext_gstate(gstate)
90
+ draw_circles(page, "HPDF_BM_SCREEN", 230, PAGE_HEIGHT - 340)
91
+ page.grestore()
92
+
93
+ # blend-mode=HPDF_BM_OVERLAY
94
+ page.gsave()
95
+ gstate = pdf.create_ext_gstate()
96
+ gstate.set_blend_mode(HPDFDoc::HPDF_BM_OVERLAY)
97
+ page.set_ext_gstate(gstate)
98
+ draw_circles(page, "HPDF_BM_OVERLAY", 420, PAGE_HEIGHT - 340)
99
+ page.grestore()
100
+
101
+ # blend-mode=HPDF_BM_DARKEN
102
+ page.gsave()
103
+ gstate = pdf.create_ext_gstate()
104
+ gstate.set_blend_mode(HPDFDoc::HPDF_BM_DARKEN)
105
+ page.set_ext_gstate(gstate)
106
+ draw_circles(page, "HPDF_BM_DARKEN", 40, PAGE_HEIGHT - 510)
107
+ page.grestore()
108
+
109
+ # blend-mode=HPDF_BM_LIGHTEN
110
+ page.gsave()
111
+ gstate = pdf.create_ext_gstate()
112
+ gstate.set_blend_mode(HPDFDoc::HPDF_BM_LIGHTEN)
113
+ page.set_ext_gstate(gstate)
114
+ draw_circles(page, "HPDF_BM_LIGHTEN", 230, PAGE_HEIGHT - 510)
115
+ page.grestore()
116
+
117
+ # blend-mode=HPDF_BM_COLOR_DODGE
118
+ page.gsave()
119
+ gstate = pdf.create_ext_gstate()
120
+ gstate.set_blend_mode(HPDFDoc::HPDF_BM_COLOR_DODGE)
121
+ page.set_ext_gstate(gstate)
122
+ draw_circles(page, "HPDF_BM_COLOR_DODGE", 420, PAGE_HEIGHT - 510)
123
+ page.grestore()
124
+
125
+ # blend-mode=HPDF_BM_COLOR_BUM
126
+ page.gsave()
127
+ gstate = pdf.create_ext_gstate()
128
+ gstate.set_blend_mode(HPDFDoc::HPDF_BM_COLOR_BUM)
129
+ page.set_ext_gstate(gstate)
130
+ draw_circles(page, "HPDF_BM_COLOR_BUM", 40, PAGE_HEIGHT - 680)
131
+ page.grestore()
132
+
133
+ # blend-mode=HPDF_BM_HARD_LIGHT
134
+ page.gsave()
135
+ gstate = pdf.create_ext_gstate()
136
+ gstate.set_blend_mode(HPDFDoc::HPDF_BM_HARD_LIGHT)
137
+ page.set_ext_gstate(gstate)
138
+ draw_circles(page, "HPDF_BM_HARD_LIGHT", 230, PAGE_HEIGHT - 680)
139
+ page.grestore()
140
+
141
+ # blend-mode=HPDF_BM_SOFT_LIGHT
142
+ page.gsave()
143
+ gstate = pdf.create_ext_gstate()
144
+ gstate.set_blend_mode(HPDFDoc::HPDF_BM_SOFT_LIGHT)
145
+ page.set_ext_gstate(gstate)
146
+ draw_circles(page, "HPDF_BM_SOFT_LIGHT", 420, PAGE_HEIGHT - 680)
147
+ page.grestore()
148
+
149
+ # blend-mode=HPDF_BM_DIFFERENCE
150
+ page.gsave()
151
+ gstate = pdf.create_ext_gstate()
152
+ gstate.set_blend_mode(HPDFDoc::HPDF_BM_DIFFERENCE)
153
+ page.set_ext_gstate(gstate)
154
+ draw_circles(page, "HPDF_BM_DIFFERENCE", 40, PAGE_HEIGHT - 850)
155
+ page.grestore()
156
+
157
+ # blend-mode=HPDF_BM_EXCLUSHON
158
+ page.gsave()
159
+ gstate = pdf.create_ext_gstate()
160
+ gstate.set_blend_mode(HPDFDoc::HPDF_BM_EXCLUSHON)
161
+ page.set_ext_gstate(gstate)
162
+ draw_circles(page, "HPDF_BM_EXCLUSHON", 230, PAGE_HEIGHT - 850)
163
+ page.grestore()
164
+
165
+ if $demo_output_filename
166
+ file_name= $demo_output_filename
167
+ else
168
+ file_name= $0 + ".pdf"
169
+ end
170
+
171
+ pdf.save_to_file(file_name)