codeberg.org/go-pdf/fpdf@v0.11.1/contrib/gofpdi/gofpdi_test.go (about)

     1  package gofpdi
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"sync"
     7  	"testing"
     8  
     9  	"codeberg.org/go-pdf/fpdf"
    10  	"codeberg.org/go-pdf/fpdf/internal/example"
    11  )
    12  
    13  func ExampleNewImporter() {
    14  	// create new pdf
    15  	pdf := fpdf.New("P", "pt", "A4", "")
    16  
    17  	// for testing purposes, get an arbitrary template pdf as stream
    18  	rs, _ := getTemplatePdf()
    19  
    20  	// create a new Importer instance
    21  	imp := NewImporter()
    22  
    23  	// import first page and determine page sizes
    24  	tpl := imp.ImportPageFromStream(pdf, &rs, 1, "/MediaBox")
    25  	pageSizes := imp.GetPageSizes()
    26  	nrPages := len(imp.GetPageSizes())
    27  
    28  	// add all pages from template pdf
    29  	for i := 1; i <= nrPages; i++ {
    30  		pdf.AddPage()
    31  		if i > 1 {
    32  			tpl = imp.ImportPageFromStream(pdf, &rs, i, "/MediaBox")
    33  		}
    34  		imp.UseImportedTemplate(pdf, tpl, 0, 0, pageSizes[i]["/MediaBox"]["w"], pageSizes[i]["/MediaBox"]["h"])
    35  	}
    36  
    37  	// output
    38  	fileStr := example.Filename("contrib_gofpdi_Importer")
    39  	err := pdf.OutputFileAndClose(fileStr)
    40  	example.Summary(err, fileStr)
    41  	// Output:
    42  	// Successfully generated ../../pdf/contrib_gofpdi_Importer.pdf
    43  }
    44  
    45  func TestGofpdiConcurrent(t *testing.T) {
    46  	wg := sync.WaitGroup{}
    47  	for i := 0; i < 100; i++ {
    48  		wg.Add(1)
    49  		go func() {
    50  			defer wg.Done()
    51  			pdf := fpdf.New("P", "mm", "A4", "")
    52  			pdf.AddPage()
    53  			rs, _ := getTemplatePdf()
    54  			imp := NewImporter()
    55  			tpl := imp.ImportPageFromStream(pdf, &rs, 1, "/MediaBox")
    56  			imp.UseImportedTemplate(pdf, tpl, 0, 0, 210.0, 297.0)
    57  			// write to bytes buffer
    58  			buf := bytes.Buffer{}
    59  			if err := pdf.Output(&buf); err != nil {
    60  				t.Fail()
    61  			}
    62  		}()
    63  	}
    64  	wg.Wait()
    65  }
    66  
    67  func getTemplatePdf() (io.ReadSeeker, error) {
    68  	tpdf := fpdf.New("P", "pt", "A4", "")
    69  	tpdf.AddPage()
    70  	tpdf.SetFont("Arial", "", 12)
    71  	tpdf.Text(20, 20, "Example Page 1")
    72  	tpdf.AddPage()
    73  	tpdf.Text(20, 20, "Example Page 2")
    74  	tbuf := bytes.Buffer{}
    75  	err := tpdf.Output(&tbuf)
    76  	return bytes.NewReader(tbuf.Bytes()), err
    77  }