Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(printer): add v0.8.0 support #3225

Merged
merged 1 commit into from
Nov 19, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 109 additions & 18 deletions src/@ionic-native/plugins/printer/index.ts
Original file line number Diff line number Diff line change
@@ -1,42 +1,134 @@
import { Injectable } from '@angular/core';
import { Cordova, CordovaCheck, IonicNativePlugin, Plugin, getPromise } from '@ionic-native/core';

interface FontOptions {
name: string; // The name of the font family. Only supported on iOS
size: number; // The size of the font. Only supported on iOS, Android
italic: boolean; // Set to true to enable these font traits. Only supported on iOS
bold: boolean; // Set to true to enable these font traits. Only supported on iOS
align: 'left' | 'right' | 'center' | 'justified'; // Possible alignments are left, right, center and justified. Only supported on iOS
color: string; // The color of the font in hexa-decimal RGB format - "FF0000" means red. Only supported on iOS
}

interface HeaderFooterLabelOptions {
text: string; // The plain text to display. Use %ld to indicate where to insert the page index. For example "Page %ld" would result into "Page 1", "Page 2", .... Only supported on iOS
top: string; // The relative position where to place the label within the footer or header area. Only supported on iOS
right: string; // The relative position where to place the label within the footer or header area. Only supported on iOS
left: string; // The relative position where to place the label within the footer or header area. Only supported on iOS
bottom: string; // The relative position where to place the label within the footer or header area. Only supported on iOS
font: FontOptions; // The font attributes for the label. Only supported on iOS
showPageIndex: boolean; // Set to true if you want to display the page index. Only supported on iOS
}

export interface PrintOptions {
/**
* The name of the print job and the document
*/
name?: string;

/**
* The network URL of the printer.
* Only supported on iOS.
* The number of copies for the print task.
* Only supported on iOS, Windows
*/
printerId?: string;
copies?: number;

/**
* Limits the pages to print even the document contains more.
* To skip the last n pages you can assign a negative value on iOS.
* Only supported on iOS, Android
*/
pageCount?: number;

/**
* Specifies the duplex mode to use for the print job.
* Either double-sided (duplex:true) or single-sided (duplex:false).
* Double-sided by default.
* Only supported on iOS
* Either double-sided on short site (duplex:'short'),
* double-sided on long site (duplex:'long') or single-sided (duplex:'none').
*/
duplex?: boolean;

/**
* The orientation of the printed content, portrait or landscape
* Portrait by default.
*/
landscape?: boolean;
orientation?: 'landscape' | 'portrait';

/**
* If your application only prints black text, setting this property to true can result in better performance in many cases.
* False by default.
*/
grayscale?: boolean;
monochrome?: boolean;

/**
* The Size and position of the print view
* If your application only prints black text, setting this property to true can result in better performance in many cases.
* False by default.
* Only supported on iOS, Windows
*/
photo?: boolean;

/**
* Set to false to disable downscaling the image to fit into the content aread.
* Only supported on Android
*/
autoFit?: boolean;

/**
* The network URL to the printer.
* Only supported on iOS
*/
bounds?: number[] | any;
printer?: string;

/**
* Defines the maximum size of the content area.
* Only supported on iOS
*/
maxHeight?: string;

/**
* Defines the maximum size of the content area.
* Only supported on iOS
*/
maxWidth?: string;

/**
* Set to false to avoid margins.
* The margins for each printed page. Each printer might have its own minimum margins depends on media type and paper format.
*/
margin?: boolean | {
top?: string;
left?: string;
right?: string;
bottom?: string;
};

ui?: {
hideNumberOfCopies?: string; // Set to true to hide the control for the number of copies. Only supported on iOS
hidePaperFormat?: string; // Set to true to hide the control for the paper format. Only supported on iOS
top?: number; // The position of the printer picker. Only supported on iPad
left?: number; // The position of the printer picker. Only supported on iPad
height?: number; // The size of the printer picker. Only supported on iPad
width?: number; // The size of the printer picker. Only supported on iPad
};

paper?: {
width: string; // The dimensions of the paper – iOS will will try to choose a format which fits bests. Only supported on iOS
height: string; // The dimensions of the paper – iOS will will try to choose a format which fits bests. Only supported on iOS
name: string; // The name of the format like IsoA4 or Roll22Inch. https://docs.microsoft.com/en-us/uwp/api/windows.graphics.printing.printmediasize. Only supported on Windows
length: string; // On roll-fed printers you can decide when the printer cuts the paper. https://docs.microsoft.com/en-us/uwp/api/windows.graphics.printing.printmediasize. Only supported on iOs
};

font?: FontOptions;

header?: {
height: string; // The height of the header or footer on each page. Only supported on iOS
labels: string[]; // An array of labels to display. Only use if there are more then one. Only supported on iOS
label: HeaderFooterLabelOptions;
};

footer?: {
height: string; // The height of the header or footer on each page. Only supported on iOS
labels: string[]; // An array of labels to display. Only use if there are more then one. Only supported on iOS
label: HeaderFooterLabelOptions;
};
}

/**
Expand All @@ -54,11 +146,10 @@ export interface PrintOptions {
*
* let options: PrintOptions = {
* name: 'MyDocument',
* printerId: 'printer007',
* duplex: true,
* landscape: true,
* grayscale: true
* }
* orientation: 'landscape',
* monochrome: true
* }
*
* this.printer.print(content, options).then(onSuccess, onError);
* ```
Expand All @@ -85,14 +176,14 @@ export class Printer extends IonicNativePlugin {
}

/**
* Checks if the printer service is available (iOS) or if printer services are installed and enabled (Android).
* @return {Promise<any>} returns a promise that resolve with an object indicating whether printing is available, and providing the number of printers available
* Checks To check if printing is supported in general
* @return {Promise<any>} returns a promise that resolve with an object indicating whether printing is available
*/
@CordovaCheck()
check(): Promise<any> {
return getPromise<any>((resolve: Function) => {
Printer.getPlugin()
.check((avail: boolean, count: any) => {
.canPrintItem((avail: boolean, count: any) => {
resolve({ avail, count });
});
});
Expand All @@ -117,7 +208,7 @@ export class Printer extends IonicNativePlugin {
successIndex: 2,
errorIndex: 4
})
print(content: string | HTMLElement, options?: PrintOptions): Promise<any> {
print(content?: string | HTMLElement, options?: PrintOptions): Promise<any> {
return;
}

Expand Down