1/* 2 * Copyright (c) 2023-2023 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 16import type common from '@ohos.app.ability.common'; 17import { StringUtil } from '../utils/StringUtil'; 18const ISO_A3_WIDTH: number = 11690; 19const ISO_A3_HEIGHT: number = 16540; 20const ISO_A4_WIDTH: number = 8268; 21const ISO_A4_HEIGHT: number = 11692; 22const ISO_A5_WIDTH: number = 5830; 23const ISO_A5_HEIGHT: number = 8270; 24const ISO_C5_WIDTH: number = 6380; 25const ISO_C5_HEIGHT: number = 9020; 26const ISO_DL_WIDTH: number = 4330; 27const ISO_DL_HEIGHT: number = 8660; 28const LEGAL_WIDTH: number = 8500; 29const LEGAL_HEIGHT: number = 14000; 30const LETTER_WIDTH: number = 4000; 31const LETTER_HEIGHT: number = 6000; 32const JIS_B4_WIDTH: number = 10119; 33const JIS_B4_HEIGHT: number = 14331; 34const JIS_B5_WIDTH: number = 7165; 35const JIS_B5_HEIGHT: number = 10118; 36const PHOTO_5R_WIDTH: number = 5000; 37const PHOTO_5R_HEIGHT: number = 7000; 38const PHOTO_4R_WIDTH: number = 4000; 39const PHOTO_4R_HEIGHT: number = 6000; 40const NA_GOVT_LETTER_8IN_WIDTH: number = 8000; 41const NA_GOVT_LETTER_8IN_HEIGHT: number = 10000; 42const NA_LEDGER_11IN_WIDTH: number = 11000; 43const NA_LEDGER_11IN_HEIGHT: number = 17000; 44const JPN_HAGAKI_WIDTH: number = 3940; 45const JPN_HAGAKI_HEIGHT: number = 5830; 46const OM_SDC_PHOTO_WIDTH: number = 3504; 47const OM_SDC_PHOTO_HEIGHT: number = 4685; 48const OM_CARD_WIDTH: number = 2126; 49const OM_CARD_HEIGHT: number = 3386; 50const OE_PHOTO_L_WIDTH: number = 3500; 51const OE_PHOTO_L_HEIGHT: number = 5000; 52const INT_DL_ENVELOPE_WIDTH: number = 4330; 53const INT_DL_ENVELOPE_HEIGHT: number = 8660; 54const B_TABLOID_L_WIDTH: number = 11000; 55const B_TABLOID_L_HEIGHT: number = 17000; 56 57const ISO_A3_WIDTH_MM: number = 297; 58const ISO_A3_HEIGHT_MM: number = 420; 59const ISO_A4_WIDTH_MM: number = 210; 60const ISO_A4_HEIGHT_MM: number = 297; 61const ISO_A5_WIDTH_MM: number = 148; 62const ISO_A5_HEIGHT_MM: number = 210; 63const ISO_C5_WIDTH_MM: number = 162; 64const ISO_C5_HEIGHT_MM: number = 229; 65const ISO_DL_WIDTH_MM: number = 110; 66const ISO_DL_HEIGHT_MM: number = 220; 67const LEGAL_WIDTH_MM: number = 216; 68const LEGAL_HEIGHT_MM: number = 356; 69const LETTER_WIDTH_MM: number = 216; 70const LETTER_HEIGHT_MM: number = 279; 71const JIS_B4_WIDTH_MM: number = 257; 72const JIS_B4_HEIGHT_MM: number = 364; 73const JIS_B5_WIDTH_MM: number = 182; 74const JIS_B5_HEIGHT_MM: number = 257; 75const PHOTO_5R_WIDTH_MM: number = 127; 76const PHOTO_5R_HEIGHT_MM: number = 178; 77const PHOTO_4R_WIDTH_MM: number = 102; 78const PHOTO_4R_HEIGHT_MM: number = 152; 79const NA_GOVT_LETTER_8IN_WIDTH_MM: number = 203; 80const NA_GOVT_LETTER_8IN_HEIGHT_MM: number = 267; 81const NA_LEDGER_11IN_WIDTH_MM: number = 279; 82const NA_LEDGER_11IN_HEIGHT_MM: number = 432; 83const JPN_HAGAKI_WIDTH_MM: number = 100; 84const JPN_HAGAKI_HEIGHT_MM: number = 148; 85const OM_SDC_PHOTO_WIDTH_MM: number = 89; 86const OM_SDC_PHOTO_HEIGHT_MM: number = 119; 87const OM_CARD_WIDTH_MM: number = 54; 88const OM_CARD_HEIGHT_MM: number = 86; 89const OE_PHOTO_L_WIDTH_MM: number = 89; 90const OE_PHOTO_L_HEIGHT_MM: number = 127; 91const INT_DL_ENVELOPE_WIDTH_MM: number = 110; 92const INT_DL_ENVELOPE_HEIGHT_MM: number = 220; 93const B_TABLOID_L_WIDTH_MM: number = 279; 94const B_TABLOID_L_HEIGHT_MM: number = 432; 95 96enum MediaSizeCode { 97 US_LETTER = 2, 98 US_LEGAL = 3, 99 B_TABLOID = 6, 100 US_GOVERNMENT_LETTER = 7, 101 LEDGER = 11, 102 ISO_A5 = 25, 103 ISO_A4 = 26, 104 ISO_A3 = 27, 105 JIS_B5 = 45, 106 JIS_B4 = 46, 107 JPN_HAGAKI_PC = 71, 108 INDEX_CARD_4X6 = 74, 109 INT_DL_ENVELOPE = 90, 110 INDEX_CARD_5X7 = 122, 111 ISO_C5 = 183, 112 ISO_DL = 184, 113 PHOTO_89X119 = 302, 114 CARD_54X86 = 303, 115 OE_PHOTO_L = 304, 116} 117 118export class MediaSize { 119 private static readonly PREVIEW_POINTS_IN_INCH = 72; 120 private static readonly MILS_PER_INCH:number = 1000; 121 public static readonly THREE_HUNDRED_DPI: number = 300; 122 123 private _id: string; 124 private _name: string; 125 private _label: string; 126 private _widthMils: number; 127 private _heightMils: number; 128 private _realWidth: number; 129 private _realHeight: number; 130 131 constructor(id: string, name: string, label: string, widthMils: number, heightMils: number, realWidth: number, realHeight: number, 132 context: common.Context) { 133 this._id = id; 134 this._name = name; 135 this._widthMils = widthMils; 136 this._heightMils = heightMils; 137 this._realWidth = realWidth; 138 this._realHeight = realHeight; 139 this._label = MediaSize.getLabel(label, realWidth, realHeight, context) 140 } 141 142 public static getLabel(label: string, realWidth: number, realHeight: number, context: common.Context): string { 143 return label+' '+StringUtil.getStringByName('media_size_suffix', context, realWidth,realHeight) 144 } 145 146 get id(): string { 147 return this._id; 148 } 149 150 get name(): string { 151 return this._name; 152 } 153 154 get widthMils(): number { 155 return this._widthMils; 156 } 157 158 get heightMils(): number { 159 return this._heightMils; 160 } 161 162 get realWidth(): number { 163 return this._realWidth; 164 } 165 166 get realHeight(): number { 167 return this._realHeight; 168 } 169 170 get label(): string { 171 return this._label; 172 } 173 174 set label(label: string ){ 175 this._label = label; 176 } 177 178 /** 179 * get pixel by media size 180 * 181 * @param code media size code 182 */ 183 public getPixelMediaSize(): Size { 184 let width = this.convertMilesToPixel(this.widthMils); 185 let height = this.convertMilesToPixel(this.heightMils); 186 return new Size(width, height); 187 } 188 189 private convertMilesToPixel(mils: number): number { 190 return Math.round(mils * MediaSize.PREVIEW_POINTS_IN_INCH / MediaSize.MILS_PER_INCH); 191 } 192 193 public get300PixelMediaSize() { 194 let size = this.getPixelMediaSize(); 195 let zoom = (MediaSize.THREE_HUNDRED_DPI / MediaSize.PREVIEW_POINTS_IN_INCH).toFixed(2) 196 return { 197 width: Math.round(size.width * parseFloat(zoom)), 198 height: Math.round(size.height * parseFloat(zoom)) 199 } 200 } 201} 202 203export class Size { 204 private readonly _width: number; 205 private readonly _height: number; 206 207 constructor(width: number, height: number) { 208 this._width = width; 209 this._height = height; 210 } 211 212 get width(): number { 213 return this._width; 214 } 215 216 get height(): number { 217 return this._height; 218 } 219} 220 221export class MediaSizeHelper { 222 public static ISO_A3: MediaSize; 223 public static ISO_A4: MediaSize; 224 public static ISO_A5: MediaSize; 225 public static ISO_C5: MediaSize; 226 public static ISO_DL: MediaSize; 227 public static LEGAL: MediaSize; 228 public static LETTER: MediaSize; 229 public static JIS_B5: MediaSize; 230 public static JIS_B4: MediaSize; 231 public static PHOTO_5x7: MediaSize; 232 public static PHOTO_4x6: MediaSize; 233 public static NA_GOVT_LETTER: MediaSize; 234 public static NA_LEDGER_11X17: MediaSize; 235 public static JPN_HAGAKI: MediaSize; 236 public static OM_DSC_PHOTO: MediaSize; 237 public static OM_CARD: MediaSize; 238 public static OE_PHOTO_L: MediaSize; 239 public static INT_DL_ENVELOPE: MediaSize; 240 public static B_TABLOID: MediaSize; 241 242 public static readonly sCodeToStringMap: Map<number, MediaSize> = new Map(); 243 private constructor() { 244 } 245 246 static init(context: common.Context): void { 247 MediaSizeHelper.ISO_A3 = new MediaSize(MediaSizeCode.ISO_A3.toString(), 'iso_a3_297x420mm', 'A3', ISO_A3_WIDTH, ISO_A3_HEIGHT, 248 ISO_A3_WIDTH_MM, ISO_A3_HEIGHT_MM, context); 249 MediaSizeHelper.ISO_A4 = new MediaSize(MediaSizeCode.ISO_A4.toString(), 'iso_a4_210x297mm', 'A4', ISO_A4_WIDTH, ISO_A4_HEIGHT, 250 ISO_A4_WIDTH_MM, ISO_A4_HEIGHT_MM, context); 251 MediaSizeHelper.ISO_A5 = new MediaSize(MediaSizeCode.ISO_A5.toString(), 'iso_a5_148x210mm', 'A5', ISO_A5_WIDTH, ISO_A5_HEIGHT, 252 ISO_A5_WIDTH_MM, ISO_A5_HEIGHT_MM, context); 253 MediaSizeHelper.ISO_C5 = new MediaSize(MediaSizeCode.ISO_C5.toString(), 'iso_c5_162x229mm', StringUtil.getStringByName('ISO_C5', context), 254 ISO_C5_WIDTH, ISO_C5_HEIGHT, ISO_C5_WIDTH_MM, ISO_C5_HEIGHT_MM, context); 255 MediaSizeHelper.ISO_DL = new MediaSize(MediaSizeCode.ISO_DL.toString(), 'iso_dl_110x220mm', StringUtil.getStringByName('ISO_DL', context), 256 ISO_DL_WIDTH, ISO_DL_HEIGHT, ISO_DL_WIDTH_MM, ISO_DL_HEIGHT_MM, context); 257 MediaSizeHelper.LEGAL = new MediaSize(MediaSizeCode.US_LEGAL.toString(), 'na_legal_8.5x14in', 'Legal', LEGAL_WIDTH, LEGAL_HEIGHT, 258 LEGAL_WIDTH_MM, LEGAL_HEIGHT_MM, context); 259 MediaSizeHelper.LETTER = new MediaSize(MediaSizeCode.US_LETTER.toString(), 'na_letter_8.5x11in', 'Letter', LETTER_WIDTH, LETTER_HEIGHT, 260 LETTER_WIDTH_MM, LETTER_HEIGHT_MM, context); 261 MediaSizeHelper.JIS_B5 = new MediaSize(MediaSizeCode.JIS_B5.toString(), 'jis_b5_182x257mm', 'B5', JIS_B5_WIDTH, JIS_B5_HEIGHT, 262 JIS_B5_WIDTH_MM, JIS_B5_HEIGHT_MM, context); 263 MediaSizeHelper.JIS_B4 = new MediaSize(MediaSizeCode.JIS_B4.toString(), 'jis_b4_257x364mm', 'B4', JIS_B4_WIDTH, JIS_B4_HEIGHT, 264 JIS_B4_WIDTH_MM, JIS_B4_HEIGHT_MM, context); 265 MediaSizeHelper.PHOTO_5x7 = new MediaSize(MediaSizeCode.INDEX_CARD_5X7.toString(), 'na_5x7_5x7in', StringUtil.getStringByName('PHOTO_5x7', context), 266 PHOTO_5R_WIDTH, PHOTO_5R_HEIGHT, PHOTO_5R_WIDTH_MM, PHOTO_5R_HEIGHT_MM, context); 267 MediaSizeHelper.PHOTO_4x6 = new MediaSize(MediaSizeCode.INDEX_CARD_4X6.toString(), 'na_index-4x6_4x6in', StringUtil.getStringByName('PHOTO_4x6', context), 268 PHOTO_4R_WIDTH, PHOTO_4R_HEIGHT, PHOTO_4R_WIDTH_MM, PHOTO_4R_HEIGHT_MM, context); 269 MediaSizeHelper.NA_GOVT_LETTER = new MediaSize(MediaSizeCode.US_GOVERNMENT_LETTER.toString(), 'na_govt-letter_8x10in', 270 'NA_GOVT_LETTER', NA_GOVT_LETTER_8IN_WIDTH, NA_GOVT_LETTER_8IN_HEIGHT, NA_GOVT_LETTER_8IN_WIDTH_MM, NA_GOVT_LETTER_8IN_HEIGHT_MM, context); 271 MediaSizeHelper.NA_LEDGER_11X17 = new MediaSize(MediaSizeCode.LEDGER.toString(), 'na_ledger_11x17in', 'Ledger', NA_LEDGER_11IN_WIDTH, 272 NA_LEDGER_11IN_HEIGHT, NA_LEDGER_11IN_WIDTH_MM, NA_LEDGER_11IN_HEIGHT_MM, context); 273 MediaSizeHelper.JPN_HAGAKI = new MediaSize(MediaSizeCode.JPN_HAGAKI_PC.toString(), 'jpn_hagaki_100x148mm', 'JPN_HAGAKI', 274 JPN_HAGAKI_WIDTH, JPN_HAGAKI_HEIGHT, JPN_HAGAKI_WIDTH_MM, JPN_HAGAKI_HEIGHT_MM, context); 275 MediaSizeHelper.OM_DSC_PHOTO = new MediaSize(MediaSizeCode.PHOTO_89X119.toString(), 'om_dsc-photo_89x119mm', 'OM_DSC_PHOTO', 276 OM_SDC_PHOTO_WIDTH, OM_SDC_PHOTO_HEIGHT, OM_SDC_PHOTO_WIDTH_MM, OM_SDC_PHOTO_HEIGHT_MM, context); 277 MediaSizeHelper.OM_CARD = new MediaSize(MediaSizeCode.CARD_54X86.toString(), 'om_card_54x86mm', 'OM_CARD', OM_CARD_WIDTH, 278 OM_CARD_HEIGHT, OM_CARD_WIDTH_MM, OM_CARD_HEIGHT_MM, context); 279 MediaSizeHelper.OE_PHOTO_L = new MediaSize(MediaSizeCode.OE_PHOTO_L.toString(), 'oe_photo-l_3.5x5in', 'OE_PHOTO_L', 280 OE_PHOTO_L_WIDTH, OE_PHOTO_L_HEIGHT, OE_PHOTO_L_WIDTH_MM, OE_PHOTO_L_HEIGHT_MM, context); 281 MediaSizeHelper.INT_DL_ENVELOPE = new MediaSize(MediaSizeCode.INT_DL_ENVELOPE.toString(), 'INT_DL_ENVELOPE', 'Envelope', 282 INT_DL_ENVELOPE_WIDTH, INT_DL_ENVELOPE_HEIGHT, INT_DL_ENVELOPE_WIDTH_MM, INT_DL_ENVELOPE_HEIGHT_MM, context) 283 MediaSizeHelper.B_TABLOID = new MediaSize(MediaSizeCode.B_TABLOID.toString(), 'B_TABLOID', 'Tabloid', B_TABLOID_L_WIDTH, 284 B_TABLOID_L_HEIGHT, B_TABLOID_L_WIDTH_MM, B_TABLOID_L_HEIGHT_MM, context); 285 286 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.US_LETTER, MediaSizeHelper.LETTER); 287 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.US_LEGAL, MediaSizeHelper.LEGAL); 288 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.US_GOVERNMENT_LETTER, MediaSizeHelper.NA_GOVT_LETTER); 289 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.LEDGER, MediaSizeHelper.NA_LEDGER_11X17); 290 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.ISO_A5, MediaSizeHelper.ISO_A5); 291 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.ISO_A4, MediaSizeHelper.ISO_A4); 292 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.ISO_A3, MediaSizeHelper.ISO_A3); 293 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.JIS_B5, MediaSizeHelper.JIS_B5); 294 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.JIS_B4, MediaSizeHelper.JIS_B4); 295 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.JPN_HAGAKI_PC, MediaSizeHelper.JPN_HAGAKI); 296 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.INDEX_CARD_4X6, MediaSizeHelper.PHOTO_4x6); 297 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.INDEX_CARD_5X7, MediaSizeHelper.PHOTO_5x7); 298 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.ISO_C5, MediaSizeHelper.ISO_C5); 299 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.ISO_DL, MediaSizeHelper.ISO_DL); 300 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.PHOTO_89X119, MediaSizeHelper.OM_DSC_PHOTO); 301 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.CARD_54X86, MediaSizeHelper.OM_CARD); 302 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.OE_PHOTO_L, MediaSizeHelper.OE_PHOTO_L); 303 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.INT_DL_ENVELOPE, MediaSizeHelper.INT_DL_ENVELOPE); 304 MediaSizeHelper.sCodeToStringMap.set(MediaSizeCode.B_TABLOID, MediaSizeHelper.B_TABLOID); 305 } 306}