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