barcode_test.go 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package barcode_test
  2. import (
  3. "testing"
  4. "github.com/boombuler/barcode/code128"
  5. "github.com/boombuler/barcode/qr"
  6. "github.com/jung-kurt/gofpdf"
  7. "github.com/jung-kurt/gofpdf/contrib/barcode"
  8. "github.com/jung-kurt/gofpdf/internal/example"
  9. )
  10. func createPdf() (pdf *gofpdf.Fpdf) {
  11. pdf = gofpdf.New("L", "mm", "A4", "")
  12. pdf.SetFont("Helvetica", "", 12)
  13. pdf.SetFillColor(200, 200, 220)
  14. pdf.AddPage()
  15. return
  16. }
  17. func ExampleRegister() {
  18. pdf := createPdf()
  19. fileStr := example.Filename("contrib_barcode_Register")
  20. bcode, err := code128.Encode("gofpdf")
  21. if err == nil {
  22. key := barcode.Register(bcode)
  23. var width float64 = 100
  24. var height float64 = 10.0
  25. barcode.BarcodeUnscalable(pdf, key, 15, 15, &width, &height, false)
  26. }
  27. err = pdf.OutputFileAndClose(fileStr)
  28. example.Summary(err, fileStr)
  29. // Output:
  30. // Successfully generated ../../pdf/contrib_barcode_Register.pdf
  31. }
  32. func ExampleRegisterCodabar() {
  33. pdf := createPdf()
  34. key := barcode.RegisterCode128(pdf, "codabar")
  35. var width float64 = 100
  36. var height float64 = 10
  37. barcode.BarcodeUnscalable(pdf, key, 15, 15, &width, &height, false)
  38. fileStr := example.Filename("contrib_barcode_RegisterCodabar")
  39. err := pdf.OutputFileAndClose(fileStr)
  40. example.Summary(err, fileStr)
  41. // Output:
  42. // Successfully generated ../../pdf/contrib_barcode_RegisterCodabar.pdf
  43. }
  44. func ExampleRegisterAztec() {
  45. pdf := createPdf()
  46. key := barcode.RegisterAztec(pdf, "aztec", 33, 0)
  47. barcode.Barcode(pdf, key, 15, 15, 100, 100, false)
  48. fileStr := example.Filename("contrib_barcode_RegisterAztec")
  49. err := pdf.OutputFileAndClose(fileStr)
  50. example.Summary(err, fileStr)
  51. // Output:
  52. // Successfully generated ../../pdf/contrib_barcode_RegisterAztec.pdf
  53. }
  54. func ExampleRegisterCode128() {
  55. pdf := createPdf()
  56. key := barcode.RegisterCode128(pdf, "code128")
  57. barcode.Barcode(pdf, key, 15, 15, 100, 10, false)
  58. fileStr := example.Filename("contrib_barcode_RegisterCode128")
  59. err := pdf.OutputFileAndClose(fileStr)
  60. example.Summary(err, fileStr)
  61. // Output:
  62. // Successfully generated ../../pdf/contrib_barcode_RegisterCode128.pdf
  63. }
  64. func ExampleRegisterCode39() {
  65. pdf := createPdf()
  66. key := barcode.RegisterCode39(pdf, "CODE39", false, true)
  67. barcode.Barcode(pdf, key, 15, 15, 100, 10, false)
  68. fileStr := example.Filename("contrib_barcode_RegisterCode39")
  69. err := pdf.OutputFileAndClose(fileStr)
  70. example.Summary(err, fileStr)
  71. // Output:
  72. // Successfully generated ../../pdf/contrib_barcode_RegisterCode39.pdf
  73. }
  74. func ExampleRegisterDataMatrix() {
  75. pdf := createPdf()
  76. key := barcode.RegisterDataMatrix(pdf, "datamatrix")
  77. barcode.Barcode(pdf, key, 15, 15, 20, 20, false)
  78. fileStr := example.Filename("contrib_barcode_RegisterDataMatrix")
  79. err := pdf.OutputFileAndClose(fileStr)
  80. example.Summary(err, fileStr)
  81. // Output:
  82. // Successfully generated ../../pdf/contrib_barcode_RegisterDataMatrix.pdf
  83. }
  84. func ExampleRegisterEAN() {
  85. pdf := createPdf()
  86. key := barcode.RegisterEAN(pdf, "96385074")
  87. barcode.Barcode(pdf, key, 15, 15, 100, 10, false)
  88. fileStr := example.Filename("contrib_barcode_RegisterEAN")
  89. err := pdf.OutputFileAndClose(fileStr)
  90. example.Summary(err, fileStr)
  91. // Output:
  92. // Successfully generated ../../pdf/contrib_barcode_RegisterEAN.pdf
  93. }
  94. func ExampleRegisterQR() {
  95. pdf := createPdf()
  96. key := barcode.RegisterQR(pdf, "qrcode", qr.H, qr.Unicode)
  97. barcode.Barcode(pdf, key, 15, 15, 100, 10, false)
  98. fileStr := example.Filename("contrib_barcode_RegisterQR")
  99. err := pdf.OutputFileAndClose(fileStr)
  100. example.Summary(err, fileStr)
  101. // Output:
  102. // Successfully generated ../../pdf/contrib_barcode_RegisterQR.pdf
  103. }
  104. func ExampleRegisterTwoOfFive() {
  105. pdf := createPdf()
  106. key := barcode.RegisterTwoOfFive(pdf, "1234567895", true)
  107. barcode.Barcode(pdf, key, 15, 15, 100, 10, false)
  108. fileStr := example.Filename("contrib_barcode_RegisterTwoOfFive")
  109. err := pdf.OutputFileAndClose(fileStr)
  110. example.Summary(err, fileStr)
  111. // Output:
  112. // Successfully generated ../../pdf/contrib_barcode_RegisterTwoOfFive.pdf
  113. }
  114. func ExampleRegisterPdf417() {
  115. pdf := createPdf()
  116. key := barcode.RegisterPdf417(pdf, "1234567895", 10, 5)
  117. barcode.Barcode(pdf, key, 15, 15, 100, 10, false)
  118. fileStr := example.Filename("contrib_barcode_RegisterPdf417")
  119. err := pdf.OutputFileAndClose(fileStr)
  120. example.Summary(err, fileStr)
  121. // Output:
  122. // Successfully generated ../../pdf/contrib_barcode_RegisterPdf417.pdf
  123. }
  124. // TestRegisterCode128 ensures that no panic arises when an invalid barcode is registered.
  125. func TestRegisterCode128(t *testing.T) {
  126. pdf := createPdf()
  127. barcode.RegisterCode128(pdf, "Invalid character: é")
  128. }
  129. // TestBarcodeUnscalable shows that the barcode may be scaled or not by providing optional heights and widths.
  130. func TestBarcodeUnscalable(t *testing.T) {
  131. pdf := createPdf()
  132. key := barcode.RegisterCode128(pdf, "code128")
  133. var width float64 = 100
  134. var height float64 = 10
  135. barcode.BarcodeUnscalable(pdf, key, 15, 15, &width, &height, false)
  136. barcode.BarcodeUnscalable(pdf, key, 15, 35, nil, &height, false)
  137. barcode.BarcodeUnscalable(pdf, key, 15, 55, &width, nil, false)
  138. barcode.BarcodeUnscalable(pdf, key, 15, 75, nil, nil, false)
  139. fileStr := example.Filename("contrib_barcode_Barcode")
  140. err := pdf.OutputFileAndClose(fileStr)
  141. example.Summary(err, fileStr)
  142. // Output:
  143. // Successfully generated ../../pdf/contrib_barcode_Barcode.pdf
  144. }
  145. // TestGetUnscaledBarcodeDimensions shows that the width and height returned by the function match that of the barcode
  146. func TestGetUnscaledBarcodeDimensions(t *testing.T) {
  147. pdf := createPdf()
  148. key := barcode.RegisterQR(pdf, "qrcode", qr.H, qr.Unicode)
  149. barcode.BarcodeUnscalable(pdf, key, 15, 15, nil, nil, false)
  150. w, h := barcode.GetUnscaledBarcodeDimensions(pdf, key)
  151. pdf.SetDrawColor(255, 0, 0)
  152. pdf.Line(15, 15, 15+w, 15+h)
  153. fileStr := example.Filename("contrib_barcode_GetBarcodeDimensions")
  154. err := pdf.OutputFileAndClose(fileStr)
  155. example.Summary(err, fileStr)
  156. // Output:
  157. // Successfully generated ../../pdf/contrib_barcode_GetBarcodeDimensions.pdf
  158. }
  159. // TestBarcodeNonIntegerScalingFactors shows that the barcode may be scaled to non-integer sizes
  160. func TestBarcodeNonIntegerScalingFactors(t *testing.T) {
  161. pdf := gofpdf.New("L", "in", "A4", "")
  162. pdf.SetFont("Helvetica", "", 12)
  163. pdf.SetFillColor(200, 200, 220)
  164. pdf.AddPage()
  165. key := barcode.RegisterQR(pdf, "qrcode", qr.H, qr.Unicode)
  166. var scale float64 = 1.5
  167. barcode.BarcodeUnscalable(pdf, key, 0.5, 0.5, &scale, &scale, false)
  168. pdf.SetDrawColor(255, 0, 0)
  169. pdf.Line(0.5, 0.5, 0.5+scale, 0.5+scale)
  170. fileStr := example.Filename("contrib_barcode_BarcodeScaling")
  171. err := pdf.OutputFileAndClose(fileStr)
  172. example.Summary(err, fileStr)
  173. // Output:
  174. // Successfully generated ../../pdf/contrib_barcode_BarcodeScaling.pdf
  175. }