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