mcc2 1.5.0

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 (120) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/.autotest +23 -0
  4. data/.gitignore +15 -0
  5. data/.rubocop.yml +3 -0
  6. data/Gemfile +13 -0
  7. data/History.txt +6 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +51 -0
  10. data/Rakefile +12 -0
  11. data/config/i18n-tasks.yml +193 -0
  12. data/exe/mcc2 +18 -0
  13. data/exe/mcc2-generate-preview +17 -0
  14. data/exe/mcc2print +6 -0
  15. data/lib/libguib16.rb +1620 -0
  16. data/lib/mcc2/advanced_data_edit_dlg.rb +139 -0
  17. data/lib/mcc2/cc_dialogbox.rb +52 -0
  18. data/lib/mcc2/constants.rb +154 -0
  19. data/lib/mcc2/dataman/base.rb +61 -0
  20. data/lib/mcc2/dataman/csv.rb +49 -0
  21. data/lib/mcc2/dataman/database.rb +8 -0
  22. data/lib/mcc2/dataman/dbf.rb +45 -0
  23. data/lib/mcc2/dataman/none.rb +25 -0
  24. data/lib/mcc2/dataview.rb +348 -0
  25. data/lib/mcc2/dataview_dlg.rb +232 -0
  26. data/lib/mcc2/debug_tools.rb +20 -0
  27. data/lib/mcc2/fx_colored_item.rb +101 -0
  28. data/lib/mcc2/generate_preview.rb +68 -0
  29. data/lib/mcc2/gui/advanced_data_edit_dlg.rbin +0 -0
  30. data/lib/mcc2/gui/dataview_dlg.pp +522 -0
  31. data/lib/mcc2/gui/layoutview_dlg.pp +5115 -0
  32. data/lib/mcc2/gui/mcc2_mainwin.pp +838 -0
  33. data/lib/mcc2/gui/picture_data_edit_dlg.rbin +0 -0
  34. data/lib/mcc2/gui/printerview_dlg.pp +3311 -0
  35. data/lib/mcc2/images/Image-Arrow-Left.gif +0 -0
  36. data/lib/mcc2/images/Image-Arrow-Right.gif +0 -0
  37. data/lib/mcc2/images/Image-FastArrowLeft.gif +0 -0
  38. data/lib/mcc2/images/Image-FastArrowRight.bmp +0 -0
  39. data/lib/mcc2/images/Image-FastArrowRight.gif +0 -0
  40. data/lib/mcc2/images/application-exit.png +0 -0
  41. data/lib/mcc2/images/copy.png +0 -0
  42. data/lib/mcc2/images/country_de.png +0 -0
  43. data/lib/mcc2/images/country_gb.png +0 -0
  44. data/lib/mcc2/images/country_rs.png +0 -0
  45. data/lib/mcc2/images/cut.png +0 -0
  46. data/lib/mcc2/images/distribute-horizontal-baseline.png +0 -0
  47. data/lib/mcc2/images/distribute-vertical-baseline.png +0 -0
  48. data/lib/mcc2/images/document-close.png +0 -0
  49. data/lib/mcc2/images/document-edit.png +0 -0
  50. data/lib/mcc2/images/document-new.png +0 -0
  51. data/lib/mcc2/images/document-open.png +0 -0
  52. data/lib/mcc2/images/document-print-frame.png +0 -0
  53. data/lib/mcc2/images/document-print.png +0 -0
  54. data/lib/mcc2/images/document-save-as.png +0 -0
  55. data/lib/mcc2/images/document-save.png +0 -0
  56. data/lib/mcc2/images/documentation.png +0 -0
  57. data/lib/mcc2/images/draw-rectangle.png +0 -0
  58. data/lib/mcc2/images/dummy.gif +0 -0
  59. data/lib/mcc2/images/exchange-positions.png +0 -0
  60. data/lib/mcc2/images/insert-image.png +0 -0
  61. data/lib/mcc2/images/insert-text.png +0 -0
  62. data/lib/mcc2/images/libreoffice-oasis-master-document.png +0 -0
  63. data/lib/mcc2/images/measure.png +0 -0
  64. data/lib/mcc2/images/messagebox_warning.png +0 -0
  65. data/lib/mcc2/images/paste.png +0 -0
  66. data/lib/mcc2/images/process-stop.png +0 -0
  67. data/lib/mcc2/images/zoom-in.png +0 -0
  68. data/lib/mcc2/layout.rb +323 -0
  69. data/lib/mcc2/layout_file.rb +794 -0
  70. data/lib/mcc2/layout_object/barcode.rb +33 -0
  71. data/lib/mcc2/layout_object/box.rb +18 -0
  72. data/lib/mcc2/layout_object/chip.rb +54 -0
  73. data/lib/mcc2/layout_object/embed.rb +16 -0
  74. data/lib/mcc2/layout_object/go_attribut.rb +16 -0
  75. data/lib/mcc2/layout_object/graphic.rb +59 -0
  76. data/lib/mcc2/layout_object/magstripe.rb +13 -0
  77. data/lib/mcc2/layout_object/picture.rb +22 -0
  78. data/lib/mcc2/layout_object/text.rb +29 -0
  79. data/lib/mcc2/layout_win.rb +2052 -0
  80. data/lib/mcc2/layoutview.rb +845 -0
  81. data/lib/mcc2/layoutview_dlg.rb +2058 -0
  82. data/lib/mcc2/locales.rb +27 -0
  83. data/lib/mcc2/mcc2_mainwin.rb +453 -0
  84. data/lib/mcc2/mcc2gui.rb +295 -0
  85. data/lib/mcc2/mcc2print.rb +54 -0
  86. data/lib/mcc2/picture_data_edit_dlg.rb +139 -0
  87. data/lib/mcc2/print_dlg.rb +520 -0
  88. data/lib/mcc2/printer/base.rb +148 -0
  89. data/lib/mcc2/printer/card_printer.rb +45 -0
  90. data/lib/mcc2/printer/file_printer.rb +135 -0
  91. data/lib/mcc2/printer/gdi_card_printer.rb +14 -0
  92. data/lib/mcc2/printer/gdi_printer.rb +197 -0
  93. data/lib/mcc2/printer/linux_cups_printer.rb +92 -0
  94. data/lib/mcc2/printer/preview.rb +277 -0
  95. data/lib/mcc2/printer/printer_cab.rb +118 -0
  96. data/lib/mcc2/printer/printer_cx320_direct.rb +286 -0
  97. data/lib/mcc2/printer/printer_epl.rb +118 -0
  98. data/lib/mcc2/printer/printer_ttp34x.rb +124 -0
  99. data/lib/mcc2/printer/printer_zebra.rb +324 -0
  100. data/lib/mcc2/printer/svg_drawer.rb +689 -0
  101. data/lib/mcc2/printerview.rb +604 -0
  102. data/lib/mcc2/printerview_dlg.rb +1248 -0
  103. data/lib/mcc2/version.rb +3 -0
  104. data/lib/mcc2.rb +11 -0
  105. data/locales/de.yml +6 -0
  106. data/locales/en.yml +502 -0
  107. data/locales/rs.yml +502 -0
  108. data/mcc2.gemspec +41 -0
  109. data/test/dummy.rb +19 -0
  110. data/test/layouts/bart_simpson.png +0 -0
  111. data/test/layouts/color_test.xml +151 -0
  112. data/test/layouts/ms.xml +67 -0
  113. data/test/ruby_print.rb +380 -0
  114. data/test/test.csv +4 -0
  115. data/test/test.dbf +0 -0
  116. data/test/test.str +4 -0
  117. data/test/test_mcc2.rb +8 -0
  118. data.tar.gz.sig +6 -0
  119. metadata +421 -0
  120. metadata.gz.sig +0 -0
