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.
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)