• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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