@@ -0,0 +1,151 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Root version="1">
3
+ <Layout>
4
+ <Magstripe>false</Magstripe>
5
+ <Contact>false</Contact>
6
+ <Duplex>false</Duplex>
7
+ <printertype>GdiPrinter</printertype>
8
+ <gdiprinter_initdata>4200f600770065004d00610069006c00650072002d004800500020004c0061007300650072004a0065007400200038003100350030002000530065000000000001040006dc00340443ff8107010009009a0b3408640001000f00580201000100580203000000410034000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000020000000b010000ffffffff0000000000000000000000000000000044494e55220000023c04600c81f7387600000000000000000000000000000000000000000000000000000000120000000000000004000000000002000400020000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000f8010000534d544a000000001000e8014800500020004c0061007300650072004a00650074002000380031003500300020005300650072006900650073002000500043004c000000496e70757442696e00464f524d534f5552434500524553444c4c00556e69726573444c4c00506170657253697a650041340045646765546f45646765004f4646004f7269656e746174696f6e00504f525452414954004a52436f6e73747261696e74730030004a524844496e7374616c6c6564004a52484453746f7265004a5248444e6f74496e7374616c6c6564004a52484450726976617465004a52436d6443616c6c6261636b004a520048505072696e7465724d6f64656c4e616d650048505f4c617365724a65745f383135305f5365726965735f50434c004475706c6578004e4f4e45004d6564696154797065004175746f53656c65637400436f6c6c617465004f4646005265736f6c7574696f6e004f7074696f6e310048616c66746f6e650048545f50415453495a455f4155544f0045636f6e6f6d6f6465004f7074696f6e31004f757470757442696e004f7074696f6e3100537461706c696e670031706172616c6c656c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</gdiprinter_initdata>
9
+ <x_offset>0.0</x_offset>
10
+ <datasource>test/test.csv</datasource>
11
+ <datasource_encoding>LATIN1</datasource_encoding>
12
+ <Width>85.6</Width>
13
+ <Contactless>false</Contactless>
14
+ <y_offset>0.0</y_offset>
15
+ <Height>53.98</Height>
16
+ <fileprinter_save_as>./mcc2_%d_%p.jpeg</fileprinter_save_as>
17
+ <gdiprinter_name>BöweMailer-HP LaserJet 8150 Series PCL</gdiprinter_name>
18
+ <fileprinter_dpi>300</fileprinter_dpi>
19
+ <datasource_typ>csv</datasource_typ>
20
+ <xidprinter_name/>
21
+ <xidprinter_initdata/>
22
+ <zebraprinter_name/><zebraprinter_initdata/></Layout>
23
+ <Chip_Params>
24
+ <Param_1/>
25
+ <Param_2/>
26
+ <Param_3/>
27
+ <Param_4/>
28
+ <Param_5/>
29
+ <Param_6/>
30
+ <Param_7/>
31
+ <Param_8/>
32
+ <Param_9/>
33
+ <Param_10/>
34
+ <Param_11/>
35
+ <Param_12/>
36
+ <Param_13/>
37
+ <Param_14/>
38
+ <Param_15/>
39
+ <Param_16/>
40
+ <Param_17/>
41
+ <Param_18/>
42
+ <Param_19/>
43
+ <Param_20/>
44
+ <Param_21/>
45
+ <Param_22/>
46
+ <Param_23/>
47
+ </Chip_Params>
48
+ <Magstripe_Params>
49
+ <ms_spur1/>
50
+ <ms_spur2/>
51
+ <ms_spur3/>
52
+ </Magstripe_Params>
53
+ <GraphicObjects>
54
+ <GraphicObject>
55
+ <object_typ>PictureObject</object_typ>
56
+ <id>0</id>
57
+ <object_name>PictureObject#0</object_name>
58
+ <printable>true</printable>
59
+ <rotation>0</rotation>
60
+ <page_nr>0</page_nr>
61
+ <x>10</x>
62
+ <y>10</y>
63
+ <view_in_printlist>false</view_in_printlist>
64
+ <stretch>false</stretch>
65
+ <height>30</height>
66
+ <sample_data/>
67
+ <width>40</width>
68
+ <data>test/layouts/bart_simpson.png</data>
69
+ </GraphicObject>
70
+ <GraphicObject>
71
+ <object_typ>TextObject</object_typ>
72
+ <id>1</id>
73
+ <object_name>Schwarz</object_name>
74
+ <back_color>FFFFFFFF</back_color>
75
+ <rotation>0</rotation>
76
+ <page_nr>0</page_nr>
77
+ <x>10</x>
78
+ <y>10</y>
79
+ <view_in_printlist>false</view_in_printlist>
80
+ <font_file/>
81
+ <font_height>10</font_height>
82
+ <justification>Links</justification>
83
+ <height>0</height>
84
+ <font_color>000000FF</font_color>
85
+ <font_typ>Helvetica</font_typ>
86
+ <sample_data>Schwarz</sample_data>
87
+ <width>30</width>
88
+ <data>Daten</data>
89
+ </GraphicObject>
90
+ <GraphicObject>
91
+ <object_typ>TextObject</object_typ>
92
+ <id>2</id>
93
+ <object_name>Blau</object_name>
94
+ <back_color>FFFFFFFF</back_color>
95
+ <rotation>0</rotation>
96
+ <page_nr>0</page_nr>
97
+ <x>50</x>
98
+ <y>10</y>
99
+ <view_in_printlist>false</view_in_printlist>
100
+ <font_file/>
101
+ <font_height>10</font_height>
102
+ <justification>Links</justification>
103
+ <height>0</height>
104
+ <font_color>0000ffff</font_color>
105
+ <font_typ>Helvetica</font_typ>
106
+ <sample_data>Blau</sample_data>
107
+ <width>30</width>
108
+ <data>Daten</data>
109
+ </GraphicObject>
110
+ <GraphicObject>
111
+ <object_typ>TextObject</object_typ>
112
+ <id>3</id>
113
+ <object_name>Grün</object_name>
114
+ <back_color>FFFFFFFF</back_color>
115
+ <rotation>0</rotation>
116
+ <page_nr>0</page_nr>
117
+ <x>50</x>
118
+ <y>15</y>
119
+ <view_in_printlist>false</view_in_printlist>
120
+ <font_file/>
121
+ <font_height>10</font_height>
122
+ <justification>Links</justification>
123
+ <height>0</height>
124
+ <font_color>00ff00ff</font_color>
125
+ <font_typ>Helvetica</font_typ>
126
+ <sample_data>Grün</sample_data>
127
+ <width>30</width>
128
+ <data>Daten</data>
129
+ </GraphicObject>
130
+ <GraphicObject>
131
+ <object_typ>TextObject</object_typ>
132
+ <id>4</id>
133
+ <object_name>Rot</object_name>
134
+ <back_color>FFFFFFFF</back_color>
135
+ <rotation>0</rotation>
136
+ <page_nr>0</page_nr>
137
+ <x>50</x>
138
+ <y>20</y>
139
+ <view_in_printlist>false</view_in_printlist>
140
+ <font_file/>
141
+ <font_height>10</font_height>
142
+ <justification>Links</justification>
143
+ <height>0</height>
144
+ <font_color>ff0004ff</font_color>
145
+ <font_typ>Helvetica</font_typ>
146
+ <sample_data>Rot</sample_data>
147
+ <width>30</width>
148
+ <data>Daten</data>
149
+ </GraphicObject>
150
+ </GraphicObjects>
151
+ </Root>
@@ -0,0 +1,67 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Root>
3
+ <Layout>
4
+ <Magstripe>false</Magstripe>
5
+ <Contact>false</Contact>
6
+ <Duplex>false</Duplex>
7
+ <x_offset>0</x_offset>
8
+ <datasource/>
9
+ <datasource_encoding>IBM850</datasource_encoding>
10
+ <Width>85.6</Width>
11
+ <Contactless>false</Contactless>
12
+ <y_offset>0</y_offset>
13
+ <Height>53.98</Height>
14
+ <datasource_typ>none</datasource_typ>
15
+ </Layout>
16
+ <Chip_Params>
17
+ <Param_1/>
18
+ <Param_2/>
19
+ <Param_3/>
20
+ <Param_4/>
21
+ <Param_5/>
22
+ <Param_6/>
23
+ <Param_7/>
24
+ <Param_8/>
25
+ <Param_9/>
26
+ <Param_10/>
27
+ <Param_11/>
28
+ <Param_12/>
29
+ <Param_13/>
30
+ <Param_14/>
31
+ <Param_15/>
32
+ <Param_16/>
33
+ <Param_17/>
34
+ <Param_18/>
35
+ <Param_19/>
36
+ <Param_20/>
37
+ <Param_21/>
38
+ <Param_22/>
39
+ <Param_23/>
40
+ </Chip_Params>
41
+ <Magstripe_Params>
42
+ <ms_spur1>Lars, Olaf, Holger</ms_spur1>
43
+ <ms_spur2>11111111111111111111111111111111</ms_spur2>
44
+ <ms_spur3>222222222222222222222222222222222</ms_spur3>
45
+ </Magstripe_Params>
46
+ <GraphicObjects>
47
+ <GraphicObject>
48
+ <object_typ>TextObject</object_typ>
49
+ <id>0</id>
50
+ <back_color>FFFFFFFF</back_color>
51
+ <object_name>GraphicObject</object_name>
52
+ <rotation>0</rotation>
53
+ <page_nr>0</page_nr>
54
+ <x>10</x>
55
+ <y>10</y>
56
+ <view_in_printlist>false</view_in_printlist>
57
+ <font_height>10</font_height>
58
+ <justification>Links</justification>
59
+ <height>10</height>
60
+ <font_color>000000FF</font_color>
61
+ <font_typ>Arial</font_typ>
62
+ <sample_data>Muster</sample_data>
63
+ <width>30</width>
64
+ <data>Daten</data>
65
+ </GraphicObject>
66
+ </GraphicObjects>
67
+ </Root>
@@ -0,0 +1,380 @@
1
+ $: << "../win32"
2
+
3
+ if __FILE__ == $0
4
+ # ~ begin
5
+ # ~ require 'fox16'
6
+ # ~ require 'fox16/colors'
7
+ # ~ require 'fox16/responder'
8
+ # ~ p "loading fox16"
9
+ # ~ rescue LoadError
10
+ # ~ p "Error loading fox16 try fox12"
11
+ # ~ require 'fox12'
12
+ # ~ require 'fox12/colors'
13
+ # ~ $enable_fox12_workaround = true
14
+ # ~ end
15
+ # ~ include Fox
16
+ # require 'RMagick'
17
+ # include Magick
18
+ # require 'rvg/rvg' # f�r RMagick
19
+
20
+ require "tempfile"
21
+
22
+ end
23
+
24
+ $stderr.sync = true
25
+ $stdout.sync = true
26
+
27
+ require "dl"
28
+
29
+ require "win32api4ruby"
30
+
31
+ class RubyPrinting
32
+ # --------------------------------------------------------------------------------------------------------------
33
+ def with_printer(devicename, datatype, devmode)
34
+ devicename << "\0"
35
+ printer = "\0" * 4
36
+ if devmode == 0
37
+ pdefaults = 0
38
+ else
39
+ datatype << "\0"
40
+ # ~ pdefaults = [datatype, devmode.to_s, 0x8].pack('ppL')
41
+ pdefaults = [datatype, devmode.to_s, PRINTER_ACCESS_USE].pack("ppL")
42
+ end
43
+ open_printer(devicename, printer, pdefaults)
44
+ hprinter = printer.unpack1("L")
45
+ yield hprinter
46
+ ensure
47
+ close_printer(hprinter) if hprinter
48
+ end
49
+
50
+ # --------------------------------------------------------------------------------------------------------------
51
+ # ~ typedef struct _DOC_INFO_1 {
52
+ # ~ LPTSTR pDocName;
53
+ # ~ LPTSTR pOutputFile;
54
+ # ~ LPTSTR pDatatype;
55
+ # ~ } DOC_INFO_1;
56
+ # --------------------------------------------------------------------------------------------------------------
57
+ def with_doc_printer(documentName, handleToPrinter)
58
+ documentName << "\0"
59
+ # ~ docinfo = [documentName].pack('px12')
60
+ docinfo = [documentName, nil, "TEXT"].pack("ppp") # das hat zumindest ein Blatt bef�rdert
61
+ # ~ docinfo = [documentName, nil, "RAW"].pack('ppp') # das tut so, als wenn es drucken will, tut es aber nicht
62
+ # ~ docinfo = [documentName, nil, nil].pack('ppp') # das tut nicht drucken wollen
63
+ start_doc_printer(handleToPrinter, 1, docinfo)
64
+ yield
65
+ ensure
66
+ end_doc_printer(handleToPrinter)
67
+ end
68
+
69
+ # --------------------------------------------------------------------------------------------------------------
70
+ def with_page_printer(hPrinter)
71
+ start_page_printer(hPrinter)
72
+ yield
73
+ ensure
74
+ end_page_printer(hPrinter)
75
+ end
76
+
77
+ # --------------------------------------------------------------------------------------------------------------
78
+ def with_doc(documentName, handleToPrinter)
79
+ documentName << "\0"
80
+ docinfo = [documentName].pack("px12")
81
+ Win32api4ruby::Gdi.start_doc(handleToPrinter, docinfo)
82
+ yield
83
+ ensure
84
+ Win32api4ruby::Gdi.end_doc(handleToPrinter)
85
+ end
86
+
87
+ # --------------------------------------------------------------------------------------------------------------
88
+ def with_page(hPrinter)
89
+ Win32api4ruby::Gdi.start_page(hPrinter)
90
+ yield
91
+ ensure
92
+ Win32api4ruby::Gdi.end_page(hPrinter)
93
+ end
94
+
95
+ def print_dlg(str)
96
+ Win32api4ruby::Comdlg.print_dlg(str)
97
+ end
98
+
99
+ # --------------------------------------------------------------------------------------------------------------
100
+ def show_print_dialog
101
+ # wird zwar gestartet, liefert aber keine gef�llte struktur zur�ck
102
+ pdlg = Win32api4ruby::Comdlg.create_PRINTDLG
103
+ pdlg[:hwndOwner] = 0
104
+ pdlg[:hDevMode] = 0
105
+ pdlg[:hDC] = 0
106
+ # ~ pdlg[:Flags] = 0x140
107
+ pdlg[:Flags] = PD_RETURNDC | PD_NOSELECTION
108
+ # ~ pdlg[:Flags] = PD_RETURNDC | PD_PRINTSETUP | PD_NONETWORKBUTTON
109
+ pdlg[:nFromPage] = 0
110
+ pdlg[:nToPage] = 0
111
+ pdlg[:nMinPage] = 0
112
+ pdlg[:nMaxPage] = 0
113
+ pdlg[:nCopies] = 0
114
+ pdlg[:hInstance] = 0
115
+ pdlg[:lCustData] = 0
116
+ pdlg[:lpfnPrintHook] = 0
117
+ pdlg[:lpfnSetupHook] = 0
118
+ pdlg[:lpPrintTemplateName] = 0
119
+ pdlg[:lpSetupTemplateName] = 0
120
+ pdlg[:hPrintTemplate] = 0
121
+ pdlg[:hSetupTemplate] = 0
122
+ devnames = 0
123
+ pdlg[:hDevNames] = devnames
124
+ p "pdlg: #{pdlg.inspect}"
125
+ # ~ pdlg.each{|e| p e }
126
+
127
+ # ~ bin_struct = pdlg.serialize
128
+ # ~ ok = print_dlg(StringIO.new(bin_struct))
129
+ # ~ pdlg = PRINTDLG.read(bin_struct)
130
+
131
+ # ~ pd = [66, 0x140].pack("Lx16Lx46")
132
+ # ~ ok = print_dlg(pd)
133
+ ok = print_dlg(pdlg)
134
+
135
+ p "res: #{ok.to_s(16)} pdlg: #{pdlg.inspect}"
136
+ # ~ p PRINTDLG.read(pdlg)
137
+ p pdlg[:lStructSize]
138
+ p pdlg[0, 64].unpack("LLLLLLLLLLLLLLLL")
139
+ # ~ p pd
140
+ # ~ p pd.unpack("H*")
141
+ # ~ p pd.unpack("LLLLLLLLLLLLLLLL")
142
+ # ~ p pd.unpack("x8Lx4L")
143
+ p "hdc: #{pdlg[:hDC]}"
144
+ p "devMode: #{pdlg[:hDevMode]}"
145
+ dm_prt = DL::PtrData.new(pdlg[:hDevMode], 100)
146
+ p dm_prt.to_s
147
+
148
+ p "devnames: #{pdlg[:hDevNames]}"
149
+ hDevNames = pdlg[:hDevNames]
150
+ pDevNames = Win32api4ruby::Kernel.global_lock(hDevNames)
151
+ dn_prt = DL::PtrData.new(pDevNames, DL.sizeof("H" * 4))
152
+ dn_prt.struct!("H" * 4,
153
+ :wDriverOffset,
154
+ :wDeviceOffset,
155
+ :wOutputOffset,
156
+ :wDefault)
157
+
158
+ puts "wDriverOffset: #{dn_prt[:wDriverOffset]} wDeviceOffset: #{dn_prt[:wDeviceOffset]} wOutputOffset: #{dn_prt[:wOutputOffset]} wDefault: #{dn_prt[:wDefault]}"
159
+
160
+ p DL::PtrData.new(pDevNames + dn_prt[:wDriverOffset]).to_s
161
+ p DL::PtrData.new(pDevNames + dn_prt[:wDeviceOffset]).to_s
162
+ p DL::PtrData.new(pDevNames + dn_prt[:wOutputOffset]).to_s
163
+ p DL::PtrData.new(pDevNames + dn_prt[:wDefault]).to_s
164
+
165
+ Win32api4ruby::Kernel.global_unlock(hDevNames)
166
+ # ~ devmode, dc = pd.unpack("x8Lx4L")
167
+ end
168
+
169
+ def show_print_setup_dialog
170
+ pdlg = Win32api4ruby::Comdlg.create_PAGESETUPDLG
171
+ p "pdlg: #{pdlg.inspect}"
172
+ p Win32api4ruby::Comdlg.print_setup_dlg(pdlg)
173
+
174
+ p "pdlg: #{pdlg.inspect}"
175
+ end
176
+
177
+ WS_VISIBLE = 0x10000000
178
+ def create_dummy_window(name = "dummy-window")
179
+ Win32api4ruby::User.create_window_ex(0, "Button", name, WS_VISIBLE, 0, 0, 100, 100, 0, 0, 0, 0)
180
+ end
181
+
182
+ def show_print_dialog_ex
183
+ pdlg = Win32api4ruby::Comdlg.create_PRINTDLGEX
184
+
185
+ hWnd = create_dummy_window
186
+ pdlg[:hwndOwner] = hWnd
187
+ pdlg[:hDevMode] = 0
188
+ pdlg[:hDevNames] = 0
189
+ pdlg[:hDC] = 0
190
+ pdlg[:Flags] = PD_RETURNDC | PD_COLLATE | PD_NOPAGENUMS
191
+ pdlg[:Flags2] = 0
192
+ pdlg[:ExclusionFlags] = 0
193
+ pdlg[:nPageRanges] = 0
194
+ pdlg[:nMaxPageRanges] = 10
195
+ pdlg[:lpPageRanges] = "1234" * 2 * 10
196
+ pdlg[:nMinPage] = 1
197
+ pdlg[:nMaxPage] = 1000
198
+ pdlg[:nCopies] = 1
199
+ pdlg[:hInstance] = 0
200
+ pdlg[:lpPrintTemplateName] = nil
201
+ pdlg[:lpCallback] = nil
202
+ pdlg[:nPropertyPages] = 0
203
+ pdlg[:lphPropertyPages] = 0
204
+ pdlg[:nStartPage] = 0 # START_PAGE_GENERAL
205
+ pdlg[:dwResultAction] = 0
206
+
207
+ p "pdlg: #{pdlg.inspect}"
208
+ p Win32api4ruby::Comdlg.print_dlg_ex(pdlg)
209
+
210
+ p "pdlg: #{pdlg.inspect}"
211
+ end
212
+
213
+ # --------------------------------------------------------------------------------------------------------------
214
+ def parse_devmode(devmode)
215
+ p devmode
216
+ # p devmode.unpack("p").to_s
217
+ _, _, _, _ = devmode.to_s.unpack("A32x12Sx16Sx6A32")
218
+ end
219
+
220
+ # --------------------------------------------------------------------------------------------------------------
221
+ def print_doc_from_dialog(docString, docName, pageLength = 50)
222
+ # need a more reasonable default for pageLength
223
+ devmode, _ = show_print_dialog
224
+ devicename, _, _, _ = parse_devmode(devmode)
225
+ _print_doc(docString, devicename, devmode, docName, pageLength)
226
+ end
227
+
228
+ # --------------------------------------------------------------------------------------------------------------
229
+ def _print_doc(docString, printerName, devMode, docName, pageLength)
230
+ raise "bad docString" unless docString.respond_to?(:each_line)
231
+ raise "bad pageLength" unless pageLength > 1
232
+ datatype = (devMode == 0) ? nil : "TEXT"
233
+ with_printer(printerName, datatype, devMode) do |hPrinter|
234
+ with_doc_printer(docName, hPrinter) do
235
+ lines = 0
236
+ written = "\0" * 4
237
+ docString.each_line do |line|
238
+ line.chomp!
239
+ if lines == 0
240
+ start_page_printer(hPrinter)
241
+ lines += 1
242
+ end
243
+ line << "\r\n"
244
+ write_printer(hPrinter, line, line.length, written)
245
+ lines += 1
246
+ if lines == pageLength
247
+ lines = 0
248
+ write_printer(hPrinter, "\f", 1, written)
249
+ end_page_printer(hPrinter)
250
+ end
251
+ end
252
+ # flush last page
253
+ write_printer(hPrinter, "\f", 1, written)
254
+ end_page_printer(hPrinter)
255
+ end
256
+ end
257
+ end
258
+
259
+ # --------------------------------------------------------------------------------------------------------------
260
+ def print_doc(docString, printerName, docName = "printjob", pageLength = 50)
261
+ _print_doc(docString, printerName, 0, docName, pageLength)
262
+ end
263
+
264
+ # --------------------------------------------------------------------------------------------------------------
265
+ def print_graphic(devicename, datatype)
266
+ Magick::RVG.dpi = 600
267
+ crd_width = 85
268
+ crd_height = 55
269
+
270
+ img = Magick::RVG.new((crd_width + 10).mm, (crd_height + 10).mm) do |canvas|
271
+ canvas.background_fill = "white"
272
+
273
+ canvas.rect(crd_width.mm, crd_height.mm, 5.mm, 5.mm).styles(fill: "none", stroke: "black")
274
+ canvas.text(200, 200, "das ist ein ganz neuer Test Test").styles(
275
+ font_family: "Arial",
276
+ font_size: 20.pt,
277
+ fill: "black",
278
+ font_weight: "bold",
279
+ font_style: "normal"
280
+ )
281
+
282
+ canvas.text(100, 100, "Blue 15").styles(
283
+ font_family: "Arial",
284
+ font_size: 15.pt,
285
+ fill: "blue",
286
+ font_weight: "bold",
287
+ font_style: "normal"
288
+ )
289
+ canvas.text(500, 100, "Green 15").styles(
290
+ font_family: "Arial",
291
+ font_size: 15.pt,
292
+ fill: "green",
293
+ font_weight: "bold",
294
+ font_style: "normal"
295
+ )
296
+ canvas.text(900, 100, "Red 15").styles(
297
+ font_family: "Arial",
298
+ font_size: 15.pt,
299
+ fill: "red",
300
+ font_weight: "bold",
301
+ font_style: "normal"
302
+ )
303
+ end
304
+ pic = img.draw
305
+ p pic
306
+
307
+ # create_dc(lpszDriver, lpszDevice, lpszOutput, lpInitData)
308
+ hDC = Win32api4ruby::Gdi.create_dc(nil, devicename, nil, nil)
309
+
310
+ hPrinter = hDC
311
+
312
+ # ~ devMode, dc = show_print_dialog
313
+ # ~ devicename, orient, duplex, formname = parse_devmode(devMode)
314
+ devMode = 0
315
+ (devMode == 0) ? nil : "TEXT"
316
+
317
+ with_doc("Test", hPrinter) do
318
+ with_page(hPrinter) do
319
+ bmdata = pic.to_blob {
320
+ self.format = "rgb"
321
+ self.depth = 8
322
+ }
323
+ puts "size: #{bmdata.length}"
324
+
325
+ (0...pic.rows).each { |row_idx|
326
+ linedata = bmdata[3 * row_idx * pic.columns, 3 * pic.columns]
327
+ linedata = linedata.unpack("a3" * pic.columns).map { |a| a.reverse! }.pack("a3" * pic.columns)
328
+ hBmp = Win32api4ruby::Gdi.create_bitmap(pic.columns, 1, 1, 24, linedata)
329
+ # ~ p "hBmp: #{hBmp}"
330
+
331
+ tmpDC = Win32api4ruby::Gdi.create_compatible_dc(hPrinter)
332
+
333
+ oldBmp = Win32api4ruby::Gdi.select_object(tmpDC, hBmp)
334
+
335
+ nXDest = 500
336
+ nYDest = 500 + row_idx
337
+ hdcSrc = tmpDC
338
+ nXSrc = 0
339
+ nYSrc = 0
340
+ dwRop = SRCCOPY
341
+ Win32api4ruby::Gdi.bit_blt(hPrinter, nXDest, nYDest, pic.columns, 1, hdcSrc, nXSrc, nYSrc, dwRop)
342
+
343
+ Win32api4ruby::Gdi.select_object(tmpDC, oldBmp)
344
+ }
345
+
346
+ s = "Teststring"
347
+ Win32api4ruby::Gdi.text_out(hPrinter, 10, 10, s, s.length)
348
+ end
349
+ end
350
+ end
351
+ end
352
+ # ======================================================================================================
353
+ # ======================================================================================================
354
+ if __FILE__ == $0
355
+ # ~ require 'libguib16.rb'
356
+ rp = RubyPrinting.new
357
+
358
+ # rp.show_print_dialog
359
+ # ~ rp.show_print_setup_dialog
360
+ # rp.show_print_dialog_ex
361
+ # rp.enum_printers
362
+ rp.document_properties
363
+ exit
364
+
365
+ devicename = "Jaws PDF Creator"
366
+ # ~ devicename = '\\\COMFILE1\P0049'
367
+ # ~ devicename = "XeroxPhaser7750DN PS"
368
+ # ~ rp.enum_printers
369
+ rp.print_graphic(devicename, "RAW")
370
+
371
+ exit
372
+
373
+ docString = <<~EOF
374
+ This is a test.
375
+ Should be on a different line.
376
+ Should be 3 lines in total, with a y at the end.
377
+ EOF
378
+ rp.print_doc(docString, devicename)
379
+ # ~ rp.print_doc_from_dialog(docString, nil) # funktioniert nicht
380
+ end
data/test/test.csv ADDED
@@ -0,0 +1,4 @@
1
+ Name1;Name2;Name3;Barcode
2
+ Hans;Müller;Maschinenbau Meier;123456789012
3
+ Franz;Meiser;Maschinenbau Meier;123456789013
4
+ Helga;Freudig;Baufuchs;123456789014
data/test/test.dbf ADDED
Binary file
data/test/test.str ADDED
@@ -0,0 +1,4 @@
1
+ Name1 C ; 030
2
+ Name2 C ; 030
3
+ Name3 C ; 030
4
+ Barcode C ; 030
data/test/test_mcc2.rb ADDED
@@ -0,0 +1,8 @@
1
+ require "test/unit"
2
+ require "mcc2"
3
+
4
+ class TestMcc2 < Test::Unit::TestCase
5
+ def test_sanity
6
+ flunk "write tests or I will kneecap you"
7
+ end
8
+ end
data.tar.gz.sig ADDED
@@ -0,0 +1,6 @@
1
+ zL��������mz�i3K�H�s�&���� }E[
2
+ V�#�J։,r5(�,ۘ�� ��C�c�y��6b$�z:� ֙Z�T���DT
3
+ ���9�7y�)�B�RDэ� jh�kĦ3��T_I�e~�*��@�`���z�.!VaYl�%�sњ
4
+ ��l^ǫ�(�cfU�Ϲ�S���ڸā�b՚����++�//O�f������c���^���W|A�,b}�t$NI�̓�Ő%Pk�d���,1i�|-�i��`�W�K�g֊*�"%�T&)����F.6�TƾX���P����]V���k�X
5
+ ���4��O�7J�f�_�7�p�ƈi�V�ԕtBN�� 5.�(���,�
6
+ ۏk�4��*���7�:\ 07N���