1c36cf2e9Sopenharmony_ci/*
2c36cf2e9Sopenharmony_ci * Copyright (c) 2023-2023 Huawei Device Co., Ltd.
3c36cf2e9Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c36cf2e9Sopenharmony_ci * you may not use this file except in compliance with the License.
5c36cf2e9Sopenharmony_ci * You may obtain a copy of the License at
6c36cf2e9Sopenharmony_ci *
7c36cf2e9Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8c36cf2e9Sopenharmony_ci *
9c36cf2e9Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c36cf2e9Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c36cf2e9Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c36cf2e9Sopenharmony_ci * See the License for the specific language governing permissions and
13c36cf2e9Sopenharmony_ci * limitations under the License.
14c36cf2e9Sopenharmony_ci */
15c36cf2e9Sopenharmony_ciimport print from '@ohos.print';
16c36cf2e9Sopenharmony_ciimport { BusinessError } from '@ohos.base';
17c36cf2e9Sopenharmony_ciimport CheckEmptyUtils from '../utils/CheckEmptyUtils';
18c36cf2e9Sopenharmony_ciimport { Log } from '../utils/Log';
19c36cf2e9Sopenharmony_ciimport { PrintUtil } from '../utils/PrintUtil';
20c36cf2e9Sopenharmony_ciimport { CustomPrintJobState } from '../model/PrintBean';
21c36cf2e9Sopenharmony_ciimport { StringUtil } from '../utils/StringUtil';
22c36cf2e9Sopenharmony_ci
23c36cf2e9Sopenharmony_ciconst TAG: string = 'print_fwk';
24c36cf2e9Sopenharmony_ci
25c36cf2e9Sopenharmony_ci/**
26c36cf2e9Sopenharmony_ci * defines print attributes.
27c36cf2e9Sopenharmony_ci */
28c36cf2e9Sopenharmony_ciexport class PrintAttributes implements print.PrintAttributes {
29c36cf2e9Sopenharmony_ci  copyNumber?: number;
30c36cf2e9Sopenharmony_ci  pageRange?: PrinterRange;
31c36cf2e9Sopenharmony_ci  pageSize?: PrintPageSize;
32c36cf2e9Sopenharmony_ci  colorMode?: print.PrintColorMode;
33c36cf2e9Sopenharmony_ci  duplexMode?: print.PrintDuplexMode;
34c36cf2e9Sopenharmony_ci  directionMode?: print.PrintDirectionMode;
35c36cf2e9Sopenharmony_ci  isSequential: boolean; /* Add a Variable */
36c36cf2e9Sopenharmony_ci  isLandscape: boolean; /* Add a Variable */
37c36cf2e9Sopenharmony_ci  options: string; /* Add a Variable */
38c36cf2e9Sopenharmony_ci  margin: PrintMargin;
39c36cf2e9Sopenharmony_ci
40c36cf2e9Sopenharmony_ci  constructor(copyNumber: number, pageRange: PrinterRange,
41c36cf2e9Sopenharmony_ci              isSequential: boolean, pageSize: PrintPageSize, isLandscape: boolean,
42c36cf2e9Sopenharmony_ci              colorMode: print.PrintColorMode, duplexMode: print.PrintDuplexMode, margin: PrintMargin,
43c36cf2e9Sopenharmony_ci              directionMode: print.PrintDirectionMode, options: string) {
44c36cf2e9Sopenharmony_ci    this.copyNumber = copyNumber;
45c36cf2e9Sopenharmony_ci    this.pageRange = pageRange;
46c36cf2e9Sopenharmony_ci    this.pageSize = pageSize;
47c36cf2e9Sopenharmony_ci    this.colorMode = colorMode;
48c36cf2e9Sopenharmony_ci    this.duplexMode = duplexMode;
49c36cf2e9Sopenharmony_ci    this.directionMode = directionMode;
50c36cf2e9Sopenharmony_ci    this.isSequential = isSequential;
51c36cf2e9Sopenharmony_ci    this.isLandscape = isLandscape;
52c36cf2e9Sopenharmony_ci    this.margin = margin;
53c36cf2e9Sopenharmony_ci    this.options = options;
54c36cf2e9Sopenharmony_ci  }
55c36cf2e9Sopenharmony_ci}
56c36cf2e9Sopenharmony_ci
57c36cf2e9Sopenharmony_ci/**
58c36cf2e9Sopenharmony_ci * defines print margin.
59c36cf2e9Sopenharmony_ci */
60c36cf2e9Sopenharmony_ciexport class PrintMargin implements print.PrintMargin {
61c36cf2e9Sopenharmony_ci  top?: number;
62c36cf2e9Sopenharmony_ci  bottom?: number;
63c36cf2e9Sopenharmony_ci  left?: number;
64c36cf2e9Sopenharmony_ci  right?: number;
65c36cf2e9Sopenharmony_ci
66c36cf2e9Sopenharmony_ci  constructor(top: number, bottom: number, left: number, right: number) {
67c36cf2e9Sopenharmony_ci    this.top = top;
68c36cf2e9Sopenharmony_ci    this.bottom = bottom;
69c36cf2e9Sopenharmony_ci    this.left = left;
70c36cf2e9Sopenharmony_ci    this.right = right;
71c36cf2e9Sopenharmony_ci  }
72c36cf2e9Sopenharmony_ci}
73c36cf2e9Sopenharmony_ci
74c36cf2e9Sopenharmony_ci/**
75c36cf2e9Sopenharmony_ci * defines print range.
76c36cf2e9Sopenharmony_ci */
77c36cf2e9Sopenharmony_ciexport class PrinterRange implements print.PrinterRange {
78c36cf2e9Sopenharmony_ci  startPage?: number;
79c36cf2e9Sopenharmony_ci  endPage?: number;
80c36cf2e9Sopenharmony_ci  pages?: Array<number>;
81c36cf2e9Sopenharmony_ci
82c36cf2e9Sopenharmony_ci  constructor(startPage: number, endPage: number, pages: Array<number>) {
83c36cf2e9Sopenharmony_ci    this.startPage = startPage;
84c36cf2e9Sopenharmony_ci    this.endPage = endPage;
85c36cf2e9Sopenharmony_ci    this.pages = pages;
86c36cf2e9Sopenharmony_ci  }
87c36cf2e9Sopenharmony_ci}
88c36cf2e9Sopenharmony_ci
89c36cf2e9Sopenharmony_ci/**
90c36cf2e9Sopenharmony_ci * defines print preview attribute.
91c36cf2e9Sopenharmony_ci */
92c36cf2e9Sopenharmony_ciexport class PreviewAttribute implements print.PreviewAttribute {
93c36cf2e9Sopenharmony_ci  previewRange: PrinterRange;
94c36cf2e9Sopenharmony_ci  result?: number;
95c36cf2e9Sopenharmony_ci
96c36cf2e9Sopenharmony_ci  constructor(previewRange: PrinterRange, result: number) {
97c36cf2e9Sopenharmony_ci    this.previewRange = previewRange;
98c36cf2e9Sopenharmony_ci    this.result = result;
99c36cf2e9Sopenharmony_ci  }
100c36cf2e9Sopenharmony_ci}
101c36cf2e9Sopenharmony_ci
102c36cf2e9Sopenharmony_ci/**
103c36cf2e9Sopenharmony_ci * defines print resolution.
104c36cf2e9Sopenharmony_ci */
105c36cf2e9Sopenharmony_ciexport class PrintResolution implements print.PrintResolution {
106c36cf2e9Sopenharmony_ci  id: string;
107c36cf2e9Sopenharmony_ci  horizontalDpi: number;
108c36cf2e9Sopenharmony_ci  verticalDpi: number;
109c36cf2e9Sopenharmony_ci}
110c36cf2e9Sopenharmony_ci
111c36cf2e9Sopenharmony_ciexport class PrintPageSize implements print.PrintPageSize {
112c36cf2e9Sopenharmony_ci  id: string;
113c36cf2e9Sopenharmony_ci  name: string;
114c36cf2e9Sopenharmony_ci  width: number;
115c36cf2e9Sopenharmony_ci  height: number;
116c36cf2e9Sopenharmony_ci
117c36cf2e9Sopenharmony_ci  constructor(id: string, name: string, width: number, height: number) {
118c36cf2e9Sopenharmony_ci    this.id = id;
119c36cf2e9Sopenharmony_ci    this.name = name;
120c36cf2e9Sopenharmony_ci    this.width = width;
121c36cf2e9Sopenharmony_ci    this.height = height;
122c36cf2e9Sopenharmony_ci  }
123c36cf2e9Sopenharmony_ci}
124c36cf2e9Sopenharmony_ci
125c36cf2e9Sopenharmony_ci/**
126c36cf2e9Sopenharmony_ci * defines print capability.
127c36cf2e9Sopenharmony_ci */
128c36cf2e9Sopenharmony_ciexport class PrinterCapability implements print.PrinterCapability {
129c36cf2e9Sopenharmony_ci  colorMode: number;
130c36cf2e9Sopenharmony_ci  duplexMode: number;
131c36cf2e9Sopenharmony_ci  pageSize: Array<PrintPageSize>;
132c36cf2e9Sopenharmony_ci  resolution?: Array<PrintResolution>;
133c36cf2e9Sopenharmony_ci  minMargin?: PrintMargin;
134c36cf2e9Sopenharmony_ci  options?: string; /* Change Type*/
135c36cf2e9Sopenharmony_ci}
136c36cf2e9Sopenharmony_ci
137c36cf2e9Sopenharmony_ci/**
138c36cf2e9Sopenharmony_ci * defines print info.
139c36cf2e9Sopenharmony_ci */
140c36cf2e9Sopenharmony_ciexport class PrinterInfo implements print.PrinterInfo {
141c36cf2e9Sopenharmony_ci  printerId: string;
142c36cf2e9Sopenharmony_ci  printerName: string;
143c36cf2e9Sopenharmony_ci  printerState: print.PrinterState;
144c36cf2e9Sopenharmony_ci  printerIcon?: number;
145c36cf2e9Sopenharmony_ci  description?: string;
146c36cf2e9Sopenharmony_ci  capability?: PrinterCapability;
147c36cf2e9Sopenharmony_ci  options?: string;
148c36cf2e9Sopenharmony_ci
149c36cf2e9Sopenharmony_ci  constructor(printerId: string, printerName: string, printerState: print.PrinterState, printerIcon?: number, description?: string,
150c36cf2e9Sopenharmony_ci              capability?: PrinterCapability, options?: string) {
151c36cf2e9Sopenharmony_ci    this.printerId = printerId;
152c36cf2e9Sopenharmony_ci    this.printerName = printerName;
153c36cf2e9Sopenharmony_ci    this.printerState = printerState;
154c36cf2e9Sopenharmony_ci    if (printerIcon) {
155c36cf2e9Sopenharmony_ci      this.printerIcon = printerIcon;
156c36cf2e9Sopenharmony_ci    }
157c36cf2e9Sopenharmony_ci    if (description) {
158c36cf2e9Sopenharmony_ci      this.description = description;
159c36cf2e9Sopenharmony_ci    }
160c36cf2e9Sopenharmony_ci    if (capability) {
161c36cf2e9Sopenharmony_ci      this.capability = capability;
162c36cf2e9Sopenharmony_ci    }
163c36cf2e9Sopenharmony_ci    if (options) {
164c36cf2e9Sopenharmony_ci      this.options = options;
165c36cf2e9Sopenharmony_ci    }
166c36cf2e9Sopenharmony_ci  }
167c36cf2e9Sopenharmony_ci
168c36cf2e9Sopenharmony_ci  toString(): string {
169c36cf2e9Sopenharmony_ci    return '[PrinterInfo printerId:' + StringUtil.splitMac(this.printerId) +
170c36cf2e9Sopenharmony_ci    ' ,printerName:' + StringUtil.encodeCommonString(this.printerName) +
171c36cf2e9Sopenharmony_ci    ' , printerState:' + this.printerState + ']';
172c36cf2e9Sopenharmony_ci  }
173c36cf2e9Sopenharmony_ci}
174c36cf2e9Sopenharmony_ci
175c36cf2e9Sopenharmony_ci/**
176c36cf2e9Sopenharmony_ci * PrinterInfo.options数据结构
177c36cf2e9Sopenharmony_ci */
178c36cf2e9Sopenharmony_ciexport class PrinterCapsOptions {
179c36cf2e9Sopenharmony_ci  supportedMediaTypes: number[];
180c36cf2e9Sopenharmony_ci  supportedQualities: number[];
181c36cf2e9Sopenharmony_ci  make: string;
182c36cf2e9Sopenharmony_ci  printerUri: string;
183c36cf2e9Sopenharmony_ci}
184c36cf2e9Sopenharmony_ci
185c36cf2e9Sopenharmony_ci/**
186c36cf2e9Sopenharmony_ci * defines print job
187c36cf2e9Sopenharmony_ci */
188c36cf2e9Sopenharmony_ciexport class PrintJob implements print.PrintJob {
189c36cf2e9Sopenharmony_ci  jobFiles: Array<string>; /* Add a Variable */
190c36cf2e9Sopenharmony_ci  fdList: Array<number>;
191c36cf2e9Sopenharmony_ci  jobId: string;
192c36cf2e9Sopenharmony_ci  printerId: string;
193c36cf2e9Sopenharmony_ci  jobState: print.PrintJobState;
194c36cf2e9Sopenharmony_ci  jobSubstate: print.PrintJobSubState;
195c36cf2e9Sopenharmony_ci  copyNumber: number;
196c36cf2e9Sopenharmony_ci  pageRange: PrinterRange;
197c36cf2e9Sopenharmony_ci  isSequential: boolean;
198c36cf2e9Sopenharmony_ci  pageSize: PrintPageSize;
199c36cf2e9Sopenharmony_ci  isLandscape: boolean;
200c36cf2e9Sopenharmony_ci  colorMode: number;
201c36cf2e9Sopenharmony_ci  duplexMode: number;
202c36cf2e9Sopenharmony_ci  margin: PrintMargin;
203c36cf2e9Sopenharmony_ci  preview: PreviewAttribute;
204c36cf2e9Sopenharmony_ci  options: string; /* Change Type */
205c36cf2e9Sopenharmony_ci
206c36cf2e9Sopenharmony_ci  constructor(jobFiles: Array<string>, fdList: Array<number>, jobId: string, printerId: string, jobState: print.PrintJobState,
207c36cf2e9Sopenharmony_ci              jobSubstate: print.PrintJobSubState, copyNumber: number, pageRange: PrinterRange, isSequential: boolean,
208c36cf2e9Sopenharmony_ci              pageSize: PrintPageSize, isLandscape: boolean, colorMode: number, duplexMode: number, margin: PrintMargin,
209c36cf2e9Sopenharmony_ci              preview: PreviewAttribute, options: string) {
210c36cf2e9Sopenharmony_ci    this.jobFiles = jobFiles;
211c36cf2e9Sopenharmony_ci    this.fdList = fdList;
212c36cf2e9Sopenharmony_ci    this.jobId = jobId;
213c36cf2e9Sopenharmony_ci    this.printerId = printerId;
214c36cf2e9Sopenharmony_ci    this.jobState = jobState;
215c36cf2e9Sopenharmony_ci    this.jobSubstate = jobSubstate;
216c36cf2e9Sopenharmony_ci    this.copyNumber = copyNumber;
217c36cf2e9Sopenharmony_ci    this.pageRange = pageRange;
218c36cf2e9Sopenharmony_ci    this.isSequential = isSequential;
219c36cf2e9Sopenharmony_ci    this.pageSize = pageSize;
220c36cf2e9Sopenharmony_ci    this.isLandscape = isLandscape;
221c36cf2e9Sopenharmony_ci    this.colorMode = colorMode;
222c36cf2e9Sopenharmony_ci    this.duplexMode = duplexMode;
223c36cf2e9Sopenharmony_ci    this.margin = margin;
224c36cf2e9Sopenharmony_ci    this.preview = preview;
225c36cf2e9Sopenharmony_ci    this.options = options;
226c36cf2e9Sopenharmony_ci  }
227c36cf2e9Sopenharmony_ci}
228c36cf2e9Sopenharmony_ci
229c36cf2e9Sopenharmony_ciexport class PrinterExtensionInfo implements print.PrinterExtensionInfo {
230c36cf2e9Sopenharmony_ci  extensionId: string; // extension id of printer extension
231c36cf2e9Sopenharmony_ci  vendorId: string; // vendor id of extension
232c36cf2e9Sopenharmony_ci  vendorName: string;  // vendor name
233c36cf2e9Sopenharmony_ci  vendorIcon: number; // resource id of vendor
234c36cf2e9Sopenharmony_ci  version: string; // version of current printer extension
235c36cf2e9Sopenharmony_ci  constructor(extensionId: string, vendorId: string, vendorName: string, vendorIcon: number, version: string) {
236c36cf2e9Sopenharmony_ci    this.extensionId = extensionId;
237c36cf2e9Sopenharmony_ci    this.vendorId = vendorId;
238c36cf2e9Sopenharmony_ci    this.vendorName = vendorName;
239c36cf2e9Sopenharmony_ci    this.vendorIcon = vendorIcon;
240c36cf2e9Sopenharmony_ci    this.version = version;
241c36cf2e9Sopenharmony_ci  }
242c36cf2e9Sopenharmony_ci}
243c36cf2e9Sopenharmony_ci
244c36cf2e9Sopenharmony_ci/**
245c36cf2e9Sopenharmony_ci * PrintJob.options数据结构
246c36cf2e9Sopenharmony_ci */
247c36cf2e9Sopenharmony_ciexport class PrintJobOptions {
248c36cf2e9Sopenharmony_ci  jobName: string;
249c36cf2e9Sopenharmony_ci  jobNum: number;
250c36cf2e9Sopenharmony_ci  jobDescription: string;
251c36cf2e9Sopenharmony_ci  mediaType: string;
252c36cf2e9Sopenharmony_ci  documentCategory: number;
253c36cf2e9Sopenharmony_ci  printQuality: string;
254c36cf2e9Sopenharmony_ci  printerName: string;
255c36cf2e9Sopenharmony_ci  printerUri: string;
256c36cf2e9Sopenharmony_ci  documentFormat: string;
257c36cf2e9Sopenharmony_ci  files: string[];
258c36cf2e9Sopenharmony_ci}
259c36cf2e9Sopenharmony_ciexport function startPrintJob(printJobInfo: PrintJob): Promise<boolean> {
260c36cf2e9Sopenharmony_ci  Log.info(TAG, 'startPrintJob enter.');
261c36cf2e9Sopenharmony_ci  return new Promise((resolve) => {
262c36cf2e9Sopenharmony_ci    if (CheckEmptyUtils.isEmpty(printJobInfo)) {
263c36cf2e9Sopenharmony_ci      Log.info(TAG, 'startPrintJob, printJobInfo invalid.');
264c36cf2e9Sopenharmony_ci      return resolve(false);
265c36cf2e9Sopenharmony_ci    }
266c36cf2e9Sopenharmony_ci    let printJob: print.PrintJob = convertToFwkPrintJob(printJobInfo);
267c36cf2e9Sopenharmony_ci    Log.info(TAG, 'startPrintJob, jobId =' + JSON.stringify(printJobInfo.jobId));
268c36cf2e9Sopenharmony_ci    print.startPrintJob(printJob).then(() => {
269c36cf2e9Sopenharmony_ci      Log.info(TAG, 'start print success.');
270c36cf2e9Sopenharmony_ci      resolve(true);
271c36cf2e9Sopenharmony_ci    }).catch((err: BusinessError) => {
272c36cf2e9Sopenharmony_ci      Log.error(TAG, 'failed to start Print because ' + JSON.stringify(err));
273c36cf2e9Sopenharmony_ci      return resolve(false);
274c36cf2e9Sopenharmony_ci    });
275c36cf2e9Sopenharmony_ci  });
276c36cf2e9Sopenharmony_ci}
277c36cf2e9Sopenharmony_ci
278c36cf2e9Sopenharmony_ciexport function queryAllPrintJobs(printerId?: string): Promise<Array<PrintJob>> {
279c36cf2e9Sopenharmony_ci  return new Promise((resolve, reject) => {
280c36cf2e9Sopenharmony_ci    print.queryPrintJobList().then((data: Array<print.PrintJob>) => {
281c36cf2e9Sopenharmony_ci      Log.info(TAG, `queryAllPrintJobs data.length:${data.length}`);
282c36cf2e9Sopenharmony_ci      let retPrintJobs: Array<PrintJob> = [];
283c36cf2e9Sopenharmony_ci      for (let printJob of data) {
284c36cf2e9Sopenharmony_ci        Log.debug(TAG, `queryAllPrintJobs printJob:${JSON.stringify(printJob)}`);
285c36cf2e9Sopenharmony_ci        let printJobInfo = convertToSpoolerPrintJob(printJob);
286c36cf2e9Sopenharmony_ci        if (CheckEmptyUtils.isEmpty(printJobInfo)) {
287c36cf2e9Sopenharmony_ci          Log.warn(TAG, 'queryAllPrintJobs invalid job.');
288c36cf2e9Sopenharmony_ci          continue;
289c36cf2e9Sopenharmony_ci        }
290c36cf2e9Sopenharmony_ci        if (CheckEmptyUtils.checkStrIsEmpty(printerId) || printJobInfo.printerId === printerId) {
291c36cf2e9Sopenharmony_ci          retPrintJobs.push(printJobInfo);
292c36cf2e9Sopenharmony_ci        }
293c36cf2e9Sopenharmony_ci      }
294c36cf2e9Sopenharmony_ci      Log.info(TAG, `queryAllPrintJobs retPrintJobs.length: ${retPrintJobs.length}`);
295c36cf2e9Sopenharmony_ci      resolve(retPrintJobs);
296c36cf2e9Sopenharmony_ci    }).catch((err: BusinessError) => {
297c36cf2e9Sopenharmony_ci      Log.error(TAG, `failed to queryAllPrintJobs Cause: ${JSON.stringify(err)}`);
298c36cf2e9Sopenharmony_ci      return reject(err);
299c36cf2e9Sopenharmony_ci    });
300c36cf2e9Sopenharmony_ci  });
301c36cf2e9Sopenharmony_ci}
302c36cf2e9Sopenharmony_ci
303c36cf2e9Sopenharmony_ciexport function cancelPrintJob(jobId: string): void {
304c36cf2e9Sopenharmony_ci  Log.info(TAG, 'cancelPrintJob enter.');
305c36cf2e9Sopenharmony_ci  if (CheckEmptyUtils.checkStrIsEmpty(jobId)) {
306c36cf2e9Sopenharmony_ci    Log.info(TAG, 'cancelPrintJob, jobId is empty.');
307c36cf2e9Sopenharmony_ci    return;
308c36cf2e9Sopenharmony_ci  }
309c36cf2e9Sopenharmony_ci  Log.info(TAG, 'cancelPrintJob jobId=' + jobId);
310c36cf2e9Sopenharmony_ci  print.cancelPrintJob(jobId).then((data) => {
311c36cf2e9Sopenharmony_ci    Log.info(TAG, 'cancel print success data: ' + JSON.stringify(data));
312c36cf2e9Sopenharmony_ci  }).catch((error: BusinessError) => {
313c36cf2e9Sopenharmony_ci    Log.error(TAG, 'cancel print failed, because: ' + JSON.stringify(error));
314c36cf2e9Sopenharmony_ci  });
315c36cf2e9Sopenharmony_ci  Log.info(TAG, 'cancelPrintJob end.');
316c36cf2e9Sopenharmony_ci}
317c36cf2e9Sopenharmony_ci
318c36cf2e9Sopenharmony_ciexport function isValidPrintJob(job: print.PrintJob): boolean {
319c36cf2e9Sopenharmony_ci  if (CheckEmptyUtils.isEmpty(job)) {
320c36cf2e9Sopenharmony_ci    Log.info(TAG, 'isValidPrintJob job is empty.');
321c36cf2e9Sopenharmony_ci    return false;
322c36cf2e9Sopenharmony_ci  }
323c36cf2e9Sopenharmony_ci  if (CheckEmptyUtils.checkStrIsEmpty(job.printerId) || CheckEmptyUtils.checkStrIsEmpty(job.jobId) ||
324c36cf2e9Sopenharmony_ci  !(PrintUtil.isValueInEnum(job.jobState, print.PrintJobState) || PrintUtil.isValueInEnum(job.jobState, CustomPrintJobState)) ||
325c36cf2e9Sopenharmony_ci  !PrintUtil.isValueInEnum(job.jobSubstate, print.PrintJobSubState)) {
326c36cf2e9Sopenharmony_ci    return false;
327c36cf2e9Sopenharmony_ci  }
328c36cf2e9Sopenharmony_ci  return true;
329c36cf2e9Sopenharmony_ci}
330c36cf2e9Sopenharmony_ci
331c36cf2e9Sopenharmony_ciexport function convertToSpoolerPrintJob(job: print.PrintJob): PrintJob {
332c36cf2e9Sopenharmony_ci  if (!isValidPrintJob(job)) {
333c36cf2e9Sopenharmony_ci    return null;
334c36cf2e9Sopenharmony_ci  }
335c36cf2e9Sopenharmony_ci  return new PrintJob([], job.fdList, job.jobId, job.printerId, job.jobState as print.PrintJobState, job.jobSubstate,
336c36cf2e9Sopenharmony_ci    job.copyNumber, job.pageRange, job.isSequential, job.pageSize, job.isLandscape, job.colorMode,
337c36cf2e9Sopenharmony_ci    job.duplexMode, job.margin, job.preview, job.options as string);
338c36cf2e9Sopenharmony_ci}
339c36cf2e9Sopenharmony_ci
340c36cf2e9Sopenharmony_ciexport function convertToFwkPrintJob(printJobInfo: PrintJob): print.PrintJob {
341c36cf2e9Sopenharmony_ci  let pageRangeInfo: PrinterRange;
342c36cf2e9Sopenharmony_ci  if (printJobInfo.pageRange.pages.length === 0) {
343c36cf2e9Sopenharmony_ci    pageRangeInfo = { startPage: printJobInfo.pageRange.startPage, endPage: printJobInfo.pageRange.endPage };
344c36cf2e9Sopenharmony_ci  } else {
345c36cf2e9Sopenharmony_ci    pageRangeInfo = { pages: printJobInfo.pageRange.pages };
346c36cf2e9Sopenharmony_ci  }
347c36cf2e9Sopenharmony_ci  // remove: preview, jobFiles
348c36cf2e9Sopenharmony_ci  let printJob: print.PrintJob = {
349c36cf2e9Sopenharmony_ci    fdList: printJobInfo.fdList,
350c36cf2e9Sopenharmony_ci    jobId: printJobInfo.jobId,
351c36cf2e9Sopenharmony_ci    printerId: printJobInfo.printerId,
352c36cf2e9Sopenharmony_ci    jobState: printJobInfo.jobState,
353c36cf2e9Sopenharmony_ci    jobSubstate: printJobInfo.jobSubstate,
354c36cf2e9Sopenharmony_ci    copyNumber: printJobInfo.copyNumber,
355c36cf2e9Sopenharmony_ci    pageRange: pageRangeInfo,
356c36cf2e9Sopenharmony_ci    isSequential: printJobInfo.isSequential,
357c36cf2e9Sopenharmony_ci    pageSize: printJobInfo.pageSize,
358c36cf2e9Sopenharmony_ci    isLandscape: printJobInfo.isLandscape,
359c36cf2e9Sopenharmony_ci    colorMode: printJobInfo.colorMode,
360c36cf2e9Sopenharmony_ci    duplexMode: printJobInfo.duplexMode,
361c36cf2e9Sopenharmony_ci    margin: printJobInfo.margin,
362c36cf2e9Sopenharmony_ci    options: printJobInfo.options
363c36cf2e9Sopenharmony_ci  };
364c36cf2e9Sopenharmony_ci  return printJob;
365c36cf2e9Sopenharmony_ci}
366c36cf2e9Sopenharmony_ci
367c36cf2e9Sopenharmony_ciexport function convertToPrinterInfo(info: print.PrinterInfo): PrinterInfo {
368c36cf2e9Sopenharmony_ci  if (CheckEmptyUtils.isEmpty(info)) {
369c36cf2e9Sopenharmony_ci    return null;
370c36cf2e9Sopenharmony_ci  }
371c36cf2e9Sopenharmony_ci  let printerInfo: PrinterInfo = new PrinterInfo(info.printerId, info.printerName, info.printerState, info.printerIcon, info.description,
372c36cf2e9Sopenharmony_ci    info.capability as PrinterCapability, info.options as string);
373c36cf2e9Sopenharmony_ci  return printerInfo;
374c36cf2e9Sopenharmony_ci}
375