home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2001 December
/
Chip_2001-12_cd1.bin
/
zkuste
/
delphi
/
kompon
/
d3456
/
POWERPDF.ZIP
/
PowerPdf
/
Example
/
ConsoleProgramDemo
/
BatchPdf.dpr
< prev
next >
Wrap
Text File
|
2001-09-15
|
5KB
|
242 lines
{*
*
* BatchPdf.dpr
*
* To run this program, open command-prompt window and run this program with
* filename parameter
*
* ex) BatchPdf.exe batchpdf.pdf
*}
program BatchPdf;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes,
PdfDoc,
PdfTypes,
PdfFonts,
DB,
DBTables;
var
FDoc: TPdfDoc;
FFileName: string;
FOutFile: TFileStream;
FPage: integer;
FQuery: TQuery;
procedure TextOut(X, Y: Single; S: string);
begin
with FDoc.Canvas do
begin
BeginText;
MoveTextPoint(X, Y);
ShowText(S);
EndText;
end;
end;
procedure DrawLine(X1, Y1, X2, Y2, Width: Single);
begin
with FDoc.Canvas do
begin
MoveTo(X1, Y1);
LineTo(X2, Y2);
Stroke;
end;
end;
procedure WriteHeader;
var
s: string;
w: integer;
begin
// writing the headline of the pages
with FDoc.Canvas do
begin
// setting font
SetFont('Arial-BoldItalic', 16);
// printing text.
TextOut(90, 770, 'Customer.DB');
SetFont('Arial-BoldItalic', 9);
S := FormatDateTime('YYYY/MM/DD', Date);
w := Round(TextWidth(S));
// writing header text.
TextOut(530 - w, 770, S);
SetRGBStrokeColor($00008800);
DrawLine(90, 765, 530, 765, 1.5);
end;
end;
procedure WriteFooter;
var
w: Single;
s: string;
begin
with FDoc.Canvas do
begin
// Setting font and print text with center align
SetFont('Times-Roman', 8);
DrawLine(90, 70, 530, 70, 1.5);
s := 'Page ' + IntToStr(FPage);
w := TextWidth(s);
TextOut((PageWidth - w) / 2, 55, S);
end;
end;
procedure WriteRow(YPos: Single);
var
i: integer;
s: string;
begin
// printing the detail lines
with FDoc.Canvas do
begin
if not FQuery.Eof then
begin
TextOut(95, YPos - 15, FQuery.FieldByName('CustNo').AsString);
s := FQuery.FieldByName('Company').AsString;
// calculate the number of the charactor which can be contained in the
// width of the frame.
i := MeasureText(s, 130);
TextOut(135, YPos - 15, Copy(s, 1, i));
s := FQuery.FieldByName('State').AsString +
FQuery.FieldByName('City').AsString +
FQuery.FieldByName('Addr1').AsString;
i := MeasureText(s, 175);
TextOut(275, YPos - 15, Copy(s, 1, i));
TextOut(455, YPos - 15, FQuery.FieldByName('Phone').AsString);
FQuery.Next;
end;
end;
end;
procedure WritePage;
var
i: integer;
XPos, YPos: Single;
begin
with FDoc.Canvas do
begin
// writing the outline
SetLineWidth(1.5);
Rectangle(90, 80, 440, 680);
Stroke;
// writing the horizontal lines.
YPos := 760;
SetLineWidth(0.75);
for i := 0 to 32 do
begin
YPos := YPos - 20;
MoveTo(90, YPos);
LineTo(530, YPos);
Stroke;
end;
// writing the header of the text.
SetLineWidth(1);
SetFont('Times-Roman', 10.5);
XPos := 90;
TextOut(XPos + 5, 745, 'NO.');
XPos := 130;
DrawLine(XPos, 760, XPos, 80, 1);
TextOut(XPos + 5, 745, 'Company');
XPos := 270;
DrawLine(XPos, 760, XPos, 80, 1);
TextOut(XPos + 5, 745, 'Address');
XPos := 450;
DrawLine(XPos, 760, XPos, 80, 1);
TextOut(XPos + 5, 745, 'Phone');
XPos := 530;
DrawLine(XPos, 760, XPos, 80, 1);
// setting the font for the detail lines.
SetFont('Arial', 10.5);
end;
// printing the detail lines with 20 dot height.
YPos := 740;
for i := 0 to 32 do
begin
WriteRow(YPos);
YPos := YPos - 20;
end;
end;
begin
if ParamCount > 0 then
FFileName := ParamStr(1)
else
begin
Writeln('Usage: bachpdf <pdf-filename>');
Halt(2);
end;
// create output-filestream.
FOutFile := TFileStream.Create(FFileName, fmCreate);
FPage := 1;
// create TQuery object and set properties.
FQuery := TQuery.Create(nil);
with FQuery do
try
Writeln('BatchPdf opening database..');
DatabaseName := 'DBDEMOS';
SQL.Text := 'SELECT CustNo, Company, State, City, Addr1, Phone from Customer';
Open;
// create TPdfDoc object.
Writeln('BatchPdf creating document..');
FDoc := TPdfDoc.Create;
with FDoc do
try
// create a new document.
NewDoc;
// printind page from the result of the query.
while not FQuery.Eof do
begin
AddPage;
WriteHeader;
WritePage;
WriteFooter;
inc(FPage);
end;
// save the pdf-document to the file-stream.
Writeln('BatchPdf saving document..');
FDoc.SaveToStream(FOutFile);
finally
FDoc.Free;
end;
Close;
Writeln('BatchPdf end..');
finally
Free;
FOutFile.Free;
end;
end.