1 /*
2 * Copyright (c) 2022 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "print_page_size.h"
17 #include "print_log.h"
18
19 namespace {
20 const uint32_t ISO_A0_WIDTH = 33110;
21 const uint32_t ISO_A0_HEIGHT = 46810;
22 const uint32_t ISO_A1_WIDTH = 23390;
23 const uint32_t ISO_A1_HEIGHT = 33110;
24 const uint32_t ISO_A2_WIDTH = 16540;
25 const uint32_t ISO_A2_HEIGHT = 23390;
26 const uint32_t ISO_A3_WIDTH = 11690;
27 const uint32_t ISO_A3_HEIGHT = 16540;
28 const uint32_t ISO_A4_WIDTH = 8268;
29 const uint32_t ISO_A4_HEIGHT = 11692;
30 const uint32_t ISO_A5_WIDTH = 5830;
31 const uint32_t ISO_A5_HEIGHT = 8270;
32 const uint32_t ISO_A6_WIDTH = 4130;
33 const uint32_t ISO_A6_HEIGHT = 5830;
34 const uint32_t ISO_A7_WIDTH = 2910;
35 const uint32_t ISO_A7_HEIGHT = 4130;
36 const uint32_t ISO_A8_WIDTH = 2050;
37 const uint32_t ISO_A8_HEIGHT = 2910;
38 const uint32_t ISO_A9_WIDTH = 1460;
39 const uint32_t ISO_A9_HEIGHT = 2050;
40 const uint32_t ISO_A10_WIDTH = 1020;
41 const uint32_t ISO_A10_HEIGHT = 1460;
42 const uint32_t ISO_B0_WIDTH = 39370;
43 const uint32_t ISO_B0_HEIGHT = 55670;
44 const uint32_t ISO_B1_WIDTH = 27830;
45 const uint32_t ISO_B1_HEIGHT = 39370;
46 const uint32_t ISO_B2_WIDTH = 19690;
47 const uint32_t ISO_B2_HEIGHT = 27830;
48 const uint32_t ISO_B3_WIDTH = 13900;
49 const uint32_t ISO_B3_HEIGHT = 19690;
50 const uint32_t ISO_B4_WIDTH = 9840;
51 const uint32_t ISO_B4_HEIGHT = 13900;
52 const uint32_t ISO_B5_WIDTH = 6930;
53 const uint32_t ISO_B5_HEIGHT = 9840;
54 const uint32_t ISO_B6_WIDTH = 4920;
55 const uint32_t ISO_B6_HEIGHT = 6930;
56 const uint32_t ISO_B7_WIDTH = 3460;
57 const uint32_t ISO_B7_HEIGHT = 4920;
58 const uint32_t ISO_B8_WIDTH = 2440;
59 const uint32_t ISO_B8_HEIGHT = 3460;
60 const uint32_t ISO_B9_WIDTH = 1730;
61 const uint32_t ISO_B9_HEIGHT = 2440;
62 const uint32_t ISO_B10_WIDTH = 1220;
63 const uint32_t ISO_B10_HEIGHT = 1730;
64 const uint32_t ISO_C0_WIDTH = 36100;
65 const uint32_t ISO_C0_HEIGHT = 51060;
66 const uint32_t ISO_C1_WIDTH = 25510;
67 const uint32_t ISO_C1_HEIGHT = 36100;
68 const uint32_t ISO_C2_WIDTH = 18030;
69 const uint32_t ISO_C2_HEIGHT = 25510;
70 const uint32_t ISO_C3_WIDTH = 12760;
71 const uint32_t ISO_C3_HEIGHT = 18030;
72 const uint32_t ISO_C4_WIDTH = 9020;
73 const uint32_t ISO_C4_HEIGHT = 12760;
74 const uint32_t ISO_C5_WIDTH = 6380;
75 const uint32_t ISO_C5_HEIGHT = 9020;
76 const uint32_t ISO_C6_WIDTH = 4490;
77 const uint32_t ISO_C6_HEIGHT = 6380;
78 const uint32_t ISO_C7_WIDTH = 3190;
79 const uint32_t ISO_C7_HEIGHT = 4490;
80 const uint32_t ISO_C8_WIDTH = 2240;
81 const uint32_t ISO_C8_HEIGHT = 3190;
82 const uint32_t ISO_C9_WIDTH = 1570;
83 const uint32_t ISO_C9_HEIGHT = 2240;
84 const uint32_t ISO_C10_WIDTH = 1100;
85 const uint32_t ISO_C10_HEIGHT = 1570;
86 const uint32_t ISO_DL_WIDTH = 4330;
87 const uint32_t ISO_DL_HEIGHT = 8660;
88 const uint32_t LEGAL_WIDTH = 8500;
89 const uint32_t LEGAL_HEIGHT = 14000;
90 const uint32_t LETTER_WIDTH = 8500;
91 const uint32_t LETTER_HEIGHT = 11000;
92 const uint32_t ROC_16K_WIDTH = 7677;
93 const uint32_t ROC_16K_HEIGHT = 10629;
94 const uint32_t ROC_8K_WIDTH = 10629;
95 const uint32_t ROC_8K_HEIGHT = 15354;
96 const uint32_t JIS_B0_WIDTH = 40551;
97 const uint32_t JIS_B0_HEIGHT = 57323;
98 const uint32_t JIS_B1_WIDTH = 28661;
99 const uint32_t JIS_B1_HEIGHT = 40551;
100 const uint32_t JIS_B2_WIDTH = 20276;
101 const uint32_t JIS_B2_HEIGHT = 28661;
102 const uint32_t JIS_B3_WIDTH = 14331;
103 const uint32_t JIS_B3_HEIGHT = 20276;
104 const uint32_t JIS_B4_WIDTH = 10119;
105 const uint32_t JIS_B4_HEIGHT = 14331;
106 const uint32_t JIS_B5_WIDTH = 7165;
107 const uint32_t JIS_B5_HEIGHT = 10118;
108 const uint32_t JIS_B6_WIDTH = 5049;
109 const uint32_t JIS_B6_HEIGHT = 7165;
110 const uint32_t JIS_B7_WIDTH = 3583;
111 const uint32_t JIS_B7_HEIGHT = 5049;
112 const uint32_t JIS_B8_WIDTH = 2520;
113 const uint32_t JIS_B8_HEIGHT = 3583;
114 const uint32_t JIS_B9_WIDTH = 1772;
115 const uint32_t JIS_B9_HEIGHT = 2520;
116 const uint32_t JIS_B10_WIDTH = 1259;
117 const uint32_t JIS_B10_HEIGHT = 1772;
118 const uint32_t JIS_EXEC_WIDTH = 8504;
119 const uint32_t JIS_EXEC_HEIGHT = 12992;
120 const uint32_t PHOTO_5R_WIDTH = 5000;
121 const uint32_t PHOTO_5R_HEIGHT = 7000;
122 const uint32_t PHOTO_4R_WIDTH = 4000;
123 const uint32_t PHOTO_4R_HEIGHT = 6000;
124 const uint32_t NA_GOVT_LETTER_8IN_WIDTH = 8000;
125 const uint32_t NA_GOVT_LETTER_8IN_HEIGHT = 10000;
126 const uint32_t NA_LEDGER_11IN_WIDTH = 11000;
127 const uint32_t NA_LEDGER_11IN_HEIGHT = 17000;
128 const uint32_t JPN_HAGAKI_WIDTH = 3940;
129 const uint32_t JPN_HAGAKI_HEIGHT = 5830;
130 const uint32_t OM_SDC_PHOTO_WIDTH = 3504;
131 const uint32_t OM_SDC_PHOTO_HEIGHT = 4685;
132 const uint32_t OM_CARD_WIDTH = 2126;
133 const uint32_t OM_CARD_HEIGHT = 3386;
134 const uint32_t OE_PHOTO_L_WIDTH = 3500;
135 const uint32_t OE_PHOTO_L_HEIGHT = 5000;
136 const uint32_t B_TABLOID_L_WIDTH = 11000;
137 const uint32_t B_TABLOID_L_HEIGHT = 17000;
138 const uint32_t NA_ARCH_A_WIDTH = 9000;
139 const uint32_t NA_ARCH_A_HEIGHT = 12000;
140 const uint32_t NA_ARCH_B_WIDTH = 12000;
141 const uint32_t NA_ARCH_B_HEIGHT = 18000;
142 const uint32_t NA_ARCH_C_WIDTH = 18000;
143 const uint32_t NA_ARCH_C_HEIGHT = 24000;
144 const uint32_t NA_ARCH_D_WIDTH = 24000;
145 const uint32_t NA_ARCH_D_HEIGHT = 36000;
146 const uint32_t NA_ARCH_E_WIDTH = 36000;
147 const uint32_t NA_ARCH_E_HEIGHT = 48000;
148 const uint32_t JPN_CHOU2_WIDTH = 4374;
149 const uint32_t JPN_CHOU2_HEIGHT = 5748;
150 const uint32_t JPN_CHOU3_WIDTH = 4724;
151 const uint32_t JPN_CHOU3_HEIGHT = 9252;
152 const uint32_t JPN_CHOU4_WIDTH = 9252;
153 const uint32_t JPN_CHOU4_HEIGHT = 8071;
154 const uint32_t NA_FOOLSCAP_WIDTH = 8000;
155 const uint32_t NA_FOOLSCAP_HEIGHT = 13000;
156 const uint32_t NA_INDEX_3X5_WIDTH = 3000;
157 const uint32_t NA_INDEX_3X5_HEIGHT = 5000;
158 const uint32_t NA_INDEX_5X8_WIDTH = 5000;
159 const uint32_t NA_INDEX_5X8_HEIGHT = 8000;
160 const uint32_t PRC1_WIDTH = 4015;
161 const uint32_t PRC1_HEIGHT = 6496;
162 const uint32_t PRC2_WIDTH = 4015;
163 const uint32_t PRC2_HEIGHT = 6929;
164 const uint32_t PRC4_WIDTH = 4330;
165 const uint32_t PRC4_HEIGHT = 8189;
166 const uint32_t PRC6_WIDTH = 4724;
167 const uint32_t PRC6_HEIGHT = 12599;
168 const uint32_t PRC7_WIDTH = 6299;
169 const uint32_t PRC7_HEIGHT = 9055;
170 const uint32_t PRC8_WIDTH = 4724;
171 const uint32_t PRC8_HEIGHT = 12165;
172 const uint32_t PRC16_WIDTH = 5749;
173 const uint32_t PRC16_HEIGHT = 8465;
174 }
175
176 namespace OHOS::Print {
177 std::map<PAGE_SIZE_ID, std::shared_ptr<PrintPageSize>> PrintPageSize::pageSize_;
178 std::mutex PrintPageSize::pageSizeMapMutex;
179
UpdatePageSizeMapOther(std::map<PAGE_SIZE_ID,std::shared_ptr<PrintPageSize>> & pageSize_)180 void UpdatePageSizeMapOther(std::map<PAGE_SIZE_ID, std::shared_ptr<PrintPageSize>>& pageSize_)
181 {
182 pageSize_["NA_ARCH_A"] =
183 std::make_shared<PrintPageSize>("NA_ARCH_A", "na_arch-a_9x12in", NA_ARCH_A_WIDTH, NA_ARCH_A_HEIGHT);
184 pageSize_["NA_ARCH_B"] =
185 std::make_shared<PrintPageSize>("NA_ARCH_B", "na_arch-b_12x18in", NA_ARCH_B_WIDTH, NA_ARCH_B_HEIGHT);
186 pageSize_["NA_ARCH_C"] =
187 std::make_shared<PrintPageSize>("NA_ARCH_C", "na_arch-c_18x24in", NA_ARCH_C_WIDTH, NA_ARCH_C_HEIGHT);
188 pageSize_["NA_ARCH_D"] =
189 std::make_shared<PrintPageSize>("NA_ARCH_D", "na_arch-d_24x36in", NA_ARCH_D_WIDTH, NA_ARCH_D_HEIGHT);
190 pageSize_["NA_ARCH_E"] =
191 std::make_shared<PrintPageSize>("NA_ARCH_E", "na_arch-e_36x48in", NA_ARCH_E_WIDTH, NA_ARCH_E_HEIGHT);
192 pageSize_["NA_FOOLSCAP"] =
193 std::make_shared<PrintPageSize>("NA_FOOLSCAP", "na_foolscap_8.5x13in", NA_FOOLSCAP_WIDTH, NA_FOOLSCAP_HEIGHT);
194 pageSize_["NA_LEGAL"] =
195 std::make_shared<PrintPageSize>("NA_LEGAL", "na_legal_8.5x14in", LEGAL_WIDTH, LEGAL_HEIGHT);
196 pageSize_["NA_LETTER"] =
197 std::make_shared<PrintPageSize>("NA_LETTER", "na_letter_8.5x11in", LETTER_WIDTH, LETTER_HEIGHT);
198 pageSize_["NA_INDEX_3X5"] =
199 std::make_shared<PrintPageSize>("NA_INDEX_3X5", "na_index-3x5_3x5in", NA_INDEX_3X5_WIDTH, NA_INDEX_3X5_HEIGHT);
200 pageSize_["NA_INDEX_5X8"] =
201 std::make_shared<PrintPageSize>("NA_INDEX_5X8", "na_index-5x8_5x8in", NA_INDEX_5X8_WIDTH, NA_INDEX_5X8_HEIGHT);
202 pageSize_["NA_INDEX_5X7"] =
203 std::make_shared<PrintPageSize>("NA_INDEX_5X7", "na_5x7_5x7in", PHOTO_5R_WIDTH, PHOTO_5R_HEIGHT);
204 pageSize_["NA_INDEX_4X6"] =
205 std::make_shared<PrintPageSize>("NA_INDEX_4X6", "na_index-4x6_4x6in", PHOTO_4R_WIDTH, PHOTO_4R_HEIGHT);
206 pageSize_["NA_GOVT_LETTER"] = std::make_shared<PrintPageSize>(
207 "NA_GOVT_LETTER", "na_govt-letter_8x10in", NA_GOVT_LETTER_8IN_WIDTH, NA_GOVT_LETTER_8IN_HEIGHT);
208 pageSize_["NA_LEDGER"] = std::make_shared<PrintPageSize>(
209 "NA_LEDGER", "na_ledger_11x17in", NA_LEDGER_11IN_WIDTH, NA_LEDGER_11IN_HEIGHT);
210 pageSize_["OM_DSC_PHOTO"] = std::make_shared<PrintPageSize>(
211 "OM_DSC_PHOTO", "om_dsc-photo_89x119mm", OM_SDC_PHOTO_WIDTH, OM_SDC_PHOTO_HEIGHT);
212 pageSize_["OM_CARD"] = std::make_shared<PrintPageSize>(
213 "OM_CARD", "om_card_54x86mm", OM_CARD_WIDTH, OM_CARD_HEIGHT);
214 pageSize_["OE_PHOTO_L"] = std::make_shared<PrintPageSize>(
215 "OE_PHOTO_L", "oe_photo-l_3.5x5in", OE_PHOTO_L_WIDTH, OE_PHOTO_L_HEIGHT);
216 pageSize_["NA_TABLOID"] = std::make_shared<PrintPageSize>(
217 "NA_TABLOID", "B_TABLOID", B_TABLOID_L_WIDTH, B_TABLOID_L_HEIGHT);
218 }
219
UpdatePageSizeMapPRC(std::map<PAGE_SIZE_ID,std::shared_ptr<PrintPageSize>> & pageSize_)220 void UpdatePageSizeMapPRC(std::map<PAGE_SIZE_ID, std::shared_ptr<PrintPageSize>>& pageSize_)
221 {
222 pageSize_["PRC1"] =
223 std::make_shared<PrintPageSize>("PRC1", "prc_1_102x165mm", PRC1_WIDTH, PRC1_HEIGHT);
224 pageSize_["PRC2"] =
225 std::make_shared<PrintPageSize>("PRC2", "prc_2_102x176mm", PRC2_WIDTH, PRC2_HEIGHT);
226 pageSize_["PRC4"] =
227 std::make_shared<PrintPageSize>("PRC4", "prc_4_110x208mm", PRC4_WIDTH, PRC4_HEIGHT);
228 pageSize_["PRC6"] =
229 std::make_shared<PrintPageSize>("PRC6", "prc_6_120x320mm", PRC6_WIDTH, PRC6_HEIGHT);
230 pageSize_["PRC7"] =
231 std::make_shared<PrintPageSize>("PRC7", "prc_7_160x230mm", PRC7_WIDTH, PRC7_HEIGHT);
232 pageSize_["PRC8"] =
233 std::make_shared<PrintPageSize>("PRC8", "prc_8_120x309mm", PRC8_WIDTH, PRC8_HEIGHT);
234 pageSize_["PRC16"] =
235 std::make_shared<PrintPageSize>("PRC16", "prc_16k_146x215mm", PRC16_WIDTH, PRC16_HEIGHT);
236 pageSize_["ROC_16K"] = std::make_shared<PrintPageSize>(
237 "ROC_16K", "roc_16k_7.75x10.75in", ROC_16K_WIDTH, ROC_16K_HEIGHT);
238 pageSize_["ROC_8K"] = std::make_shared<PrintPageSize>(
239 "ROC_8K", "roc_8k_10.75x15.5in", ROC_8K_WIDTH, ROC_8K_HEIGHT);
240 }
241
UpdatePageSizeMapIso(std::map<PAGE_SIZE_ID,std::shared_ptr<PrintPageSize>> & pageSize_)242 void UpdatePageSizeMapIso(std::map<PAGE_SIZE_ID, std::shared_ptr<PrintPageSize>>& pageSize_)
243 {
244 pageSize_["ISO_A0"] =
245 std::make_shared<PrintPageSize>("ISO_A0", "iso_a0_841x1189mm", ISO_A0_WIDTH, ISO_A0_HEIGHT);
246 pageSize_["ISO_A1"] =
247 std::make_shared<PrintPageSize>("ISO_A1", "iso_a1_594x841mm", ISO_A1_WIDTH, ISO_A1_HEIGHT);
248 pageSize_["ISO_A2"] =
249 std::make_shared<PrintPageSize>("ISO_A2", "iso_a2_420x594mm", ISO_A2_WIDTH, ISO_A2_HEIGHT);
250 pageSize_["ISO_A3"] =
251 std::make_shared<PrintPageSize>("ISO_A3", "iso_a3_297x420mm", ISO_A3_WIDTH, ISO_A3_HEIGHT);
252 pageSize_["ISO_A4"] =
253 std::make_shared<PrintPageSize>("ISO_A4", "iso_a4_210x297mm", ISO_A4_WIDTH, ISO_A4_HEIGHT);
254 pageSize_["ISO_A5"] =
255 std::make_shared<PrintPageSize>("ISO_A5", "iso_a5_148x210mm", ISO_A5_WIDTH, ISO_A5_HEIGHT);
256 pageSize_["ISO_A6"] =
257 std::make_shared<PrintPageSize>("ISO_A6", "iso_a6_105x148mm", ISO_A6_WIDTH, ISO_A6_HEIGHT);
258 pageSize_["ISO_A7"] =
259 std::make_shared<PrintPageSize>("ISO_A7", "iso_a7_74x105mm", ISO_A7_WIDTH, ISO_A7_HEIGHT);
260 pageSize_["ISO_A8"] =
261 std::make_shared<PrintPageSize>("ISO_A8", "iso_a8_52x74mm", ISO_A8_WIDTH, ISO_A8_HEIGHT);
262 pageSize_["ISO_A9"] =
263 std::make_shared<PrintPageSize>("ISO_A9", "iso_a9_37x52mm", ISO_A9_WIDTH, ISO_A9_HEIGHT);
264 pageSize_["ISO_A10"] =
265 std::make_shared<PrintPageSize>("ISO_A10", "iso_a10_26x37mm", ISO_A10_WIDTH, ISO_A10_HEIGHT);
266 pageSize_["ISO_B0"] =
267 std::make_shared<PrintPageSize>("ISO_B0", "iso_b0_1000x1414mm", ISO_B0_WIDTH, ISO_B0_HEIGHT);
268 pageSize_["ISO_B1"] =
269 std::make_shared<PrintPageSize>("ISO_B1", "iso_b1_707x1000mm", ISO_B1_WIDTH, ISO_B1_HEIGHT);
270 pageSize_["ISO_B2"] =
271 std::make_shared<PrintPageSize>("ISO_B2", "iso_b2_500x707mm", ISO_B2_WIDTH, ISO_B2_HEIGHT);
272 pageSize_["ISO_B3"] =
273 std::make_shared<PrintPageSize>("ISO_B3", "iso_b3_353x500mm", ISO_B3_WIDTH, ISO_B3_HEIGHT);
274 pageSize_["ISO_B4"] =
275 std::make_shared<PrintPageSize>("ISO_B4", "iso_b4_250x353mm", ISO_B4_WIDTH, ISO_B4_HEIGHT);
276 pageSize_["ISO_B5"] =
277 std::make_shared<PrintPageSize>("ISO_B5", "iso_b5_176x250mm", ISO_B5_WIDTH, ISO_B5_HEIGHT);
278 pageSize_["ISO_B6"] =
279 std::make_shared<PrintPageSize>("ISO_B6", "iso_b6_125x176mm", ISO_B6_WIDTH, ISO_B6_HEIGHT);
280 pageSize_["ISO_B7"] =
281 std::make_shared<PrintPageSize>("ISO_B7", "iso_b7_88x125mm", ISO_B7_WIDTH, ISO_B7_HEIGHT);
282 pageSize_["ISO_B8"] =
283 std::make_shared<PrintPageSize>("ISO_B8", "iso_b8_62x88mm", ISO_B8_WIDTH, ISO_B8_HEIGHT);
284 pageSize_["ISO_B9"] =
285 std::make_shared<PrintPageSize>("ISO_B9", "iso_b9_44x62mm", ISO_B9_WIDTH, ISO_B9_HEIGHT);
286 pageSize_["ISO_B10"] =
287 std::make_shared<PrintPageSize>("ISO_B10", "iso_b10_31x44mm", ISO_B10_WIDTH, ISO_B10_HEIGHT);
288 }
289
UpdatePageSizeMapIsoEnv(std::map<PAGE_SIZE_ID,std::shared_ptr<PrintPageSize>> & pageSize_)290 void UpdatePageSizeMapIsoEnv(std::map<PAGE_SIZE_ID, std::shared_ptr<PrintPageSize>>& pageSize_)
291 {
292 pageSize_["ISO_C0"] =
293 std::make_shared<PrintPageSize>("ISO_C0", "iso_c0_917x1297mm", ISO_C0_WIDTH, ISO_C0_HEIGHT);
294 pageSize_["ISO_C1"] =
295 std::make_shared<PrintPageSize>("ISO_C1", "iso_c1_648x917mm", ISO_C1_WIDTH, ISO_C1_HEIGHT);
296 pageSize_["ISO_C2"] =
297 std::make_shared<PrintPageSize>("ISO_C2", "iso_c2_458x648mm", ISO_C2_WIDTH, ISO_C2_HEIGHT);
298 pageSize_["ISO_C3"] =
299 std::make_shared<PrintPageSize>("ISO_C3", "iso_c3_324x458mm", ISO_C3_WIDTH, ISO_C3_HEIGHT);
300 pageSize_["ISO_C4"] =
301 std::make_shared<PrintPageSize>("ISO_C4", "iso_c4_229x324mm", ISO_C4_WIDTH, ISO_C4_HEIGHT);
302 pageSize_["ISO_C5"] =
303 std::make_shared<PrintPageSize>("ISO_C5", "iso_c5_162x229mm", ISO_C5_WIDTH, ISO_C5_HEIGHT);
304 pageSize_["ISO_C6"] =
305 std::make_shared<PrintPageSize>("ISO_C6", "iso_c6_114x162mm", ISO_C6_WIDTH, ISO_C6_HEIGHT);
306 pageSize_["ISO_C7"] =
307 std::make_shared<PrintPageSize>("ISO_C7", "iso_c7_81x114mm", ISO_C7_WIDTH, ISO_C7_HEIGHT);
308 pageSize_["ISO_C8"] =
309 std::make_shared<PrintPageSize>("ISO_C8", "iso_c8_57x81mm", ISO_C8_WIDTH, ISO_C8_HEIGHT);
310 pageSize_["ISO_C9"] =
311 std::make_shared<PrintPageSize>("ISO_C9", "iso_c9_40x57mm", ISO_C9_WIDTH, ISO_C9_HEIGHT);
312 pageSize_["ISO_C10"] =
313 std::make_shared<PrintPageSize>("ISO_C10", "iso_c10_28x40mm", ISO_C10_WIDTH, ISO_C10_HEIGHT);
314 pageSize_["ISO_DL"] =
315 std::make_shared<PrintPageSize>("ISO_DL", "iso_dl_110x220mm", ISO_DL_WIDTH, ISO_DL_HEIGHT);
316 }
317
UpdatePageSizeMapJIS(std::map<PAGE_SIZE_ID,std::shared_ptr<PrintPageSize>> & pageSize_)318 void UpdatePageSizeMapJIS(std::map<PAGE_SIZE_ID, std::shared_ptr<PrintPageSize>>& pageSize_)
319 {
320 pageSize_["JIS_B0"] =
321 std::make_shared<PrintPageSize>("JIS_B0", "jis_b0_1030x1456mm", JIS_B0_WIDTH, JIS_B0_HEIGHT);
322 pageSize_["JIS_B1"] =
323 std::make_shared<PrintPageSize>("JIS_B1", "jis_b1_728x1030mm", JIS_B1_WIDTH, JIS_B1_HEIGHT);
324 pageSize_["JIS_B2"] =
325 std::make_shared<PrintPageSize>("JIS_B2", "jis_b2_515x728mm", JIS_B2_WIDTH, JIS_B2_HEIGHT);
326 pageSize_["JIS_B3"] =
327 std::make_shared<PrintPageSize>("JIS_B3", "jis_b3_364x515mm", JIS_B3_WIDTH, JIS_B3_HEIGHT);
328 pageSize_["JIS_B4"] =
329 std::make_shared<PrintPageSize>("JIS_B4", "jis_b4_257x364mm", JIS_B4_WIDTH, JIS_B4_HEIGHT);
330 pageSize_["JIS_B5"] =
331 std::make_shared<PrintPageSize>("JIS_B5", "jis_b5_182x257mm", JIS_B5_WIDTH, JIS_B5_HEIGHT);
332 pageSize_["JIS_B6"] =
333 std::make_shared<PrintPageSize>("JIS_B6", "jis_b6_128x182mm", JIS_B6_WIDTH, JIS_B6_HEIGHT);
334 pageSize_["JIS_B7"] =
335 std::make_shared<PrintPageSize>("JIS_B7", "jis_b7_91x128mm", JIS_B7_WIDTH, JIS_B7_HEIGHT);
336 pageSize_["JIS_B8"] =
337 std::make_shared<PrintPageSize>("JIS_B8", "jis_b8_64x91mm", JIS_B8_WIDTH, JIS_B8_HEIGHT);
338 pageSize_["JIS_B9"] =
339 std::make_shared<PrintPageSize>("JIS_B9", "jis_b9_45x64mm", JIS_B9_WIDTH, JIS_B9_HEIGHT);
340 pageSize_["JIS_B10"] =
341 std::make_shared<PrintPageSize>("JIS_B10", "jis_b10_32x45mm", JIS_B10_WIDTH, JIS_B10_HEIGHT);
342 pageSize_["JIS_EXEC"] =
343 std::make_shared<PrintPageSize>("JIS_EXEC", "jis_exec_216x330mm", JIS_EXEC_WIDTH, JIS_EXEC_HEIGHT);
344 pageSize_["JPN_CHOU2"] =
345 std::make_shared<PrintPageSize>("JPN_CHOU2", "jpn_chou2_111.1x146mm", JPN_CHOU2_WIDTH, JPN_CHOU2_HEIGHT);
346 pageSize_["JPN_CHOU3"] =
347 std::make_shared<PrintPageSize>("JPN_CHOU3", "jpn_chou3_120x235mm", JPN_CHOU3_WIDTH, JPN_CHOU3_HEIGHT);
348 pageSize_["JPN_CHOU4"] =
349 std::make_shared<PrintPageSize>("JPN_CHOU4", "jpn_chou4_90x205mm", JPN_CHOU4_WIDTH, JPN_CHOU4_HEIGHT);
350 pageSize_["JPN_HAGAKI"] = std::make_shared<PrintPageSize>(
351 "JPN_HAGAKI", "jpn_hagaki_100x148mm", JPN_HAGAKI_WIDTH, JPN_HAGAKI_HEIGHT);
352 }
353
BuildPageSizeMap()354 void PrintPageSize::BuildPageSizeMap()
355 {
356 UpdatePageSizeMapIso(pageSize_);
357 UpdatePageSizeMapIsoEnv(pageSize_);
358 UpdatePageSizeMapPRC(pageSize_);
359 UpdatePageSizeMapOther(pageSize_);
360 UpdatePageSizeMapJIS(pageSize_);
361
362 PRINT_HILOGD("BuildPageSizeMap count = %{public}zu", pageSize_.size());
363 }
364
MatchPageSize(const std::string & pageString)365 PAGE_SIZE_ID PrintPageSize::MatchPageSize(const std::string& pageString)
366 {
367 std::lock_guard<std::mutex> lock(pageSizeMapMutex);
368 if (pageSize_.size() == 0) {
369 BuildPageSizeMap();
370 }
371 for (auto& item : pageSize_) {
372 auto pageSizeItem = item.second;
373 if (pageSizeItem == nullptr) {
374 continue;
375 }
376 if (strcmp(pageSizeItem->GetName().c_str(), pageString.c_str()) == 0) {
377 return item.first;
378 }
379 }
380 return "";
381 }
382
FindPageSizeById(const PAGE_SIZE_ID & id,PrintPageSize & pageSize)383 bool PrintPageSize::FindPageSizeById(const PAGE_SIZE_ID &id, PrintPageSize& pageSize)
384 {
385 std::lock_guard<std::mutex> lock(pageSizeMapMutex);
386 if (pageSize_.size() == 0) {
387 BuildPageSizeMap();
388 }
389 auto iter = pageSize_.find(id);
390 if (iter == pageSize_.end() || iter->second == nullptr) {
391 return false;
392 }
393 pageSize = *(iter->second);
394 return true;
395 }
396
PrintPageSize()397 PrintPageSize::PrintPageSize() : id_(""), name_("PrintPageSize"), width_(0), height_(0)
398 {}
399
PrintPageSize(PAGE_SIZE_ID id,DiscretePageName name,uint32_t width,uint32_t height)400 PrintPageSize::PrintPageSize(PAGE_SIZE_ID id, DiscretePageName name, uint32_t width, uint32_t height)
401 {
402 id_ = id;
403 name_ = name;
404 width_ = width;
405 height_ = height;
406 }
407
PrintPageSize(const PrintPageSize & right)408 PrintPageSize::PrintPageSize(const PrintPageSize &right)
409 {
410 id_ = right.id_;
411 name_ = right.name_;
412 width_ = right.width_;
413 height_ = right.height_;
414 }
415
operator =(const PrintPageSize & right)416 PrintPageSize &PrintPageSize::operator=(const PrintPageSize &right)
417 {
418 if (this != &right) {
419 id_ = right.id_;
420 name_ = right.name_;
421 width_ = right.width_;
422 height_ = right.height_;
423 }
424 return *this;
425 }
426
operator ==(const PrintPageSize & right)427 bool PrintPageSize::operator==(const PrintPageSize &right)
428 {
429 return id_ == right.id_;
430 }
431
~PrintPageSize()432 PrintPageSize::~PrintPageSize()
433 {}
434
Reset()435 void PrintPageSize::Reset()
436 {
437 SetId("");
438 SetName("");
439 SetWidth(0);
440 SetHeight(0);
441 }
442
SetId(const std::string & id)443 void PrintPageSize::SetId(const std::string &id)
444 {
445 id_ = id;
446 }
447
SetName(const std::string & name)448 void PrintPageSize::SetName(const std::string &name)
449 {
450 name_ = name;
451 }
452
SetWidth(uint32_t width)453 void PrintPageSize::SetWidth(uint32_t width)
454 {
455 width_ = width;
456 }
457
SetHeight(uint32_t height)458 void PrintPageSize::SetHeight(uint32_t height)
459 {
460 height_ = height;
461 }
462
GetId() const463 const std::string &PrintPageSize::GetId() const
464 {
465 return id_;
466 }
467
GetName() const468 const std::string &PrintPageSize::GetName() const
469 {
470 return name_;
471 }
472
GetWidth() const473 uint32_t PrintPageSize::GetWidth() const
474 {
475 return width_;
476 }
477
GetHeight() const478 uint32_t PrintPageSize::GetHeight() const
479 {
480 return height_;
481 }
482
ReadFromParcel(Parcel & parcel)483 void PrintPageSize::ReadFromParcel(Parcel &parcel)
484 {
485 SetId(parcel.ReadString());
486 SetName(parcel.ReadString());
487 SetWidth(parcel.ReadUint32());
488 SetHeight(parcel.ReadUint32());
489 }
490
Marshalling(Parcel & parcel) const491 bool PrintPageSize::Marshalling(Parcel &parcel) const
492 {
493 parcel.WriteString(GetId());
494 parcel.WriteString(GetName());
495 parcel.WriteUint32(GetWidth());
496 parcel.WriteUint32(GetHeight());
497 return true;
498 }
499
Unmarshalling(Parcel & parcel)500 std::shared_ptr<PrintPageSize> PrintPageSize::Unmarshalling(Parcel &parcel)
501 {
502 auto nativeObj = std::make_shared<PrintPageSize>();
503 nativeObj->ReadFromParcel(parcel);
504 return nativeObj;
505 }
506
Dump()507 void PrintPageSize::Dump()
508 {
509 PRINT_HILOGD("id_ = %{public}s", id_.c_str());
510 PRINT_HILOGD("name_ = %{public}s", name_.c_str());
511 PRINT_HILOGD("width_ = %{public}d", width_);
512 PRINT_HILOGD("height_ = %{public}d", height_);
513 }
514 } // namespace OHOS::Print
515