/Users/johnr/Desktop/IA_14_-_Stage_P_Upload_all_2021-04-08/CSIA14829 - Jane April 6th/src/csia14829/BarcodeGenerator.java
  1 /*
  2  * To change this license header, choose License Headers in Project Properties.
  3  * To change this template file, choose Tools | Templates
  4  * and open the template in the editor.
  5  */
  6 package csia14829;
  7 
  8 import java.io.FileOutputStream;
  9 import com.itextpdf.text.Document;
 10 import com.itextpdf.text.DocumentException;
 11 import com.itextpdf.text.Image;
 12 import com.itextpdf.text.PageSize;
 13 import com.itextpdf.text.pdf.Barcode128;
 14 import com.itextpdf.text.pdf.PdfContentByte;
 15 import com.itextpdf.text.pdf.PdfWriter;
 16 
 17 
 18 /**
 19  *
 20  * @author 14829
 21  */
 22 public class BarcodeGenerator {
 23 
 24     /**
 25      * @param code128Image
 26      * @param numberOfBarcodes
 27      * @param doc
 28      * @throws com.itextpdf.text.DocumentException
 29      */
 30     
 31     // creates a single column of barcodes. Can specify which column (1st,2nd, or 3rd) and how many in that col to print.
 32     public static void createColumnsOfBarcodes(Image code128Image, int numberOfColBarcodes, Document doc, int row)
 33             throws DocumentException{
 34         // Generate barcode at the top of the column. 
 35         // With each pass, another is generated 100 below the previous
 36         for(int i = 0; i < numberOfColBarcodes; i++){
 37             code128Image.setAbsolutePosition(30+row*170, 700-i*100);
 38             code128Image.scalePercent(125);
 39             doc.add(code128Image);             
 40         }
 41     }
 42     public static void createMultipleBarcodes(Image code128Image, int numberOfBarcodes, Document doc) 
 43             throws DocumentException{
 44         // can print up to three columns of 7
 45         
 46         // if less than 7, just generate one column
 47         if(numberOfBarcodes <= 7){
 48             createColumnsOfBarcodes(code128Image, numberOfBarcodes, doc, 0);  
 49         // if numberOfBarcodes > 7 and numberOfBarcodes <= 4, generate a full 7 in first column
 50         // and the appropriate number in second column.
 51         }else if((numberOfBarcodes > 7) && (numberOfBarcodes <= 14)){       
 52             int numberOnSecondColumn = numberOfBarcodes - 7;
 53             createColumnsOfBarcodes(code128Image, 7, doc, 0);
 54             createColumnsOfBarcodes(code128Image, numberOnSecondColumn, doc, 1);    
 55         // else, generate two full columns and the appropriate number on the third column.
 56         }else{
 57             int numberOnThirdColumn = numberOfBarcodes - 14;
 58             createColumnsOfBarcodes(code128Image, 7, doc, 0);
 59             createColumnsOfBarcodes(code128Image, 7, doc, 1);
 60             createColumnsOfBarcodes(code128Image, numberOnThirdColumn, doc, 2);
 61         }
 62     }
 63     
 64     
 65     // this method writes the pdf file.
 66     public static void createPDF(String pdfFilename, String myString, int numberOfBarcodes) {
 67         Document doc = new Document();
 68         PdfWriter docWriter = null;
 69         try {
 70             docWriter = PdfWriter.getInstance(doc, new FileOutputStream(pdfFilename));
 71             doc.addAuthor("LostAndFoundTeam");
 72             doc.addCreationDate();
 73             doc.addProducer();
 74             doc.addTitle("Barcodes");
 75             doc.setPageSize(PageSize.LETTER);
 76             doc.open();
 77             PdfContentByte cb = docWriter.getDirectContent();
 78             
 79             // new Barcode128() object is made for use
 80             Barcode128 code128 = new Barcode128();
 81             // set to encode myString as a barcode
 82             code128.setCode(myString.trim());
 83             code128.setCodeType(Barcode128.CODE128);
 84             Image code128Image = code128.createImageWithBarcode(cb, null, null);
 85             
 86             // uses function above to create multiple barcodes
 87             createMultipleBarcodes(code128Image, numberOfBarcodes, doc);
 88         
 89         // exception handling
 90         } catch (DocumentException dex) {
 91                 dex.printStackTrace();
 92         } catch (Exception ex) {
 93             ex.printStackTrace();
 94         } finally {
 95             if (doc != null) {
 96                 doc.close();
 97             }
 98             if (docWriter != null) {
 99                 docWriter.close();
100             }
101         }
102     }
103     
104 }
105