mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-04-12 13:59:24 +02:00
157 lines
4.0 KiB
ObjectPascal
157 lines
4.0 KiB
ObjectPascal
program basic;
|
|
|
|
{$MODE OBJFPC}
|
|
{$MODESWITCH EXTERNALCLASS}
|
|
|
|
uses
|
|
Web,
|
|
jsPDF;
|
|
|
|
var
|
|
doc: TjsPDF;
|
|
opt: string;
|
|
edSelExample: TJSHTMLSelectElement;
|
|
btDownload: TJSHTMLButtonElement;
|
|
ebPreview: TJSHTMLEmbedElement;
|
|
|
|
procedure edSelExampleChange;
|
|
begin
|
|
doc := TjsPDF.new;
|
|
opt := edSelExample.value;
|
|
case opt of
|
|
'hello': doc.text('Hello world. I love TjsPDF! :-)', 10, 10);
|
|
'font':
|
|
begin
|
|
doc.text('This is the default font.', 20, 20);
|
|
|
|
doc.setFont('courier');
|
|
doc.setFontStyle('normal');
|
|
doc.text('This is courier normal.', 20, 30);
|
|
|
|
doc.setFont('times');
|
|
doc.setFontStyle('italic');
|
|
doc.text('This is times italic.', 20, 40);
|
|
|
|
doc.setFont('helvetica');
|
|
doc.setFontStyle('bold');
|
|
doc.text('This is helvetica bold.', 20, 50);
|
|
|
|
doc.setFont('courier');
|
|
doc.setFontStyle('bolditalic');
|
|
doc.text('This is courier bolditalic.', 20, 60);
|
|
|
|
doc.setFont('times');
|
|
doc.setFontStyle('normal');
|
|
doc.text('This is centred text.', 105, 80, nil, nil, 'center');
|
|
doc.text('And a little bit more underneath it.', 105, 90, nil, nil, 'center');
|
|
doc.text('This is right aligned text', 200, 100, nil, nil, 'right');
|
|
doc.text('And some more', 200, 110, nil, nil, 'right');
|
|
doc.text('Back to left',20, 120);
|
|
|
|
doc.text('10 degrees rotated', 20, 140, nil, 10);
|
|
doc.text('-10 degrees rotated', 20, 160, nil, -10);
|
|
end;
|
|
'two_page':
|
|
begin
|
|
doc.text('Hello world!', 20, 20);
|
|
doc.text('This is client-side Javascript, pumping out a PDF.', 20, 30);
|
|
doc.addPage('l', 'a6');
|
|
doc.text('Do you like that?', 20, 20);
|
|
end;
|
|
'circles':
|
|
begin
|
|
doc.ellipse(40, 20, 10, 5);
|
|
|
|
doc.setFillColor(0,0,255);
|
|
doc.ellipse(80, 20, 10, 5, 'F');
|
|
|
|
doc.setLineWidth(1);
|
|
doc.setDrawColor(0);
|
|
doc.setFillColor(255,0,0);
|
|
doc.circle(120, 20, 5, 'FD');
|
|
end;
|
|
'lines':
|
|
begin
|
|
doc.line(20, 20, 60, 20); // horizontal line
|
|
|
|
doc.setLineWidth(0.5);
|
|
doc.line(20, 25, 60, 25);
|
|
|
|
doc.setLineWidth(1);
|
|
doc.line(20, 30, 60, 30);
|
|
|
|
doc.setLineWidth(1.5);
|
|
doc.line(20, 35, 60, 35);
|
|
|
|
doc.setDrawColor(255,0,0); // draw red lines
|
|
|
|
doc.setLineWidth(0.1);
|
|
doc.line(100, 20, 100, 60); // vertical line
|
|
|
|
doc.setLineWidth(0.5);
|
|
doc.line(105, 20, 105, 60);
|
|
|
|
doc.setLineWidth(1);
|
|
doc.line(110, 20, 110, 60);
|
|
|
|
doc.setLineWidth(1.5);
|
|
doc.line(115, 20, 115, 60);
|
|
end;
|
|
'rectangles':
|
|
begin
|
|
// Empty square
|
|
doc.rect(20, 20, 10, 10);
|
|
|
|
// Filled square
|
|
doc.rect(40, 20, 10, 10, 'F');
|
|
|
|
// Empty red square
|
|
doc.setDrawColor(255,0,0);
|
|
doc.rect(60, 20, 10, 10);
|
|
|
|
// Filled square with red borders
|
|
doc.setDrawColor(255,0,0);
|
|
doc.rect(80, 20, 10, 10, 'FD');
|
|
|
|
// Filled red square
|
|
doc.setDrawColor(0);
|
|
doc.setFillColor(255,0,0);
|
|
doc.rect(100, 20, 10, 10, 'F');
|
|
|
|
// Filled red square with black borders
|
|
doc.setDrawColor(0);
|
|
doc.setFillColor(255,0,0);
|
|
doc.rect(120, 20, 10, 10, 'FD');
|
|
|
|
// Black square with rounded corners
|
|
doc.setDrawColor(0);
|
|
doc.setFillColor(255, 255, 255);
|
|
doc.roundedRect(140, 20, 10, 10, 3, 3, 'FD');
|
|
end;
|
|
'triangles':
|
|
begin
|
|
doc.triangle(60, 100, 60, 120, 80, 110, 'FD');
|
|
|
|
doc.setLineWidth(1);
|
|
doc.setDrawColor(255,0,0);
|
|
doc.setFillColor(0,0,255);
|
|
doc.triangle(100, 100, 110, 100, 120, 130, 'FD');
|
|
end;
|
|
end;
|
|
ebPreview.src := doc.output_('datauristring');
|
|
btDownload.disabled := opt = '';
|
|
end;
|
|
|
|
procedure btDownloadClick;
|
|
begin
|
|
doc.save(opt + '.pdf');
|
|
end;
|
|
|
|
begin
|
|
edSelExample := TJSHTMLSelectElement(document.getElementById('edSelExample'));
|
|
edSelExample.addEventListener('change', @edSelExampleChange);
|
|
btDownload := TJSHTMLButtonElement(document.getElementById('btDownload'));
|
|
btDownload.addEventListener('click', @btDownloadClick);
|
|
ebPreview := TJSHTMLEmbedElement(document.getElementById('ebPreview'));
|
|
end.
|