mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-27 18:33:36 +02:00
444 lines
22 KiB
ObjectPascal
444 lines
22 KiB
ObjectPascal
{
|
|
This file is part of the Pas2JS run time library.
|
|
Copyright (C) 2018 Silvio Clecio (silvioprog)
|
|
|
|
Pascal mapping for jsPDF: https://parall.ax/products/jspdf
|
|
|
|
See the file COPYING.FPC, included in this distribution,
|
|
for details about the copyright.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
**********************************************************************}
|
|
|
|
unit jsPDF;
|
|
|
|
{$MODE OBJFPC}
|
|
{$MODESWITCH EXTERNALCLASS}
|
|
|
|
interface
|
|
|
|
uses
|
|
Types,
|
|
JS,
|
|
SysUtils;
|
|
|
|
type
|
|
TjsPDF = class external name 'jsPDF'
|
|
public class var
|
|
{ jsPDF.API is a STATIC property of jsPDF class. jsPDF.API is an object you
|
|
can add methods and properties to. The methods / properties you add will
|
|
show up in new jsPDF objects. One property is prepopulated. It is the
|
|
'events' Object. Plugin authors can add topics, callbacks to this object.
|
|
These will be reassigned to all new instances of jsPDF. }
|
|
API: TJSObject external name 'API';
|
|
{ The version of jsPDF. }
|
|
version: string external name 'version';
|
|
public
|
|
{ Creates new jsPDF document object instance. If the first parameter
|
|
(orientation) is an object, it will be interpreted as an object of named
|
|
parameters. }
|
|
constructor new(
|
|
{ Measurement unit to be used when coordinates are specified.
|
|
Possible values are "pt" (points), "mm" (Default), "cm", "in" or "px". }
|
|
orientation: JSValue = 'p';
|
|
{ Measurement unit to be used when coordinates are specified. Possible
|
|
values are "pt" (points), "mm" (Default), "cm", "in" or "px". }
|
|
const &unit: string = 'mm';
|
|
{ The format of the first page. Can be:
|
|
|
|
a0 - a10
|
|
b0 - b10
|
|
c0 - c10
|
|
dl
|
|
letter
|
|
government-letter
|
|
legal
|
|
junior-legal
|
|
ledger
|
|
tabloid
|
|
credit-card
|
|
|
|
Default is "a4". If you want to use your own format just pass instead
|
|
of one of the above predefined formats the size as an number-array,
|
|
e.g. [595.28, 841.89] }
|
|
const format: string = 'a4'); overload;
|
|
constructor new(const orientation: string = 'p'; const &unit: string = 'mm';
|
|
const format: string = 'a4'); overload;
|
|
{ Add a custom font to the current instance. }
|
|
procedure addFont(
|
|
{ PDF specification full name for the font. }
|
|
const postScriptName: string;
|
|
{ PDF-document-instance-specific label assinged to the font. }
|
|
const id: string = '';
|
|
{ Style of the Font. }
|
|
const fontStyle: string = '';
|
|
{ Encoding_name-to-Font_metrics_object mapping. }
|
|
encoding: JSValue = nil);
|
|
{ Adds (and transfers the focus to) new page to the PDF document. }
|
|
function addPage(
|
|
{ The format of the new page. Can be:
|
|
|
|
a0 - a10
|
|
b0 - b10
|
|
c0 - c10
|
|
dl
|
|
letter
|
|
government-letter
|
|
legal
|
|
junior-legal
|
|
ledger
|
|
tabloid
|
|
credit-card
|
|
|
|
Default is "a4". If you want to use your own format just pass instead
|
|
of one of the above predefined formats the size as an number-array,
|
|
e.g. [595.28, 841.89] }
|
|
const format: string = 'a4';
|
|
{ Orientation of the new page. Possible values are "portrait" or
|
|
"landscape" (or shortcuts "p" (Default), "l"). }
|
|
const orientation: string = 'p'): TjsPDF; overload;
|
|
function addPage(format: array of Double = nil;
|
|
const orientation: string = 'p'): TjsPDF; overload;
|
|
{ Adds an circle to PDF. }
|
|
function circle(
|
|
{ Coordinate (in units declared at inception of PDF document) against left
|
|
edge of the page. }
|
|
x: JSValue = Undefined;
|
|
{ Coordinate (in units declared at inception of PDF document) against
|
|
upper edge of the page. }
|
|
y: JSValue = Undefined;
|
|
{ Radius (in units declared at inception of PDF document). }
|
|
r: JSValue = Undefined;
|
|
{ A string specifying the painting style or null. Valid styles
|
|
include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill
|
|
then stroke. A null value postpones setting the style so that a shape
|
|
may be composed using multiple method calls. The last drawing method
|
|
call used to define the shape should not have a null style argument. }
|
|
const style: string = 'S'): TjsPDF;
|
|
{ All .clip() after calling drawing ops with a style argument of null. }
|
|
function clip(const rule: string): TjsPDF;
|
|
{ Deletes a page from the PDF. }
|
|
function deletePage: TjsPDF;
|
|
{ Adds an ellipse to PDF. }
|
|
function ellipse(
|
|
{ Coordinate (in units declared at inception of PDF document) against left
|
|
edge of the page. }
|
|
x: JSValue = Undefined;
|
|
{ Coordinate (in units declared at inception of PDF document) against
|
|
upper edge of the page. }
|
|
y: JSValue = Undefined;
|
|
{ Radius along x axis (in units declared at inception of PDF document). }
|
|
rx: JSValue = Undefined;
|
|
{ Radius along y axis (in units declared at inception of PDF document). }
|
|
ry: JSValue = Undefined;
|
|
{ A string specifying the painting style or null. Valid styles
|
|
include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill
|
|
then stroke. A null value postpones setting the style so that a shape
|
|
may be composed using multiple method calls. The last drawing method
|
|
call used to define the shape should not have a null style argument. }
|
|
const style: string = 'S'): TjsPDF;
|
|
{ Get global value of CharSpace. }
|
|
function getCharSpace: Double;
|
|
{ }
|
|
function getCreationDate: TJSDate;
|
|
{ Gets the stroke color for upcoming elements. }
|
|
function getDrawColor: string;
|
|
{ GUID. }
|
|
function getFileId: string;
|
|
{ Gets the fill color for upcoming elements. }
|
|
function getFillColor: string;
|
|
{ Returns an object - a tree of fontName to fontStyle relationships
|
|
available to active PDF document. }
|
|
function getFontList: TJSObject;
|
|
{ Gets the fontsize for upcoming text elements. }
|
|
function getFontSize: Double;
|
|
{ Gets the LineHeightFactor, default: 1.15. }
|
|
function getLineHeightFactor: Double;
|
|
{ Get value of R2L functionality. }
|
|
function getR2L: Boolean;
|
|
{ Gets the text color for upcoming elements. }
|
|
function getTextColor: string;
|
|
{ }
|
|
function insertPage(beforePage: TJSObject): TjsPDF;
|
|
{ Draw a line on the current page. }
|
|
function line(x1: JSValue = Undefined; y1: JSValue = Undefined;
|
|
x2: JSValue = Undefined; y2: JSValue = Undefined): TjsPDF;
|
|
{ Adds series of curves (straight lines or cubic bezier curves) to canvas,
|
|
starting at `x`, `y` coordinates. All data points in `lines` are relative
|
|
to last line origin. `x`, `y` become x1,y1 for first line / curve in the
|
|
set. For lines you only need to specify [x2, y2] - (ending point) vector
|
|
against x1, y1 starting point. For bezier curves you need to specify
|
|
[x2,y2,x3,y3,x4,y4] - vectors to control points 1, 2, ending point. All
|
|
vectors are against the start of the curve - x1,y1. }
|
|
function lines(
|
|
{ Array of *vector* shifts as pairs (lines) or sextets (cubic bezier
|
|
curves). }
|
|
lines: array of TDoubleDynArray;
|
|
{ Coordinate (in units declared at inception of PDF document) against left
|
|
edge of the page. }
|
|
x: JSValue = Undefined;
|
|
{ Coordinate (in units declared at inception of PDF document) against
|
|
upper edge of the page. }
|
|
y: JSValue = Undefined;
|
|
{ (Defaults to [1.0,1.0]) x,y Scaling factor for all vectors. Elements can
|
|
be any floating number Sub-one makes drawing smaller. Over-one grows the
|
|
drawing. Negative flips the direction. }
|
|
scale: TDoubleDynArray = [1.0, 1.0];
|
|
{ A string specifying the painting style or null. Valid styles
|
|
include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill
|
|
then stroke. A null value postpones setting the style so that a shape
|
|
may be composed using multiple method calls. The last drawing method
|
|
call used to define the shape should not have a null style argument. }
|
|
const style: string = 'S';
|
|
{ If true, the path is closed with a straight line from the end of the
|
|
last curve to the starting point. }
|
|
closed: Boolean = False): TjsPDF;
|
|
{ }
|
|
function movePage(targetPage: TJSObject; beforePage: TJSObject): TjsPDF;
|
|
{ Generates the PDF document. If `type` argument is undefined, output is raw
|
|
body of resulting PDF returned as a string. }
|
|
function output(
|
|
{ A string identifying one of the possible output types. Possible values
|
|
are 'arraybuffer', 'blob', 'bloburi'/'bloburl',
|
|
'datauristring'/'dataurlstring', 'datauri'/'dataurl',
|
|
'dataurlnewwindow'. }
|
|
const &type: string;
|
|
{ An object providing some additional signalling to PDF generator.
|
|
Possible options are 'filename'. }
|
|
options: TJSObject = nil): TjsPDF;
|
|
function output_(const &type: string;
|
|
options: TJSObject = nil): string; external name 'output';
|
|
{ Adds a rectangle to PDF. }
|
|
function rect(
|
|
{ Coordinate (in units declared at inception of PDF document) against left
|
|
edge of the page. }
|
|
x: JSValue = Undefined;
|
|
{ Coordinate (in units declared at inception of PDF document) against
|
|
upper edge of the page. }
|
|
y: JSValue = Undefined;
|
|
{ Width (in units declared at inception of PDF document). }
|
|
w: JSValue = Undefined;
|
|
{ Height (in units declared at inception of PDF document). }
|
|
h: JSValue = Undefined;
|
|
{ A string specifying the painting style or null. Valid styles
|
|
include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill
|
|
then stroke. A null value postpones setting the style so that a shape
|
|
may be composed using multiple method calls. The last drawing method
|
|
call used to define the shape should not have a null style argument. }
|
|
const style: string = 'S'): TjsPDF;
|
|
{ Adds a rectangle with rounded corners to PDF. }
|
|
function roundedRect(
|
|
{ Coordinate (in units declared at inception of PDF document) against left
|
|
edge of the page. }
|
|
x: JSValue = Undefined;
|
|
{ Coordinate (in units declared at inception of PDF document) against
|
|
upper edge of the page. }
|
|
y: JSValue = Undefined;
|
|
{ Width (in units declared at inception of PDF document). }
|
|
w: JSValue = Undefined;
|
|
{ Height (in units declared at inception of PDF document). }
|
|
h: JSValue = Undefined;
|
|
{ Radius along x axis (in units declared at inception of PDF document). }
|
|
rx: JSValue = Undefined;
|
|
{ Radius along y axis (in units declared at inception of PDF document). }
|
|
ry: JSValue = Undefined;
|
|
{ A string specifying the painting style or null. Valid styles
|
|
include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill
|
|
then stroke. A null value postpones setting the style so that a shape
|
|
may be composed using multiple method calls. The last drawing method
|
|
call used to define the shape should not have a null style argument. }
|
|
const style: string = 'S'): TjsPDF;
|
|
{ Saves as PDF document. An alias of jsPDF.output('save', 'filename.pdf').
|
|
Uses FileSaver.js-method saveAs. }
|
|
function save(
|
|
{ The filename including extension. }
|
|
const filename: TFileName;
|
|
{ An Object with additional options, possible options: 'returnPromise'. }
|
|
options: TJSObject = nil): TjsPDF;
|
|
{ Set global value of CharSpace. }
|
|
function setCharSpace(charSpace: JSValue): TjsPDF;
|
|
{ }
|
|
function setCreationDate(date: TJSDate): TjsPDF;
|
|
{ Set the display mode options of the page like zoom and layout. }
|
|
function setDisplayMode(
|
|
{ You can pass an integer or percentage as a string. 2 will scale the
|
|
document up 2x, '200%' will scale up by the same amount. You can also
|
|
set it to 'fullwidth', 'fullheight', 'fullpage', or 'original'. Only
|
|
certain PDF readers support this, such as Adobe Acrobat. }
|
|
zoom: JSValue;
|
|
{ Layout mode can be:
|
|
'continuous' - this is the default continuous scroll.
|
|
'single' - the single page mode only shows one page at a time.
|
|
'twoleft' - two column left mode, first page starts on the left, and
|
|
'tworight' - pages are laid out in two columns, with the first page on
|
|
the right. This would be used for books. }
|
|
const layout: string = '';
|
|
{ 'UseOutlines' - it shows the outline of the document on the left.
|
|
'UseThumbs' - shows thumbnails along the left.
|
|
'FullScreen' - prompts the user to enter fullscreen mode. }
|
|
const pmode: string = ''): TjsPDF;
|
|
{ Adds a properties to the PDF document. }
|
|
function setDocumentProperties(
|
|
{ property_name-to-property_value object structure. }
|
|
A: TJSObject): TjsPDF;
|
|
{ Sets the stroke color for upcoming elements. Depending on the number of
|
|
arguments given, Gray, RGB, or CMYK color space is implied. When only ch1
|
|
is given, "Gray" color space is implied and it must be a value in the
|
|
range from 0.00 (solid black) to to 1.00 (white) if values are
|
|
communicated as String types, or in range from 0 (black) to 255 (white) if
|
|
communicated as Number type. The RGB-like 0-255 range is provided for
|
|
backward compatibility. When only ch1,ch2,ch3 are given, "RGB" color space
|
|
is implied and each value must be in the range from 0.00 (minimum intensity)
|
|
to to 1.00 (max intensity) if values are communicated as String types, or
|
|
from 0 (min intensity) to to 255 (max intensity) if values are
|
|
communicated as Number types. The RGB-like 0-255 range is provided for
|
|
backward compatibility. When ch1,ch2,ch3,ch4 are given, "CMYK" color space
|
|
is implied and each value must be a in the range from 0.00 (0% concentration)
|
|
to to 1.00 (100% concentration) Because JavaScript treats fixed point
|
|
numbers badly (rounds to floating point nearest to binary representation)
|
|
it is highly advised to communicate the fractional numbers as String types,
|
|
not JavaScript Number type. }
|
|
function setDrawColor(
|
|
(* Color channel value or {string} ch1 color value in hexadecimal,
|
|
example: '#FFFFFF'. *)
|
|
ch1: JSValue = Undefined;
|
|
{ Color channel value. }
|
|
ch2: JSValue = Undefined;
|
|
{ Color channel value. }
|
|
ch3: JSValue = Undefined;
|
|
{ Color channel value. }
|
|
ch4: JSValue = Undefined): TjsPDF;
|
|
{ }
|
|
function setFileId(
|
|
{ GUID. }
|
|
const value: string): TjsPDF;
|
|
{ Sets the fill color for upcoming elements. Depending on the number of arguments given, Gray, RGB, or CMYK color space is implied. When only ch1 is given, "Gray" color space is implied and it must be a value in the range from 0.00 (solid black) to to 1.00 (white) if values are communicated as String types, or in range from 0 (black) to 255 (white) if communicated as Number type. The RGB-like 0-255 range is provided for backward compatibility. When only ch1,ch2,ch3 are given, "RGB" color space is implied and each value must be in the range from 0.00 (minimum intensity) to to 1.00 (max intensity) if values are communicated as String types, or from 0 (min intensity) to to 255 (max intensity) if values are communicated as Number types. The RGB-like 0-255 range is provided for backward compatibility. When ch1,ch2,ch3,ch4 are given, "CMYK" color space is implied and each value must be a in the range from 0.00 (0% concentration) to to 1.00 (100% concentration) Because JavaScript treats fixed point numbers badly (rounds to floating point nearest to binary representation) it is highly advised to communicate the fractional numbers as String types, not JavaScript Number type. }
|
|
function setFillColor(
|
|
(* Color channel value or {string} ch1 color value in hexadecimal,
|
|
example: '#FFFFFF'. *)
|
|
ch1: JSValue = Undefined;
|
|
{ Color channel value. }
|
|
ch2: JSValue = Undefined;
|
|
{ Color channel value. }
|
|
ch3: JSValue = Undefined;
|
|
{ Color channel value. }
|
|
ch4: JSValue = Undefined): TjsPDF;
|
|
{ Sets text font face, variant for upcoming text elements. See output of
|
|
jsPDF.getFontList() for possible font names, styles. }
|
|
function setFont(
|
|
{ Font name or family. Example: "times". }
|
|
const fontName: string;
|
|
{ Font style or variant. Example: "italic". }
|
|
const fontStyle: string): TjsPDF; overload;
|
|
function setFont(const fontName: string): TjsPDF; overload;
|
|
{ Sets font size for upcoming text elements. }
|
|
function setFontSize(
|
|
{ Font size in points. }
|
|
size: JSValue): TjsPDF;
|
|
{ Switches font style or variant for upcoming text elements, while keeping
|
|
the font face or family same. See output of jsPDF.getFontList() for
|
|
possible font names, styles. }
|
|
function setFontStyle(
|
|
{ Font style or variant. Example: "italic". }
|
|
const style: string): TjsPDF;
|
|
(* Sets the line cap styles. See {jsPDF.CapJoinStyles} for variants. *)
|
|
function setLineCap(
|
|
{ A string or number identifying the type of line cap. }
|
|
style: JSValue): TjsPDF;
|
|
{ Sets the LineHeightFactor of proportion. }
|
|
function setLineHeightFactor(
|
|
{ LineHeightFactor value. Default: 1.15. }
|
|
value: JSValue): TjsPDF;
|
|
(* Sets the line join styles. See {jsPDF.CapJoinStyles} for variants. *)
|
|
function setLineJoin(
|
|
{ A string or number identifying the type of line join. }
|
|
style: JSValue): TjsPDF;
|
|
{ Sets line width for upcoming lines. }
|
|
function setLineWidth(
|
|
{ Line width (in units declared at inception of PDF document). }
|
|
width: JSValue): TjsPDF;
|
|
{ Adds (and transfers the focus to) new page to the PDF document. }
|
|
function setPage(
|
|
{ Switch the active page to the page number specified. }
|
|
page: Cardinal): TjsPDF;
|
|
{ Set value of R2L functionality. }
|
|
function setR2L(value: Boolean = True): TjsPDF;
|
|
{ Sets the text color for upcoming elements. Depending on the number of
|
|
arguments given, Gray, RGB, or CMYK color space is implied. When only ch1
|
|
is given, "Gray" color space is implied and it must be a value in the
|
|
range from 0.00 (solid black) to to 1.00 (white) if values are
|
|
communicated as String types, or in range from 0 (black) to 255 (white) if
|
|
communicated as Number type. The RGB-like 0-255 range is provided for
|
|
backward compatibility. When only ch1,ch2,ch3 are given, "RGB" color space
|
|
is implied and each value must be in the range from 0.00 (minimum intensity)
|
|
to to 1.00 (max intensity) if values are communicated as String types, or
|
|
from 0 (min intensity) to to 255 (max intensity) if values are communicated
|
|
as Number types. The RGB-like 0-255 range is provided for backward
|
|
compatibility. When ch1,ch2,ch3,ch4 are given, "CMYK" color space is
|
|
implied and each value must be a in the range from 0.00 (0% concentration)
|
|
to to 1.00 (100% concentration) Because JavaScript treats fixed point
|
|
numbers badly (rounds to floating point nearest to binary representation)
|
|
it is highly advised to communicate the fractional numbers as String types,
|
|
not JavaScript Number type. }
|
|
function setTextColor(
|
|
(* Color channel value or {string} ch1 color value in hexadecimal,
|
|
example: '#FFFFFF'. *)
|
|
ch1: JSValue = Undefined;
|
|
{ Color channel value. }
|
|
ch2: JSValue = Undefined;
|
|
{ Color channel value. }
|
|
ch3: JSValue = Undefined;
|
|
{ Color channel value. }
|
|
ch4: JSValue = Undefined): TjsPDF;
|
|
{ Adds text to page. Supports adding multiline text when 'text' argument is
|
|
an Array of Strings. }
|
|
function text(
|
|
{ String or array of strings to be added to the page. Each line is shifted
|
|
one line down per font, spacing settings declared before this call. }
|
|
const text: string;
|
|
{ Coordinate (in units declared at inception of PDF document) against left
|
|
edge of the page. }
|
|
x: JSValue = Undefined;
|
|
{ Coordinate (in units declared at inception of PDF document) against
|
|
upper edge of the page. }
|
|
y: JSValue = Undefined;
|
|
{ Collection of settings signaling how the text must be encoded. }
|
|
options: JSValue = Undefined): TjsPDF; overload; varargs;
|
|
function text(const text: array of string;
|
|
x: JSValue = Undefined; y: JSValue = Undefined;
|
|
options: JSValue = nil): TjsPDF; overload; varargs;
|
|
{ Adds a triangle to PDF. }
|
|
function triangle(
|
|
{ Coordinate (in units declared at inception of PDF document) against left
|
|
edge of the page. }
|
|
x1: JSValue = Undefined;
|
|
{ Coordinate (in units declared at inception of PDF document) against
|
|
upper edge of the page. }
|
|
y1: JSValue = Undefined;
|
|
{ Coordinate (in units declared at inception of PDF document) against
|
|
left edge of the page. }
|
|
x2: JSValue = Undefined;
|
|
{ Coordinate (in units declared at inception of PDF document) against
|
|
upper edge of the page. }
|
|
y2: JSValue = Undefined;
|
|
{ Coordinate (in units declared at inception of PDF document) against
|
|
left edge of the page. }
|
|
x3: JSValue = Undefined;
|
|
{ Coordinate (in units declared at inception of PDF document) against
|
|
upper edge of the page. }
|
|
y3: JSValue = Undefined;
|
|
{ A string specifying the painting style or null. Valid styles
|
|
include: 'S' [default] - stroke, 'F' - fill, and 'DF' (or 'FD') - fill
|
|
then stroke. A null value postpones setting the style so that a shape
|
|
may be composed using multiple method calls. The last drawing method
|
|
call used to define the shape should not have a null style argument. }
|
|
const style: string = ''): TjsPDF;
|
|
end;
|
|
|
|
implementation
|
|
|
|
end.
|