Skip to content

日本語説明

Mike Shimura edited this page Jan 23, 2016 · 5 revisions

goreportについて

このプログラムは github.com/signintech/gopdf を pdf作成に利用しています。

単純なレポートのサンプル
Simple1

pdf

中程度のレポートのサンプル
Medium1

pdf

複雑なレポートのサンプル
Complex1

pdf

Complex2

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
}
Clone this wiki locally