mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-10-21 02:21:58 +02:00
LazReport, Implemented PDF export
git-svn-id: trunk@16900 -
This commit is contained in:
parent
6361b90a57
commit
70dafcbd7b
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -502,6 +502,12 @@ components/lazreport/source/addons/addfunction/lrAddFunctionLibrary.pas svneol=n
|
||||
components/lazreport/source/addons/addfunction/lr_add_function.lpk svneol=native#text/plain
|
||||
components/lazreport/source/addons/addfunction/lr_add_function.pas svneol=native#text/pascal
|
||||
components/lazreport/source/addons/addfunction/lr_add_function_const.pas svneol=native#text/pascal
|
||||
components/lazreport/source/addons/pdfexport/lazreportpdfexport.lpk svneol=native#text/plain
|
||||
components/lazreport/source/addons/pdfexport/lazreportpdfexport.pas svneol=native#text/plain
|
||||
components/lazreport/source/addons/pdfexport/lr_e_pdf.pas svneol=native#text/plain
|
||||
components/lazreport/source/addons/pdfexport/lr_pdfexp_reg.lrs svneol=native#text/plain
|
||||
components/lazreport/source/addons/pdfexport/lr_pdfexp_reg.pas svneol=native#text/plain
|
||||
components/lazreport/source/addons/pdfexport/tfrtnpdfexport.png -text svneol=unset#image/png
|
||||
components/lazreport/source/barcode.pas svneol=native#text/pascal
|
||||
components/lazreport/source/fr_pencil.lrs svneol=native#text/plain
|
||||
components/lazreport/source/languages/lr_const.de.po svneol=native#text/plain
|
||||
|
@ -0,0 +1,64 @@
|
||||
<?xml version="1.0"?>
|
||||
<CONFIG>
|
||||
<Package Version="3">
|
||||
<PathDelim Value="\"/>
|
||||
<Name Value="lazreportpdfexport"/>
|
||||
<Author Value="Jesus Reyes A."/>
|
||||
<CompilerOptions>
|
||||
<Version Value="8"/>
|
||||
<PathDelim Value="\"/>
|
||||
<SearchPaths>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Parsing>
|
||||
<SyntaxOptions>
|
||||
<CStyleOperator Value="False"/>
|
||||
</SyntaxOptions>
|
||||
</Parsing>
|
||||
<Other>
|
||||
<CompilerPath Value="$(CompPath)"/>
|
||||
</Other>
|
||||
</CompilerOptions>
|
||||
<Description Value="PDF Exporter for PDF
|
||||
"/>
|
||||
<Version Minor="5"/>
|
||||
<Files Count="2">
|
||||
<Item1>
|
||||
<Filename Value="lr_e_pdf.pas"/>
|
||||
<UnitName Value="lr_e_pdf"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<Filename Value="lr_pdfexp_reg.pas"/>
|
||||
<HasRegisterProc Value="True"/>
|
||||
<UnitName Value="lr_pdfexp_reg"/>
|
||||
</Item2>
|
||||
</Files>
|
||||
<Type Value="RunAndDesignTime"/>
|
||||
<RequiredPkgs Count="5">
|
||||
<Item1>
|
||||
<PackageName Value="IDEIntf"/>
|
||||
</Item1>
|
||||
<Item2>
|
||||
<PackageName Value="LCL"/>
|
||||
</Item2>
|
||||
<Item3>
|
||||
<PackageName Value="pack_powerpdf"/>
|
||||
<MinVersion Minor="9" Valid="True"/>
|
||||
</Item3>
|
||||
<Item4>
|
||||
<PackageName Value="lazreport"/>
|
||||
</Item4>
|
||||
<Item5>
|
||||
<PackageName Value="FCL"/>
|
||||
<MinVersion Major="1" Valid="True"/>
|
||||
</Item5>
|
||||
</RequiredPkgs>
|
||||
<UsageOptions>
|
||||
<UnitPath Value="$(PkgOutDir)\"/>
|
||||
</UsageOptions>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<IgnoreBinaries Value="False"/>
|
||||
</PublishOptions>
|
||||
</Package>
|
||||
</CONFIG>
|
@ -0,0 +1,21 @@
|
||||
{ This file was automatically created by Lazarus. do not edit!
|
||||
This source is only used to compile and install the package.
|
||||
}
|
||||
|
||||
unit lazreportpdfexport;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
lr_e_pdf, lr_pdfexp_reg, LazarusPackageIntf;
|
||||
|
||||
implementation
|
||||
|
||||
procedure Register;
|
||||
begin
|
||||
RegisterUnit('lr_pdfexp_reg', @lr_pdfexp_reg.Register);
|
||||
end;
|
||||
|
||||
initialization
|
||||
RegisterPackage('lazreportpdfexport', @Register);
|
||||
end.
|
303
components/lazreport/source/addons/pdfexport/lr_e_pdf.pas
Normal file
303
components/lazreport/source/addons/pdfexport/lr_e_pdf.pas
Normal file
@ -0,0 +1,303 @@
|
||||
{****************************************************}
|
||||
{ }
|
||||
{ FastReport v2.3 }
|
||||
{ PDF export filter Ver 1.0 }
|
||||
{ }
|
||||
{ By : Ricardo Cardona Ramirez }
|
||||
{ }
|
||||
{ PowerPDF }
|
||||
{ http://www.est.hi-ho.ne.jp/takeshi_kanno/powerpdf/ }
|
||||
{ ZLib Units Delphi 5-6 }
|
||||
{ http://www.base2ti.com/zlib.htm }
|
||||
{ }
|
||||
{****************************************************}
|
||||
|
||||
unit lr_e_pdf;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils, Windows, Messages, Classes, Graphics, Forms, StdCtrls, lr_BarC,
|
||||
lr_class, PdfDoc, PdfTypes, PdfFonts, PReport, Dialogs, Controls;
|
||||
|
||||
type
|
||||
TfrTNPDFExport = class(TComponent) // fake component
|
||||
end;
|
||||
|
||||
TfrTNPDFExportFilter = class(TfrExportFilter)
|
||||
private
|
||||
NewPage: Boolean;
|
||||
PDF: TPReport;
|
||||
PPage: TPRPage;
|
||||
PRPanel: TPRPanel;
|
||||
FOutline: TPROutLineEntry;
|
||||
FPageNo : Integer;
|
||||
DummyControl: TForm;
|
||||
public
|
||||
constructor Create(AStream: TStream); override;
|
||||
destructor Destroy; override;
|
||||
procedure OnBeginPage; override;
|
||||
procedure OnEndPage; override;
|
||||
procedure ShowBackGround(View: TfrView; x, y, h, w: integer);
|
||||
procedure Frame(View: TfrView; x, y, h, w: integer);
|
||||
procedure ShowFrame(View: TfrView; x, y, h, w: integer);
|
||||
procedure ShowBarCode(View: TfrBarCodeView; x, y, h, w: integer);
|
||||
procedure ShowPicture(View: TfrPictureView; x, y, h, w: integer);
|
||||
procedure OnText(X, Y: Integer; const Text: string; View: TfrView);
|
||||
override;
|
||||
procedure OnData(x, y: Integer; View: TfrView); override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
||||
uses lr_Const;
|
||||
|
||||
type
|
||||
TfrMemoView_ = class(TfrMemoView);
|
||||
TPRText_ = class(TPRText);
|
||||
|
||||
const
|
||||
PDFEscx = 0.8;
|
||||
PDFEscy = 0.8;
|
||||
|
||||
constructor TfrTNPDFExportFilter.Create(AStream: TStream);
|
||||
begin
|
||||
inherited;
|
||||
PDF := TPReport.Create(nil);
|
||||
//PDF.CompressionMethod := cmFlateDecode;
|
||||
PDF.UseOutlines := True;
|
||||
PDF.PageLayout := plOneColumn;
|
||||
PDF.BeginDoc;
|
||||
DummyControl := TForm.Create(nil);
|
||||
NewPage := False;
|
||||
FPageNo := 0;
|
||||
end;
|
||||
|
||||
destructor TfrTNPDFExportFilter.Destroy;
|
||||
begin
|
||||
PDF.GetPdfDoc.SaveToStream(Stream);
|
||||
PDF.Free;
|
||||
DummyControl.Free;
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TfrTNPDFExportFilter.OnBeginPage;
|
||||
begin
|
||||
{Add New Page}
|
||||
Inc(FPageNo);
|
||||
|
||||
PPage := TPRPage.Create(PDF);
|
||||
PPage.Parent := DummyControl;
|
||||
PPage.MarginBottom := 0;
|
||||
PPage.MarginTop := 0;
|
||||
PPage.MarginLeft := 0;
|
||||
PPage.MarginRight := 0;
|
||||
|
||||
PPage.Height := trunc(CurReport.EMFPages[FPageNo - 1]^.PrnInfo.Pgh*PDFEscy);
|
||||
PPage.Width := trunc(CurReport.EMFPages[FPageNo - 1]^.PrnInfo.Pgw*PDFEscx);
|
||||
|
||||
PRPanel := TPRPanel.Create(PPage);
|
||||
PRPanel.Parent := PPage;
|
||||
PRPanel.Left := 0;
|
||||
PRPanel.Top := 0;
|
||||
PRPanel.Width := PPage.Width;
|
||||
PRPanel.Height := PPage.Height;
|
||||
end;
|
||||
|
||||
procedure TfrTNPDFExportFilter.OnEndPage;
|
||||
begin
|
||||
PDF.Print(PPage);
|
||||
|
||||
FOutline := PDF.OutlineRoot.AddChild;
|
||||
FOutline.Dest := PDF.CreateDestination;
|
||||
FOutline.Dest.Top := 0;
|
||||
FOutline.Title := 'Page ' + IntToStr(FPageNo);
|
||||
|
||||
FreeAndNil(PPage);
|
||||
end;
|
||||
|
||||
procedure TfrTNPDFExportFilter.ShowBackGround(View: TfrView; x, y, h, w:
|
||||
integer);
|
||||
var
|
||||
PRRect: TPRRect;
|
||||
begin
|
||||
PRRect := TPRRect.Create(PRPanel);
|
||||
PRRect.Parent := PRPanel;
|
||||
PRRect.FillColor := View.FillColor;
|
||||
PRRect.LineColor := clNone;
|
||||
PRRect.LineStyle := psSolid;
|
||||
PRRect.Left := x;
|
||||
PRRect.Top := y;
|
||||
PRRect.Height := h;
|
||||
PRRect.Width := w;
|
||||
end;
|
||||
|
||||
procedure TfrTNPDFExportFilter.Frame(View: TfrView; x, y, h, w: integer);
|
||||
var
|
||||
PRRect: TPRRect;
|
||||
begin
|
||||
PRRect := TPRRect.Create(PRPanel);
|
||||
PRRect.Parent := PRPanel;
|
||||
PRRect.FillColor := clNone;
|
||||
|
||||
PRRect.Left := x;
|
||||
PRRect.Top := y;
|
||||
PRRect.Height := h;
|
||||
PRRect.Width := w;
|
||||
|
||||
PRRect.LineStyle := TPenStyle(View.FrameStyle);
|
||||
PRRect.LineWidth := View.FrameWidth - 0.5;
|
||||
PRRect.LineColor := View.FrameColor;
|
||||
end;
|
||||
|
||||
procedure TfrTNPDFExportFilter.ShowFrame(View: TfrView; x, y, h, w: integer);
|
||||
begin
|
||||
|
||||
if ([frbLeft,frbTop,frbRight,frbBottom]-View.Frames=[]) and
|
||||
(View.FrameStyle = frsSolid) then
|
||||
begin
|
||||
Frame(View, x, y, h, w);
|
||||
end
|
||||
else
|
||||
begin
|
||||
if frbRight in View.Frames then
|
||||
Frame(View, x + w - 1, y, h, 0); //Right
|
||||
if frbLeft in View.Frames then
|
||||
Frame(View, x, y, h, 0); //Left
|
||||
if frbBottom in View.Frames then
|
||||
Frame(View, x, y + h - 1, 0, w); //Botton
|
||||
if frbTop in View.Frames then
|
||||
Frame(View, x, y, 0, w); //Top
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrTNPDFExportFilter.ShowBarCode(View: TfrBarCodeView; x, y, h, w:
|
||||
integer);
|
||||
var
|
||||
Bitmap: TBitmap;
|
||||
PRImage: TPRImage;
|
||||
oldX, oldY: Integer;
|
||||
begin
|
||||
oldX := View.x;
|
||||
oldy := View.y;
|
||||
View.x := 0;
|
||||
View.y := 0;
|
||||
Bitmap := TBitmap.Create;
|
||||
try
|
||||
PRImage := TPRImage.Create(PRPanel);
|
||||
PRImage.Parent := PRPanel;
|
||||
PRImage.Stretch := True;
|
||||
PRImage.SharedImage := False;
|
||||
PRImage.Left := x;
|
||||
PRImage.Top := y;
|
||||
PRImage.Height := h;
|
||||
PRImage.Width := w;
|
||||
|
||||
Bitmap.Height := View.dy;
|
||||
Bitmap.Width := View.dx;
|
||||
|
||||
TfrBarCodeView(View).Draw(Bitmap.Canvas);
|
||||
|
||||
PRImage.Picture.Bitmap := Bitmap;
|
||||
finally
|
||||
FreeAndNil(Bitmap);
|
||||
end;
|
||||
View.x := oldX;
|
||||
View.y := oldY;
|
||||
end;
|
||||
|
||||
procedure TfrTNPDFExportFilter.ShowPicture(View: TfrPictureView; x, y, h,
|
||||
w: integer);
|
||||
var
|
||||
Bitmap: TBitmap;
|
||||
PRImage: TPRImage;
|
||||
begin
|
||||
Bitmap := TBitmap.Create;
|
||||
try
|
||||
PRImage := TPRImage.Create(PRPanel);
|
||||
PRImage.Parent := PRPanel;
|
||||
PRImage.Stretch := True;
|
||||
PRImage.SharedImage := False;
|
||||
PRImage.Left := x;
|
||||
PRImage.Top := y;
|
||||
PRImage.Height := h;
|
||||
PRImage.Width := w;
|
||||
Bitmap.Height := View.Picture.Height;
|
||||
Bitmap.Width := View.Picture.Width;
|
||||
Bitmap.Canvas.Draw(0, 0, View.Picture.Graphic);
|
||||
PRImage.Picture.Bitmap := Bitmap;
|
||||
finally
|
||||
FreeAndNil(Bitmap);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrTNPDFExportFilter.OnData(x, y: Integer; View: TfrView);
|
||||
var
|
||||
nx, ny, ndx, ndy: Integer;
|
||||
begin
|
||||
nx := Round(x * PDFEscx);
|
||||
ny := Round(y * PDFEscy);
|
||||
ndx := Round((View.dx) * PDFEscx + 1) ;
|
||||
ndy := Round((View.dy) * PDFEscy + 1) ;
|
||||
|
||||
if View.FillColor <> clNone then
|
||||
ShowBackGround(View, nx, ny, ndy, ndx);
|
||||
|
||||
if View is TfrBarCodeView then
|
||||
ShowBarCode(TfrBarCodeView(View), nx, ny, ndy, ndx)
|
||||
else if View is TfrPictureView then
|
||||
ShowPicture(TfrPictureView(View), nx, ny, ndy, ndx);
|
||||
// For debugging only
|
||||
// else if not View is TfrMemoView then
|
||||
// MessageDlg(View.ClassName, mtWarning, [mbOK], 0);
|
||||
|
||||
if (View.Frames<>[]) and not (View is TfrBarCodeView) then
|
||||
ShowFrame(View, nx, ny, ndy, ndx);
|
||||
end;
|
||||
|
||||
procedure TfrTNPDFExportFilter.OnText(X, Y: Integer; const Text: string;
|
||||
View: TfrView);
|
||||
var
|
||||
PRTLabel: TPRText;
|
||||
nx, ny,
|
||||
ndx, ndy: Integer;
|
||||
begin
|
||||
nx := Round(x * PDFEscx) + 1;
|
||||
ny := Round(y * PDFEscy) + 1;
|
||||
ndx := Round(View.dx * PDFEscx);
|
||||
ndy := Round(View.dy * PDFEscy);
|
||||
|
||||
PRTLabel := TPRText.Create(PRPanel);
|
||||
PRTLabel.Parent := PRPanel;
|
||||
try
|
||||
PRTLabel.Text := Text;
|
||||
PRTLabel.Left := nx;
|
||||
PRTLabel.Top := ny;
|
||||
PRTLabel.Width := ndx;
|
||||
PRTLabel.Height := ndy;
|
||||
if View is TfrMemoView then
|
||||
begin
|
||||
if Pos('Arial', TfrMemoView_(View).Font.Name) > 0 then
|
||||
PRTLabel.FontName := fnArial
|
||||
else if Pos('Courier', TfrMemoView_(View).Font.Name) > 0 then
|
||||
PRTLabel.FontName := fnFixedWidth
|
||||
else if Pos('Times', TfrMemoView_(View).Font.Name) > 0 then
|
||||
PRTLabel.FontName := fnTimesRoman;
|
||||
PRTLabel.FontSize := TfrMemoView_(View).Font.Size;
|
||||
PRTLabel.FontBold := fsBold in TfrMemoView_(View).Font.Style;
|
||||
PRTLabel.FontItalic := fsItalic in TfrMemoView_(View).Font.Style;
|
||||
PRTLabel.FontColor := TfrMemoView_(View).Font.Color;
|
||||
end;
|
||||
|
||||
finally
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
frRegisterExportFilter(TfrTNPDFExportFilter, 'Adobe Acrobat PDF ' + ' (*.pdf)',
|
||||
'*.pdf');
|
||||
|
||||
end.
|
||||
|
@ -0,0 +1,26 @@
|
||||
LazarusResources.Add('tfrtnpdfexport','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0
|
||||
+#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147
|
||||
+#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#216#10#6#5
|
||||
+':'#14#153#184'B'#10#0#0#1#212'IDATH'#199'c`'#160'1`d```HKM'#253'O'#172#134
|
||||
+'Y'#179'g3'#146'lKZj'#234'b@Zj'#234#255#147#199#143#255''''#197'l'#22'd'#142
|
||||
+#135#155#27'N'#133';v'#237'"+'#136'X'#168'a'#8#209#22'p'#153'W10000|;'#217
|
||||
+#134#225#155#29#187'v1'#24#4'41'#228'/'#189#206'`'#145#179#15#30'Lq'#158#154
|
||||
+#12'Y'#222#146#140'DY@'#138'o'#226'<5'#25#24#24#24#24#22'm'#191#206'0m'#235
|
||||
+#243#255#184','#193'i'#1'6'#31'\'#216'P'#199'01)'#137#225#236';'#5#134'E'#219
|
||||
+#175'3'#196'yj2'#196'yj'#226#181#4#197#130'o'''#219#136#242'A'#150#183'$'#227
|
||||
+#180#173#207#255#163'[B'#243'T'#132#205#23'd'#165'"'#139#156'}p'#215'#'#199
|
||||
+#201#162#237#144#4'pb'#138#19'#'#209'>'#216#177'k'#23#131#135#155#27#138#229
|
||||
+#248#130'$'#206'S'#147#225#196#20#18'}'#128'.'#142#30#7#176#212#132'-'#201
|
||||
+#194'-HOK#)'#3'!['#130'/?'#192#5#208#203#152'C'#202#171#137#178'('#250#238'-'
|
||||
+#6#6#6#6#134#165#202'j'#24'r'#165'b}'#140'8s`'#247#171#162#255'[n'#174'$'#187
|
||||
+#136'x5'#251'?'#195#245'E'#207#24'Y'#8')<`'#243#132#225#207#191#223#12'[_'
|
||||
+#174'`'#232#191'['#201'p'#192#230#9#195#191#255#255#24#158#253'x'#200#208''
|
||||
+#183#138#225#236#135#195'pu0'#224'pD'#6#206'f"'#198'5'#17'g,'#25'<'#196'B'
|
||||
+#224'|'#151#163#10#12#243#31#245'2'#20'*'#183#161#168's8"'#131'b8'#209#22#172
|
||||
+'09'#206#176#235#245'Z8'#255#31#195'?'#134#195'o'#182'3Hp'#200'b'#248#22#217
|
||||
+'''x'#203'"d'#224'rL'#17#205'UL'#12#182'"'#158#12'/~<'#194#240#1#209#133#29
|
||||
+'>'#176#215#250'!'#195#211#31#15#24#250#239'V'#145'V'#31'`'#3#232#174#194#230
|
||||
+'J|'#226','#132#146#218#160#7#0#180#200#246#157'k|'#166'!'#0#0#0#0'IEND'#174
|
||||
+'B`'#130
|
||||
]);
|
@ -0,0 +1,23 @@
|
||||
unit lr_pdfexp_reg;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
classes, LResources, lr_e_pdf;
|
||||
|
||||
procedure register;
|
||||
|
||||
implementation
|
||||
|
||||
procedure register;
|
||||
begin
|
||||
RegisterComponents('LazReport', [TfrTNPDFExport]);
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I lr_pdfexp_reg.lrs}
|
||||
|
||||
end.
|
||||
|
BIN
components/lazreport/source/addons/pdfexport/tfrtnpdfexport.png
Normal file
BIN
components/lazreport/source/addons/pdfexport/tfrtnpdfexport.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 596 B |
Loading…
Reference in New Issue
Block a user