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 }