/** * Copyright (c) 2006 by Know-Center, Graz, Austria * * This software is the confidential and proprietary information of Know-Center, * Graz, Austria. You shall not disclose such Confidential Information and shall * use it only in accordance with the terms of the license agreement you entered * into with Know-Center. * * KNOW-CENTER MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR * NON-INFRINGEMENT. KNOW-CENTER SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. * * $Id: PDFUtilities.java,v 1.3 2006/10/31 08:09:33 wprinz Exp $ */ package at.knowcenter.wag.egov.egiz.pdf; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.util.List; import org.pdfbox.pdfparser.PDFParser; import org.pdfbox.pdmodel.PDDocument; import org.pdfbox.pdmodel.PDPage; import at.knowcenter.wag.egov.egiz.cfg.SettingsReader; import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException; import com.lowagie.text.DocumentException; /** * Contains useful helpers for accessing PDF documents. * * @author wprinz */ public abstract class PDFUtilities { public static float calculateLastPageLength(final byte[] pdf) throws PDFDocumentException { try { ByteArrayInputStream original_bais = new ByteArrayInputStream(pdf); byte [] normalized_pdf = TextualSignature.normalizePDF(original_bais); ByteArrayInputStream bais = new ByteArrayInputStream(normalized_pdf); PDFParser parser = new PDFParser(bais); File temporary_dir = SettingsReader.getTemporaryDirectory(); parser.setTempDirectory(temporary_dir); parser.parse(); PDDocument pdfDocument_ = parser.getPDDocument(); float last_page_length = calculateLastPageLength(pdfDocument_); pdfDocument_.close(); return last_page_length; } catch (IOException e) { throw new PDFDocumentException(201, e); } catch (DocumentException e) { throw new PDFDocumentException(201, e); } } public static float calculateLastPageLength(PDDocument document) throws IOException { int last_page_id = document.getNumberOfPages(); List allPages = document.getDocumentCatalog().getAllPages(); PDPage last_page = (PDPage) allPages.get(last_page_id - 1); return calculatePageLength(last_page); } public static float calculatePageLength(PDPage page) throws IOException { // logger_.debug("Last Page id:" + last_page_id); // PDPage last_page = (PDPage) allPages.get(0); PDFPage my_page = new PDFPage(); my_page.processStream(page, page.findResources(), page.getContents().getStream()); return my_page.getMaxPageLength(); } }