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