Example usage for com.lowagie.text.pdf PdfWriter close

List of usage examples for com.lowagie.text.pdf PdfWriter close

Introduction

In this page you can find the example usage for com.lowagie.text.pdf PdfWriter close.

Prototype

public void close() 

Source Link

Document

Signals that the Document was closed and that no other Elements will be added.

Usage

From source file:org.geoserver.wms.map.PDFMapResponse.java

License:Open Source License

/**
 * Writes the PDF./*w w w.j a va 2 s . com*/
 * <p>
 * NOTE: the document seems to actually be created in memory, and being written down to
 * {@code output} once we call {@link Document#close()}. If there's no other way to do so, it'd
 * be better to actually split out the process into produceMap/write?
 * </p>
 * 
 * @see org.geoserver.ows.Response#write(java.lang.Object, java.io.OutputStream,
 *      org.geoserver.platform.Operation)
 */
@Override
public void write(Object value, OutputStream output, Operation operation) throws IOException, ServiceException {

    Assert.isInstanceOf(PDFMap.class, value);
    WMSMapContent mapContent = ((PDFMap) value).getContext();

    final int width = mapContent.getMapWidth();
    final int height = mapContent.getMapHeight();

    if (LOGGER.isLoggable(Level.FINE)) {
        LOGGER.fine("setting up " + width + "x" + height + " image");
    }

    try {
        // step 1: creation of a document-object
        // width of document-object is width*72 inches
        // height of document-object is height*72 inches
        com.lowagie.text.Rectangle pageSize = new com.lowagie.text.Rectangle(width, height);

        Document document = new Document(pageSize);
        document.setMargins(0, 0, 0, 0);

        // step 2: creation of the writer
        PdfWriter writer = PdfWriter.getInstance(document, output);

        // step 3: we open the document
        document.open();

        // step 4: we grab the ContentByte and do some stuff with it

        // we create a fontMapper and read all the fonts in the font
        // directory
        DefaultFontMapper mapper = new DefaultFontMapper();
        FontFactory.registerDirectories();

        // we create a template and a Graphics2D object that corresponds
        // with it
        PdfContentByte cb = writer.getDirectContent();
        PdfTemplate tp = cb.createTemplate(width, height);
        PdfGraphics2D graphic = (PdfGraphics2D) tp.createGraphics(width, height, mapper);

        // we set graphics options
        if (!mapContent.isTransparent()) {
            graphic.setColor(mapContent.getBgColor());
            graphic.fillRect(0, 0, width, height);
        } else {
            if (LOGGER.isLoggable(Level.FINE)) {
                LOGGER.fine("setting to transparent");
            }

            int type = AlphaComposite.SRC;
            graphic.setComposite(AlphaComposite.getInstance(type));

            Color c = new Color(mapContent.getBgColor().getRed(), mapContent.getBgColor().getGreen(),
                    mapContent.getBgColor().getBlue(), 0);
            graphic.setBackground(mapContent.getBgColor());
            graphic.setColor(c);
            graphic.fillRect(0, 0, width, height);

            type = AlphaComposite.SRC_OVER;
            graphic.setComposite(AlphaComposite.getInstance(type));
        }

        Rectangle paintArea = new Rectangle(width, height);

        StreamingRenderer renderer = new StreamingRenderer();
        renderer.setMapContent(mapContent);
        // TODO: expose the generalization distance as a param
        // ((StreamingRenderer) renderer).setGeneralizationDistance(0);

        RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        renderer.setJava2DHints(hints);

        // we already do everything that the optimized data loading does...
        // if we set it to true then it does it all twice...
        java.util.Map rendererParams = new HashMap();
        rendererParams.put("optimizedDataLoadingEnabled", new Boolean(true));
        rendererParams.put("renderingBuffer", new Integer(mapContent.getBuffer()));
        // we need the renderer to draw everything on the batik provided graphics object
        rendererParams.put(StreamingRenderer.OPTIMIZE_FTS_RENDERING_KEY, Boolean.FALSE);
        // render everything in vector form if possible
        rendererParams.put(StreamingRenderer.VECTOR_RENDERING_KEY, Boolean.TRUE);
        if (DefaultWebMapService.isLineWidthOptimizationEnabled()) {
            rendererParams.put(StreamingRenderer.LINE_WIDTH_OPTIMIZATION_KEY, true);
        }
        rendererParams.put(StreamingRenderer.SCALE_COMPUTATION_METHOD_KEY, mapContent.getRendererScaleMethod());

        renderer.setRendererHints(rendererParams);

        Envelope dataArea = mapContent.getRenderingArea();

        // enforce no more than x rendering errors
        int maxErrors = wms.getMaxRenderingErrors();
        MaxErrorEnforcer errorChecker = new MaxErrorEnforcer(renderer, maxErrors);

        // Add a render listener that ignores well known rendering exceptions and reports back
        // non
        // ignorable ones
        final RenderExceptionStrategy nonIgnorableExceptionListener;
        nonIgnorableExceptionListener = new RenderExceptionStrategy(renderer);
        renderer.addRenderListener(nonIgnorableExceptionListener);

        // enforce max memory usage
        int maxMemory = wms.getMaxRequestMemory() * KB;
        PDFMaxSizeEnforcer memoryChecker = new PDFMaxSizeEnforcer(renderer, graphic, maxMemory);

        // render the map
        renderer.paint(graphic, paintArea, mapContent.getRenderingArea(), mapContent.getRenderingTransform());

        // render the watermark
        MapDecorationLayout.Block watermark = RenderedImageMapOutputFormat.getWatermark(wms.getServiceInfo());

        if (watermark != null) {
            MapDecorationLayout layout = new MapDecorationLayout();
            layout.paint(graphic, paintArea, mapContent);
        }

        // check if a non ignorable error occurred
        if (nonIgnorableExceptionListener.exceptionOccurred()) {
            Exception renderError = nonIgnorableExceptionListener.getException();
            throw new ServiceException("Rendering process failed", renderError, "internalError");
        }

        // check if too many errors occurred
        if (errorChecker.exceedsMaxErrors()) {
            throw new ServiceException("More than " + maxErrors + " rendering errors occurred, bailing out",
                    errorChecker.getLastException(), "internalError");
        }

        // check we did not use too much memory
        if (memoryChecker.exceedsMaxSize()) {
            long kbMax = maxMemory / KB;
            throw new ServiceException(
                    "Rendering request used more memory than the maximum allowed:" + kbMax + "KB");
        }

        graphic.dispose();
        cb.addTemplate(tp, 0, 0);

        // step 5: we close the document
        document.close();
        writer.flush();
        writer.close();
    } catch (DocumentException t) {
        throw new ServiceException("Error setting up the PDF", t, "internalError");
    }
}

