Mam's WebSite
無料フリーソフト ダウンロード

トップページ自作フリーソフトダウンロード(Delphiコンポーネント)⇒PowerPDF

PowerPDF 日本語版とは

DelphiからPDFファイルを作成することができるコンポーネント

PowerPDFとDB連携したPDF帳票を作成してみましょう。

データベースは手軽に使えるMDB(Microsoft Jet4.0)形式にします。


テーブル名 フィールド名
T_伝票 伝票番号 オートナンバー
  年月日 日付時刻型
  取引先ID 長整数型
TM_取引先 取引先ID オートナンバー型
  取引先名 文字型(30)
  取引先郵便番号 文字型(8)
  取引先住所 文字型(50)
TM_商品 商品ID オートナンバー型
  商品番号 文字型(20)
  商品名 文字型(30)
  標準価格 通貨型
T_明細 伝票明細ID オートナンバー型
  伝票番号 長整数型
  商品ID 長整数型
  価格 通貨型
  数量 長整数型
DB構造がおかしいとかは、無視してください。DB講座ではないので。(><)
mdbファイルのダウンロード(LZH圧縮14Kバイト)


今回は間単にするため、DBGoを使ってつなぎます。


 
「ADO_Slip」のSQLは、以下です。
select T_伝票.伝票番号, T_伝票.年月日, T_伝票.取引先ID,
  TM_取引先.取引先名, TM_取引先.取引先郵便番号, TM_取引先.取引先住所
  from T_伝票
  LEFT JOIN TM_取引先 ON T_伝票.取引先ID=TM_取引先.取引先ID
 
「ADO_Slip」のSQLは、以下です。また、DataSourceプロパティはDS_Slipに設定します。(マスタ関係で、パラメータ「伝票番号」でリンク)
Select
   T_明細.伝票明細ID, T_明細.伝票番号, T_明細.商品ID,
   TM_商品.商品番号, TM_商品.商品名, T_明細.価格, T_明細.数量,
   T_明細.価格*T_明細.数量 AS 価格数量
   From T_明細
       Left Join TM_商品 ON T_明細.商品ID=TM_商品.商品ID
  Where T_明細.伝票番号 = :伝票番号

実行画面は以下のようになります。

DBとのインターフェースはDelphiの標準機能を使っているため、ソースコードをほとんど入力せず、 プロパティ設定だけなので解説は省略します。
また、明細側に[伝票番号]や[伝票明細ID]の表示は不要ですが、今回はわかりやすくするため表示しています。
不要であればVisibleプロパティをFalseにしてください。


 
[選択している伝票をPDFに]ボタンをクリックしたときのソースコードです。
 
procedure TForm1.B_MakePDFClick(Sender: TObject);
 var fname:string;
begin
//選択している伝票番号の帳票をPDFにして表示する


 //ランダムなファイル名を作成
 fname:=path+'PDF_Files\'+IntToHex(Random(1000000000),8)+'.pdf';


 //ADOQueryに現在の伝票番号をフィルタに設定して開く
 DataModule1.ADOQ_Slip.Filtered:=false;
 DataModule1.ADOQ_Slip.Filter:=
   '伝票番号=' + DataModule1.T_伝票.FieldByName('伝票番号').AsString;
 DataModule1.ADOQ_Slip.Filtered:=true;
 DataModule1.ADOQ_Slip.Open;
 DataModule1.ADOQ_Slip_Detail.Open;
 DataModule1.ADOQ_Slip_Detail.First;

 //TPRGridPanelのBefoerePrintChildを設定
 F_RPT.PRGridPanel1.BeforePrintChild:=MyPRPrintChildPanel;

 F_RPT.PReport1.FileName:=fname;

 //「しおり」や「ページ」を表示しないようにする
 F_RPT.PReport1.PageMode:=pmUseNone;

 //PDF作成開始
 F_RPT.PReport1.BeginDoc;

  //伝票番号の設定
  F_RPT.PRL_No.Caption:=
    '伝票番号:'+DataModule1.ADOQ_Slip.FieldByName('伝票番号').AsString;
  //取引先名の設定
  F_RPT.PRL_Comp_Nm.Caption:=
    DataModule1.ADOQ_Slip.FieldByName('取引先名').AsString;
  //取引先郵便番号と住所の設定
  F_RPT.PRL_Comp_Add.Caption:=
    '〒'+DataModule1.ADOQ_Slip.FieldByName('取引先郵便番号').AsString+
    ' '+DataModule1.ADOQ_Slip.FieldByName('取引先住所').AsString;
  //年月日の設定
  F_RPT.PRL_date.Caption:=
    DataModule1.ADOQ_Slip.FieldByName('年月日').AsString;

  //伝票番号に対する伝票明細を設定
  while not DataModule1.ADOQ_Slip_Detail.Eof do
  begin
    F_RPT.PRL_Page.Caption:=IntToStr(F_RPT.PReport1.PageNumber+1);
    F_RPT.PReport1.Print(F_RPT.PRPage1);
  end;
 //PDF作成完了
 F_RPT.PReport1.EndDoc;


 F_RPT.PRGridPanel1.AfterPrintChild:=nil;

 DataModule1.ADOQ_Slip.Close;
 DataModule1.ADOQ_Slip_Detail.Close;

 //PDFファイルを表示(PDFビューアーが必要)
 ShellExecute(handle,'open',PChar(fname),nil,nil,SW_SHOW);

end;

 
 
procedure TForm1.MyPRPrintChildPanel(Sender: TObject; ACanvas: TPRCanvas; ACol,
   ARow: integer; Rect: TRect);
begin
  //伝票明細をTPRGridPanelに出力する
  if not DataModule1.ADOQ_Slip_Detail.Eof then
  begin
   F_RPT.PRL_ItemNo.Caption:=
    DataModule1.ADOQ_Slip_Detail.FieldByName('商品番号').AsString;
   F_RPT.PRL_ItemName.Caption:=
    DataModule1.ADOQ_Slip_Detail.FieldByName('商品名').AsString;
   F_RPT.PRL_ItemPrice.Caption:=
    DataModule1.ADOQ_Slip_Detail.FieldByName('価格').AsString;
   F_RPT.PRL_ItemCount.Caption:=
    DataModule1.ADOQ_Slip_Detail.FieldByName('数量').AsString;
   F_RPT.PRL_Price.Caption:=
    DataModule1.ADOQ_Slip_Detail.FieldByName('価格数量').AsString;

   DataModule1.ADOQ_Slip_Detail.Next;
  end
  else
  begin
   F_RPT.PRL_ItemNo.Caption:='';
   F_RPT.PRL_ItemName.Caption:='';
   F_RPT.PRL_ItemPrice.Caption:='';
   F_RPT.PRL_ItemCount.Caption:='';
   F_RPT.PRL_Price.Caption:='';
  end;
end;
 
ソースのほとんどは、データベースからの文字をPDFに入れているだけです。
[全伝票をPDFに]ボタンをクリックしたときには、「しおり」もきちんと設定されます。

 
上記の実際のサンプル一式をダウンロード
 

 

 

 

 
著作権表示
PowerPdf Version 0.91 (beta) for Delphi 日本語版
0.9からの改変部分のみ  Copyright (C) 2008-2019 Mam

 

 
PowerPDF0.9はtakeshi_kanno氏のLGPLライブラリです。
(http://www.est.hi-ho.ne.jp/takeshi_kanno/powerpdf/)
P o w e r P d f Version 0.9 (beta)
Copyright (C) 1999-2001 Takeshi Kanno
Mam's WebSite