/* * This program is part of the OpenLMIS logistics management information system platform software. * Copyright © 2013 VillageReach * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. *   * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more details. * You should have received a copy of the GNU Affero General Public License along with this program.  If not, see http://www.gnu.org/licenses.  For additional information contact info@OpenLMIS.org.  */ package org.openlmis.web.view.pdf.requisition; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Rectangle; import com.itextpdf.text.pdf.PdfDocument; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import org.openlmis.core.service.ConfigurationSettingService; import org.openlmis.core.service.MessageService; import org.openlmis.web.view.pdf.PdfPageEventHandler; import java.io.IOException; import java.io.OutputStream; import java.util.Map; /** * This is the pdf writer implementation used in printing requisition report. */ public class RequisitionPdfWriter extends PdfWriter { public static final Rectangle PAGE_SIZE = new Rectangle(1500, 1059); public static final float LEFT_MARGIN = 20; public static final float RIGHT_MARGIN = 10; public static final float TOP_MARGIN = 10; public static final float BOTTOM_MARGIN = 30; private MessageService messageService; private ConfigurationSettingService configService; public RequisitionPdfWriter(PdfDocument document, OutputStream stream, MessageService messageService, ConfigurationSettingService configService ) throws DocumentException { super(document, stream); document.addWriter(this); setDocumentAttributes(document); this.setViewerPreferences(getViewerPreferences()); this.messageService = messageService; this.configService = configService; this.setPageEvent(new PdfPageEventHandler(messageService)); } private void setDocumentAttributes(PdfDocument document) { document.setPageSize(PAGE_SIZE); document.setMargins(LEFT_MARGIN, RIGHT_MARGIN, TOP_MARGIN, BOTTOM_MARGIN); } public void buildWith(Map<String, Object> model) throws DocumentException, NoSuchFieldException, IllegalAccessException, IOException { RequisitionPdfModel requisitionPdfModel = new RequisitionPdfModel(model, messageService,configService); document.open(); document.add(requisitionPdfModel.getRequisitionHeader()); document.add(requisitionPdfModel.getFullSupplyHeader()); document.add(requisitionPdfModel.getFullSupplyTable()); PdfPTable nonFullSupplyTable = requisitionPdfModel.getNonFullSupplyTable(); if (nonFullSupplyTable != null) { document.newPage(); document.add(requisitionPdfModel.getNonFullSupplyHeader()); document.add(nonFullSupplyTable); } PdfPTable regimenTable = requisitionPdfModel.getRegimenTable(); if (regimenTable != null) { document.newPage(); document.add(requisitionPdfModel.getRegimenHeader()); document.add(regimenTable); } document.newPage(); document.add(requisitionPdfModel.getSummary()); document.close(); } protected int getViewerPreferences() { return PdfWriter.ALLOW_PRINTING | PdfWriter.PageLayoutSinglePage; } }