From source file:org.goobi.presentation.contentservlet.controller.GetMetsPdfAction.java

License:Apache License

/************************************************************************************
 * exectute mets handling and generation of pdf file and send pdf back to output stream of the servlet, after setting correct mime type
 * //  w ww.j a v  a  2s  . c om
 * @param request {@link HttpServletRequest} of ServletRequest
 * @param response {@link HttpServletResponse} for writing to response output stream
 * @throws IOException
 * @throws ServletException
 * @throws ContentLibException
 * @throws URISyntaxException
 * @throws CacheException 
 ************************************************************************************/
@Override
public void run(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException, ContentLibException, URISyntaxException, CacheException {

    /* first of all validation */
    validateParameters(request);

    /*
     * -------------------------------- get central configuration and retrieve source image from url --------------------------------
     */
    ContentServerConfiguration config = ContentServerConfiguration.getInstance();
    if (config.getWatermarkUse()) {
        File watermarkfile = new File(new URI(config.getWatermarkConfigFilePath()));
        myWatermark = Watermark.generateWatermark(request, watermarkfile);
    }
    OutputStream myOutStream = response.getOutputStream();
    ContentCache cc = ContentServer.getPdfCache();
    String myUniqueID = getContentCacheIdForRequest(request, config);
    setTargetNameAndMimeType(request, response, config);
    try {
        /*
         * -------------------------------- ask ContentCache, if object already exists --------------------------------
         */
        PDFManager pdfmanager = null;
        try {
            boolean ignoreCache = false;
            /* check if cache should be ignored */
            if (request.getParameter("ignoreCache") != null) {
                String ignore = request.getParameter("ignoreCache").trim();
                ignoreCache = Boolean.parseBoolean(ignore);
            }
            if (cc == null || !config.getPdfCacheUse()) {
                ignoreCache = true;
                cc = null;
                LOGGER.debug("cache deactivated via configuration");
            }

            /* if cache should not be ignored and cache contains file, write it back to stream */
            if (!ignoreCache && cc.cacheContains(myUniqueID, "pdf")) {
                LOGGER.debug("get file from cache: " + myUniqueID);
                cc.writeToStream(response.getOutputStream(), myUniqueID, "pdf");
                return;
            } else if (ignoreCache == false) {
                LOGGER.debug("file not found in cache: " + myUniqueID);
            }

            /*
             * -------------------------------- if Cache is not used, parse mets file name and add it to repository path
             * --------------------------------
             */
            String metsFile = request.getParameter("metsFile");
            if (!metsFile.endsWith(".xml")) {
                metsFile += ".xml";
            }
            URL fullMetsPath = new URL(config.getRepositoryPathMets() + metsFile);
            LOGGER.debug("mets file to parse: " + fullMetsPath);

            /*
             * -------------------------------- open METS file --------------------------------
             */
            METSParser metsparser = new METSParser(fullMetsPath, true);
            SimplePDFMetadataExtractor spme = new SimplePDFMetadataExtractor();
            spme.activateDFGConfiguration();

            // set the Metadata extractor and the Bookmark metadata extractor
            metsparser.setMetadataextractor(spme);
            metsparser.setStructureMetadataExtractor(new SimpleStructureMetadataExtractor());

            /*
             * -------------------------------- check if filegroup is defined in request parameter, else take it from config file
             * --------------------------------
             */
            String strMetsFileGroup = request.getParameter("metsFileGroup");
            if (strMetsFileGroup == null) {
                strMetsFileGroup = config.getDefaultMetsFileGroup();
            }
            metsparser.setFilegroupsuseattributevalue(strMetsFileGroup);
            LOGGER.debug("Using METS file group: " + strMetsFileGroup);

            /*
             * -------------------------------- check divID as parameter, else use upper most divID --------------------------------
             */
            String divID = request.getParameter("divID");
            DivType pdfdiv = null;
            if (StringUtils.isNotBlank(divID)) {
                pdfdiv = metsparser.getDIVbyID(divID);
                // check if the METS file is a monograph, volume or multivolume file
            } else {
                DivType uplogdiv = metsparser.getUppermostLogicalDiv();
                if (uplogdiv == null) {
                    throw new ContentLibPdfException("Can't create PDF; div seems to be an anchor.");
                }

                // check, if we have <mptr> as children
                List<Mptr> mptrs = uplogdiv.getMptrList();
                if ((mptrs == null) || (mptrs.size() == 0)) {
                    // no mptr - must be a monograph
                    // in this case the uppermost logical id is the one we are looking for
                    pdfdiv = uplogdiv;
                } else {
                    // check, if we have a physical structmap
                    DivType physDiv = metsparser.getUppermostPhysicalDiv();
                    if (physDiv == null) {
                        // it is a multivolume or a periodical or anything like this
                        // in this case the uppermost logical div is the one for which we create the PDF
                        pdfdiv = uplogdiv;
                    } else {
                        // it is the first child div; this represents the volume

                        List<DivType> children = uplogdiv.getDivList();
                        if ((children == null) || (children.size() == 0)) {
                            throw new ContentLibPdfException("Can't create PDF; can't find a div");
                        }
                        pdfdiv = children.get(0); // the first child
                    }
                }
            }
            spme.calculateMetadata(pdfdiv, metsparser);
            metsparser.getAllFilesForRelatedDivs(pdfdiv.getID()); // get page names

            /*
             * -------------------------------- get list of files and pagenames --------------------------------
             */
            Map<Integer, UrlImage> myPages = metsparser.getImageMap();
            // HashMap<Integer, URL> myURLs = metsparser.getPageUrls();
            Map<Integer, String> myNames = metsparser.getPageNames();
            List<? extends Structure> pDFBookmarks = metsparser.getStructureList();
            // PDFManager pdfmanager = new PDFManager(myURLs);
            pdfmanager = new PDFManager(myPages, true);

            setPdfManagerDefaults(request, config, pdfmanager);

            /*
             * -------------------------------- set pdf meta data --------------------------------
             */
            if (spme.getPdftitle() != null) {
                String title = spme.getPdftitle().trim();
                pdfmanager.setTitle(title);
            }
            if (spme.getPdfcreator() != null) {
                String creator = spme.getPdfcreator().trim();
                pdfmanager.setCreator(creator);
                pdfmanager.setAuthor(creator);
            }
            if (spme.getPdfkeywords() != null) {
                pdfmanager.setSubject(spme.getPdfkeywords());
            }

            /*
             * -------------------------------- if configured create PDF title page - either read its path from config file and fill it with mets
             * content - or if given as url parameter use it directly without any change --------------------------------
             */
            if (config.getPdfTitlePageUse()) {
                PDFTitlePage pdftp = new PDFTitlePage();

                String pdfconfigurl = request.getParameter("pdftitlepage");
                if (StringUtils.isNotBlank(pdfconfigurl)) {
                    pdftp.readConfiguration(new URI(pdfconfigurl));
                } else {
                    pdftp.readConfiguration(config.getPdfTitlePageConfigFile());
                    if (spme.getPdfTitlepageLine1() != null) {
                        PDFTitlePageLine ptl = new PDFTitlePageLine(spme.getPdfTitlepageLine1());
                        ptl.setLinetype(2);
                        ptl.setFontsize(14);
                        pdftp.addPDFTitlePageLine(ptl);
                    }

                    if (spme.getPdfTitlepageLine2() != null) {
                        PDFTitlePageLine ptl = new PDFTitlePageLine(spme.getPdfTitlepageLine2());
                        ptl.setLinetype(2);
                        ptl.setFontsize(10);
                        pdftp.addPDFTitlePageLine(ptl);
                    }

                    if (spme.getPdfTitlepageLine3() != null) {
                        PDFTitlePageLine ptl = new PDFTitlePageLine(spme.getPdfTitlepageLine3());
                        ptl.setLinetype(2);
                        ptl.setFontsize(10);
                        pdftp.addPDFTitlePageLine(ptl);
                    }

                    if (spme.getPdfTitlepageLine4() != null) {
                        PDFTitlePageLine ptl = new PDFTitlePageLine(spme.getPdfTitlepageLine4());
                        ptl.setLinetype(2);
                        ptl.setFontsize(10);
                        pdftp.addPDFTitlePageLine(ptl);
                    }
                }
                pdfmanager.setPdftitlepage(pdftp);
            }

            /*
             * -------------------------------- set page names and bookmarks --------------------------------
             */
            if ((myNames != null) && (myNames.size() > 0)) {
                pdfmanager.setImageNames(myNames);
            }
            if ((pDFBookmarks != null) && (pDFBookmarks.size() > 0)) {
                pdfmanager.setStructureList(pDFBookmarks);
            }

            /*
             * -------------------------------- write pdf to response stream (and cache) --------------------------------
             */
            /* remove file from cache, if cache should be used and file present */
            if (cc != null) {
                cc.delete(myUniqueID, "pdf");
            }
            /* if cache size is exceeded write it to response stream only */
            if (cc != null && !cc.isCacheSizeExceeded()) {
                LOGGER.info("write file to cache and servlet response: " + cc.getFileForId(myUniqueID, "pdf"));
                myOutStream = new CacheOutputStream(cc.getFileForId(myUniqueID, "pdf"),
                        response.getOutputStream());
            } else if (cc == null) {
                LOGGER.info("file will not be written to cache, cache is deactivated in configuration");
            } else if (cc.isCacheSizeExceeded()) {
                LOGGER.info(
                        "file will not be written to cache, maximum cache size exceeded defined configuration");
            }
        } catch (NullPointerException e) {
            throw new NullPointerException("Nullpointer occured before pdf-generation");
        }
        /* write to stream */
        if (pdfmanager != null) {
            pdfmanager.createPDF(myOutStream, getPageSize(request), myWatermark);
        }
    } catch (Exception e) {
        LOGGER.error("error during pdf generation (" + e.getClass().getName() + ")", e);
        Document pdfdoc = new Document();
        PdfWriter writer;
        try {
            writer = PdfWriter.getInstance(pdfdoc, myOutStream);
        } catch (DocumentException e1) {
            throw new ContentLibException("wrapped DocumentException", e1);
        }
        pdfdoc.open();

        /*---------------------------------
         * Generate Watermark
         *---------------------------------*/
        String errorString = e.getClass().getName() + ": " + e.getMessage();
        String jpgfile = new File(Util.getBaseFolderAsFile(), "errorfile.jpg").getAbsolutePath();
        LOGGER.debug("errorfile to embedd: " + jpgfile);
        FileInputStream inputFileStream = new FileInputStream(jpgfile);
        RenderedImage ri = ServletWatermark.generateErrorWatermark(inputFileStream, errorString)
                .getRenderedImage();

        /*
         * -------------------------------- prepare target and read created image --------------------------------
         */
        BufferedImage buffImage = ImageManipulator.fromRenderedToBuffered(ri);
        Image pdfImage;
        try {
            pdfImage = Image.getInstance(buffImage, null, false);
            pdfdoc.add(pdfImage);
        } catch (BadElementException e1) {
            LOGGER.error("error while adding pdfImage", e);
            throw new ContentLibException("wrapped BadElementException", e1);
        } catch (DocumentException e2) {
            LOGGER.error("error while adding pdfImage", e);
            throw new ContentLibException("wrapped DocumentException", e2);
        } finally {
            /*
             * -------------------------------- close all --------------------------------
             */
            try {
                if (inputFileStream != null) {
                    inputFileStream.close();
                }
                if (pdfdoc != null) {
                    pdfdoc.close();
                }
                if (writer != null) {
                    writer.close();
                }
            } catch (ExceptionConverter e2) {
                LOGGER.warn("Caught ExceptionConverter object");
            } finally {

                /* on errors remove incomplete file from cache */
                try {
                    if (myOutStream != null) {
                        myOutStream.flush();
                        myOutStream.close();
                    }
                } catch (Exception e2) {
                    LOGGER.debug("Caught unknown Exception");
                }
                if (cc != null && cc.cacheContains(myUniqueID, "pdf")) {
                    cc.delete(myUniqueID, "pdf");
                }
            }
        }
    } finally {
        if (myOutStream != null) {
            myOutStream.flush();
            myOutStream.close();
        }
    }
}

From source file:org.goobi.presentation.contentservlet.controller.GetPdfMultiMetsAction.java

License:Apache License

/************************************************************************************
 * exectute multiple mets handling and generation of one pdf file from it to send it back to output stream of the servlet, after setting correct
 * mime type/*from  w w  w .  j ava 2  s . com*/
 * 
 * @param request {@link HttpServletRequest} of ServletRequest
 * @param response {@link HttpServletResponse} for writing to response output stream
 * @throws IOException
 * @throws ServletException
 * @throws ContentLibException
 * @throws URISyntaxException
 * @throws CacheException
 ************************************************************************************/
@Override
public void run(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException, ContentLibException, URISyntaxException, CacheException {

    /* first of all validation */
    validateParameters(request);

    /*
     * -------------------------------- get central configuration and --------------------------------
     */
    ContentServerConfiguration config = ContentServerConfiguration.getInstance();
    OutputStream myOutStream = response.getOutputStream();
    setTargetNameAndMimeType(request, response, config);
    Watermark myWatermark = null;
    /* get mets filegroup from request or from configuration */
    String strMetsFileGroup = request.getParameter("metsFileGroup");
    if (strMetsFileGroup == null) {
        strMetsFileGroup = config.getDefaultMetsFileGroup();
    }

    try {
        if (config.getWatermarkUse()) {

            File watermarkfile = new File(new URI(config.getWatermarkConfigFilePath()));
            if (request.getParameterMap().containsKey("watermarkText")) {
                myWatermark = new Watermark(watermarkfile, request.getParameter("watermarkText"));
            } else {
                myWatermark = new Watermark(watermarkfile);
            }

        }
        // defining the DocumentPart-List
        LinkedList<DocumentPart> documentparts = new LinkedList<DocumentPart>();

        /* define title page, if configured */
        PDFTitlePage titlepage = new PDFTitlePage();
        if (config.getPdfTitlePageUse()) {
            titlepage.readConfiguration(config.getPdfTitlePageConfigFile());
        }

        /* run through all Documentparts in parameter 'files' */
        StrTokenizer stdocuments = new StrTokenizer(request.getParameter("files"), "$$");
        while (stdocuments.hasNext()) {
            /* get all parameters from each Documentpart */
            StrTokenizer docparams = new StrTokenizer(stdocuments.nextToken(), "$");

            /* create DocumentPart */
            String doctype = docparams.nextToken();
            URL url = new URL(config.getRepositoryPathMets() + docparams.nextToken());
            // URL url2 = new URL("http://gdz.sub.uni-goettingen.de/mets_export.php?PPN=PPN271629789");
            DocumentPart dp;
            if (doctype.equals("pdf")) {
                dp = new DocumentPart(url, DocumentPartType.PDF);
            } else {
                dp = new DocumentPart(url, DocumentPartType.METS);
                dp.setMetsFileGroup(strMetsFileGroup);
            }

            /* possibly a divid */
            if (docparams.size() == 3) {
                dp.setDivid(docparams.nextToken());
            }

            /* if titlepage should be used, add it now to documentpart */
            if (config.getPdfTitlePageUse()) {
                dp.setTitlepage(titlepage.clone());
            }

            /* add documentpart to list */
            documentparts.add(dp);
        }

        // create metadata extractor
        SimplePDFMetadataExtractor spme = new SimplePDFMetadataExtractor();
        // create bookmark extractor
        StructureMetadataExtractor bmke = new SimpleStructureMetadataExtractor();
        // create PDF Manager
        PDFCreator pdfcreator = new PDFCreator();

        PDFConfiguration pdfconfig = new PDFConfiguration();
        File iccfile = new File(Util.getBaseFolderAsFile(), "sRGB.icc");
        pdfconfig.setIccinputfilename(iccfile.getAbsolutePath());
        pdfconfig.setPagesize(getPageSize(request));
        pdfconfig.setPdfDefaultAlwaysCompressToJPEG(config.getPdfDefaultAlwaysCompressToJPEG());
        pdfconfig.setPdfDefaultAlwaysUseRenderedImage(config.getPdfDefaultAlwaysUseRenderedImage());
        boolean pdfa = Boolean.parseBoolean(getParameterFromRequestOrConfig("writeAsPdfA", request));
        pdfconfig.setWriteAsPdfA(pdfa);

        pdfcreator.createPDF(myOutStream, documentparts, pdfconfig, spme, bmke, myWatermark);
    } catch (Exception e) {
        LOGGER.error("error while multiple files to pdf generation (" + e.getClass().getName() + ")", e);
        Document pdfdoc = new Document();
        PdfWriter writer;
        try {
            writer = PdfWriter.getInstance(pdfdoc, myOutStream);
        } catch (DocumentException e1) {
            throw new ContentLibException("wrapped DocumentException", e1);
        }
        pdfdoc.open();

        /*---------------------------------
         * Generate Watermark
         *---------------------------------*/
        String errorString = e.getClass().getName() + ": " + e.getMessage();
        String jpgfile = new File(Util.getBaseFolderAsFile(), "errorfile.jpg").getAbsolutePath();
        LOGGER.debug("errorfile to embedd: " + jpgfile);
        FileInputStream inputFileStream = new FileInputStream(jpgfile);
        RenderedImage ri = ServletWatermark.generateErrorWatermark(inputFileStream, errorString)
                .getRenderedImage();

        /*
         * -------------------------------- prepare target and read created image --------------------------------
         */
        BufferedImage buffImage = ImageManipulator.fromRenderedToBuffered(ri);
        Image pdfImage;
        try {
            pdfImage = Image.getInstance(buffImage, null, false);
            pdfdoc.add(pdfImage);
        } catch (BadElementException e1) {
            LOGGER.error("error while adding pdfImage", e);
            throw new ContentLibException("wrapped BadElementException", e1);
        } catch (DocumentException e2) {
            LOGGER.error("error while adding pdfImage", e);
            throw new ContentLibException("wrapped DocumentException", e2);
        }
        /*
         * -------------------------------- close all --------------------------------
         */
        try {
            inputFileStream.close();
            pdfdoc.close();
            writer.close();
        } catch (Error e2) {
            LOGGER.warn("Caught unknown error when closing the pdf writer. Probably due to a broken pipe");
        } finally {
            myOutStream.flush();
            myOutStream.close();
        }
    } finally {
        if (myOutStream != null) {
            myOutStream.flush();
            myOutStream.close();
        }
    }
}

From source file:org.jboss.as.quickstarts.ejbinwar.ejb.GreeterEJB.java

License:Apache License

public ByteArrayOutputStream generatePDFDocumentBytes(String selectedTariff) throws DocumentException {
    java.util.Set<String> users = getRestUsers(selectedTariff);

    Document doc = new Document();

    ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();
    PdfWriter docWriter = null;

    try {/*from   w w w  . j a v  a 2 s .c o m*/
        docWriter = PdfWriter.getInstance(doc, baosPDF);

        doc.addAuthor(this.getClass().getName());
        doc.addCreationDate();
        doc.addProducer();
        doc.addCreator(this.getClass().getName());
        doc.addTitle(selectedTariff + " clients");
        doc.addKeywords("pdf, itext, Java, ecare, http");

        doc.setPageSize(PageSize.LETTER);

        HeaderFooter footer = new HeaderFooter(new Phrase("E-Care report"), false);

        doc.setFooter(footer);

        doc.open();

        doc.add(new Paragraph(selectedTariff + " clients"));
        doc.add(new Paragraph("\n"));
        doc.add(new Paragraph("\n"));

        PdfPTable table = new PdfPTable(4); // 3 columns.

        PdfPCell cell1 = new PdfPCell(new Paragraph("Name"));
        PdfPCell cell2 = new PdfPCell(new Paragraph("Surname"));
        PdfPCell cell3 = new PdfPCell(new Paragraph("Address"));
        PdfPCell cell4 = new PdfPCell(new Paragraph("Email"));

        table.addCell(cell1);
        table.addCell(cell2);
        table.addCell(cell3);
        table.addCell(cell4);

        for (Iterator<String> it = users.iterator(); it.hasNext();) {
            String user = it.next();

            table.addCell(new PdfPCell(new Paragraph(user.split(" ")[0])));
            table.addCell(new PdfPCell(new Paragraph(user.split(" ")[1])));
            table.addCell(new PdfPCell(new Paragraph(user.split(" ")[2])));
            table.addCell(new PdfPCell(new Paragraph(user.split(" ")[3])));
        }

        doc.add(table);

    } catch (DocumentException dex) {
        baosPDF.reset();
        throw dex;
    } finally {
        if (doc != null) {
            doc.close();
        }
        if (docWriter != null) {
            docWriter.close();
        }
    }

    if (baosPDF.size() < 1) {
        throw new DocumentException("document has " + baosPDF.size() + " bytes");
    }
    return baosPDF;

}

From source file:org.kuali.kfs.fp.document.service.impl.CashReceiptCoverSheetServiceImpl.java

License:Open Source License

/**
 * Generate a cover sheet for the <code>{@link CashReceiptDocument}</code>. An <code>{@link OutputStream}</code> is written
 * to for the cover sheet.// w  w w .  j ava2 s . c om
 *
 * @param document The cash receipt document the cover sheet is for.
 * @param searchPath The directory path to the template to be used to generate the cover sheet.
 * @param returnStream The output stream the cover sheet will be written to.
 * @exception DocumentException Thrown if the document provided is invalid, including null.
 * @exception IOException Thrown if there is a problem writing to the output stream.
 * @see org.kuali.rice.kns.module.financial.service.CashReceiptCoverSheetServiceImpl#generateCoverSheet(
 *      org.kuali.module.financial.documentCashReceiptDocument )
 */
@Override
public void generateCoverSheet(CashReceiptDocument document, String searchPath, OutputStream returnStream)
        throws Exception {

    if (isCoverSheetPrintingAllowed(document)) {
        ByteArrayOutputStream stamperStream = new ByteArrayOutputStream();

        stampPdfFormValues(document, searchPath, stamperStream);

        PdfReader reader = new PdfReader(stamperStream.toByteArray());
        Document pdfDoc = new Document(reader.getPageSize(FRONT_PAGE));
        PdfWriter writer = PdfWriter.getInstance(pdfDoc, returnStream);

        pdfDoc.open();
        populateCheckDetail(document, writer, reader);
        pdfDoc.close();
        writer.close();
    }
}

From source file:org.kuali.kfs.module.tem.pdf.Coversheet.java

License:Open Source License

/**
 * @see org.kuali.kfs.module.tem.pdf.PdfStream#print(java.io.OutputStream)
 * @throws Exception/*w  w  w. j a v  a 2  s.  c  o  m*/
 */
@Override
public void print(final OutputStream stream) throws Exception {
    final Font titleFont = FontFactory.getFont(FontFactory.HELVETICA, 20, Font.BOLD);
    final Font headerFont = FontFactory.getFont(FontFactory.HELVETICA, 12, Font.BOLD);
    final Font normalFont = FontFactory.getFont(FontFactory.HELVETICA, 12, Font.NORMAL);

    final Document doc = new Document();
    final PdfWriter writer = PdfWriter.getInstance(doc, stream);
    doc.open();
    if (getDocumentNumber() != null) {
        Image image = Image.getInstance(new BarcodeHelper().generateBarcodeImage(getDocumentNumber()), null);
        doc.add(image);
    }

    final Paragraph title = new Paragraph("TEM Coversheet", titleFont);
    doc.add(title);

    final Paragraph faxNumber = new Paragraph(
            "Fax this page to " + SpringContext.getBean(ParameterService.class)
                    .getParameterValueAsString(TravelReimbursementDocument.class, FAX_NUMBER),
            normalFont);
    doc.add(faxNumber);

    final Paragraph header = new Paragraph("", headerFont);
    header.setAlignment(ALIGN_RIGHT);
    header.add("Document Number: " + getDocumentNumber());
    doc.add(header);
    doc.add(getInstructionsParagraph());
    doc.add(getMailtoParagraph());
    doc.add(Chunk.NEWLINE);
    doc.add(getTripInfo());
    doc.add(Chunk.NEWLINE);
    doc.add(getPersonalInfo());
    doc.add(Chunk.NEWLINE);
    doc.add(getExpenses());

    drawAlignmentMarks(writer.getDirectContent());

    doc.close();
    writer.close();
}

From source file:org.kuali.ole.fp.document.service.impl.CashReceiptCoverSheetServiceImpl.java

License:Educational Community License

/**
 * Generate a cover sheet for the <code>{@link CashReceiptDocument}</code>. An <code>{@link OutputStream}</code> is written
 * to for the cover sheet.//  ww w  .j  a  va  2 s  .  c o  m
 * 
 * @param document The cash receipt document the cover sheet is for.
 * @param searchPath The directory path to the template to be used to generate the cover sheet.
 * @param returnStream The output stream the cover sheet will be written to.
 * @exception DocumentException Thrown if the document provided is invalid, including null.
 * @exception IOException Thrown if there is a problem writing to the output stream.
 * @see org.kuali.rice.kns.module.financial.service.CashReceiptCoverSheetServiceImpl#generateCoverSheet(
 *      org.kuali.module.financial.documentCashReceiptDocument )
 */
public void generateCoverSheet(CashReceiptDocument document, String searchPath, OutputStream returnStream)
        throws Exception {

    if (isCoverSheetPrintingAllowed(document)) {
        ByteArrayOutputStream stamperStream = new ByteArrayOutputStream();

        stampPdfFormValues(document, searchPath, stamperStream);

        PdfReader reader = new PdfReader(stamperStream.toByteArray());
        Document pdfDoc = new Document(reader.getPageSize(FRONT_PAGE));
        PdfWriter writer = PdfWriter.getInstance(pdfDoc, returnStream);

        pdfDoc.open();
        populateCheckDetail(document, writer, reader);
        pdfDoc.close();
        writer.close();
    }
}

From source file:org.locationtech.udig.printing.ui.pdf.ExportPDFWizard.java

License:Open Source License

@Override
public boolean performFinish() {

    //create the document                 
    Rectangle suggestedPageSize = getITextPageSize(page1.getPageSize());
    Rectangle pageSize = rotatePageIfNecessary(suggestedPageSize); //rotate if we need landscape

    Document document = new Document(pageSize);

    try {/*from  w w  w . j  a v  a  2 s .  c  o  m*/

        //Basic setup of the Document, and get instance of the iText Graphics2D
        //   to pass along to uDig's standard "printing" code.
        String outputFile = page1.getDestinationDir() + System.getProperty("file.separator") + //$NON-NLS-1$
                page1.getOutputFile();
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outputFile));
        document.open();
        Graphics2D graphics = null;
        Template template = getTemplate();

        int i = 0;
        int numPages = 1;
        do {

            //sets the active page
            template.setActivePage(i);

            PdfContentByte cb = writer.getDirectContent();

            Page page = makePage(pageSize, document, template);

            graphics = cb.createGraphics(pageSize.getWidth(), pageSize.getHeight());

            //instantiate a PrinterEngine (pass in the Page instance)
            PrintingEngine engine = new PrintingEngine(page);

            //make page format
            PageFormat pageFormat = new PageFormat();
            pageFormat.setOrientation(PageFormat.PORTRAIT);
            java.awt.print.Paper awtPaper = new java.awt.print.Paper();
            awtPaper.setSize(pageSize.getWidth() * 3, pageSize.getHeight() * 3);
            awtPaper.setImageableArea(0, 0, pageSize.getWidth(), pageSize.getHeight());
            pageFormat.setPaper(awtPaper);

            //run PrinterEngine's print function
            engine.print(graphics, pageFormat, 0);

            graphics.dispose();
            document.newPage();
            if (i == 0) {
                numPages = template.getNumPages();
            }
            i++;

        } while (i < numPages);

        //cleanup
        document.close();
        writer.close();
    } catch (DocumentException e) {
        e.printStackTrace();
        return false;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    } catch (PrinterException e) {
        e.printStackTrace();
    }
    return true;
}

