gofpdi_test.go 1.8 KB

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