-
Notifications
You must be signed in to change notification settings - Fork 52
日本語説明
goreportについて
このプログラムは github.com/signintech/gopdf を pdf作成に利用しています。
単純なレポートのサンプル
中程度のレポートのサンプル
複雑なレポートのサンプル
##インストール
go get -u github.com/mikeshimura/goreport
##概要
-
下記のバンドが使用出来ます。 PageHeader
GroupHeader2
GroupHeader1
Detail
GroupSummary1
GroupSummry2
Summary
PageFooter -
グループ数の制限は有りません
-
ユーザー定義のバンドは Band interface を実装する必要が有ります。 下記の 2つの functionの実装が必要です。
GetHeight(report GoReport) float64
Execute(report GoReport)
-
処理は二段階に行われます。
一段階目: テキストデータの生成
二段階目: テキストデータから Pdf の生成 -
この様に二段階に分けて行う事により、非常に柔軟に対応できます。 テキストデータをプログラムで生成して、二段階目を使用してPdfを作成する事で、どの様なPDFも作成可能です。
-
このプログラムでは、上記柔軟性を活かして、トータルページの情報をテキストデータの 生成後取得して置き換える事で対応しています。
-
バンドの高さはプログラムで動的に変更可能です。これにより、 バンドの表示・非表示の切り替えなどができます。
-
データソースは []interface{} として定義されていますので、 どんな種類のデータタイプでも対応できます。 例えば string array, entity object, map など
-
どの様な Ttf フォントでも使用出来ます。
##セットアップ Command
- フォントセットアップサンプル
font1 := gr.FontMap{
FontName: "IPAex",
FileName: "ttf//ipaexg.ttf",
}
fonts := []*gr.FontMap{&font1}
r.SetFonts(fonts)
- ページ Setting
SetPage(size string, unit string, orientation string)
//size A4 or LTR, unit mm, pt or in
SetPageByDimension(unit string, width float64, height float64)
- 縦方向の表示リミット。これを超えない様に自動的に改ページされます。 改ページ前にPageFooter処理(定義されていれば)が行われます。
SetFooterY(footerY float64)
SetFooterYbyFooterHeight(footerHeight float64)
//Sheet height - footerHeight がセットされます
##描画 Commands
-
改ページ
NewPage(resetPageNo bool) -
フォント setting
Font(fontName string, size int, style string)
//style "" or "U" (underline)
TextColor(red int, green int, blue int) //Set Font color
GrayFill(grayScale float64) //Set grayScale for black font
-
テキスト Draw
Cell(x float64, y float64, content string)
CellRight(x float64, y float64, w float64, content string) //Right Justify -
ライン Draw
LineType(ltype string, width float64) //lineType "dashed" ,"dotted","straight" ""="straight"
GrayStroke(grayScale float64) //Set grayScale
LineH(x1 float64, y float64, x2 float64) // Horizontal Line
LineV(x float64, y1 float64, y2 float64) // Vertical line
Line(x1 float64, y1 float64, x2 float64, y2 float64) -
図形 Draw
Rect(x1 float64, y1 float64, x2 float64, y2 float64)
Oval(x1 float64, y1 float64, x2 float64, y2 float64) -
画像 Draw
Image(path string, x1 float64, y1 float64, x2 float64, y2 float64)
##PDF作成コマンド
-
Execute(filename string)
PDFファイルの作成 -
GetBytesPdf() (ret []byte)
Byte streamの作成
##License
goreport MIT Licenseです。 コピーライトは志村正信に属します。 (Gmail mikeshimura)
##制限事項
- フォントのスタイルに、B(Bold),I(Italic)は使用できません。
- 直線、図形のカラーは使用できません。
##サンプル program
package example
import (
gr "github.com/mikeshimura/goreport"
"strconv"
)
func Simple1Report() {
r := gr.CreateGoReport()
//var accumrate amount
r.SumWork["amountcum="]=0.0
font1 := gr.FontMap{
FontName: "IPAex",
FileName: "ttf//ipaexg.ttf",
}
fonts := []*gr.FontMap{&font1}
r.SetFonts(fonts)
d := new(S1Detail)
r.RegisterBand(gr.Band(*d), gr.Detail)
h := new(S1Header)
r.RegisterBand(gr.Band(*h), gr.PageHeader)
s := new(S1Summary)
r.RegisterBand(gr.Band(*s), gr.Summary)
r.Records = gr.ReadTextFile("sales1.txt",7)
r.SetPage("A4", "mm","L")
r.SetFooterY(190)
r.Execute("simple1.pdf")
}
type S1Detail struct {
}
func (h S1Detail) GetHeight(report gr.GoReport) float64 {
return 10
}
func (h S1Detail) Execute(report gr.GoReport) {
cols := report.Records[report.DataPos].([]string)
report.Font("IPAex", 12, "")
y:=2.0
report.Cell(15, y, cols[0])
report.Cell(30, y, cols[1])
report.Cell(60, y, cols[2])
report.Cell(90, y, cols[3])
report.Cell(120, y, cols[4])
report.CellRight(135, y,25, cols[5])
report.CellRight(160, y,20, cols[6])
amt:=ParseFloatNoError(cols[5])*ParseFloatNoError(cols[6])
report.SumWork["amountcum="]+=amt
report.CellRight(180, y,30, strconv.FormatFloat(amt,'f',2,64))
}
type S1Header struct {
}
func (h S1Header) GetHeight(report gr.GoReport) float64 {
return 30
}
func (h S1Header) Execute(report gr.GoReport) {
report.Font("IPAex", 14, "")
report.Cell(50, 15, "Sales Report")
report.Font("", 12, "")
report.Cell(240, 20, "page")
report.Cell(260, 20, strconv.Itoa(report.Page))
y:=23.0
report.Cell(15, y, "D No")
report.Cell(30, y, "Dept")
report.Cell(60, y, "Order")
report.Cell(90, y, "Stock")
report.Cell(120, y,"Name")
report.CellRight(135, y,25, "Unit Price")
report.CellRight(160, y,20, "Qty")
report.CellRight(190, y,20, "Amount")
}
type S1Summary struct {
}
func (h S1Summary) GetHeight(report gr.GoReport) float64 {
return 10
}
func (h S1Summary) Execute(report gr.GoReport) {
report.Cell(160, 2,"Total")
report.CellRight(180, 2,30, strconv.FormatFloat(
report.SumWork["amountcum="],'f',2,64))
}
func ParseFloatNoError(s string)float64{
f,_:=strconv.ParseFloat(s,64)
return f
}