From source file:org.mapfish.print.MapPrinter.java

License:Open Source License

/**
 * Generate the PDF using the given spec.
 *
 * @return The context that was used for printing.
 *///from w  w  w  . j a  va  2 s . com
public RenderingContext print(PJsonObject jsonSpec, OutputStream outFile, String referer)
        throws DocumentException {

    final String layoutName = jsonSpec.getString(Constants.JSON_LAYOUT_KEY);
    Layout layout = config.getLayout(layoutName);
    if (layout == null) {
        throw new RuntimeException("Unknown layout '" + layoutName + "'");
    }

    Document doc = new Document(layout.getFirstPageSize(null, jsonSpec));
    PdfWriter writer = PdfWriter.getInstance(doc, outFile);
    if (!layout.isSupportLegacyReader()) {
        writer.setFullCompression();
        writer.setPdfVersion(PdfWriter.PDF_VERSION_1_5);
        writer.setCompressionLevel(PdfStream.BEST_COMPRESSION);
    }
    RenderingContext context = new RenderingContext(doc, writer, config, jsonSpec, configDir, layout, referer);

    layout.render(jsonSpec, context);

    doc.close();
    writer.close();
    return context;
}

From source file:org.oscarehr.common.printing.HtmlToPdfServlet.java

License:Open Source License

private static void close(PdfWriter writer) {
    if (writer != null) {
        try {/*from   w  ww . j  a  v a  2  s  .  com*/
            writer.close();
        } catch (Exception e) {
            MiscUtils.getLogger().error("Unable to close writer", e);
        }
    }
}