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