/** * Copyright 2006 by Know-Center, Graz, Austria * PDF-AS has been contracted by the E-Government Innovation Center EGIZ, a * joint initiative of the Federal Chancellery Austria and Graz University of * Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. * * $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 at.gv.egiz.pdfas.framework.input.PdfDataSource; import at.gv.egiz.pdfas.impl.input.ByteArrayPdfDataSourceImpl; 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 * @author mruhmer */ public abstract class PDFUtilities { public static float calculatePageLength(final PdfDataSource pdfDataSource,int page ,float footer_line, int pagerotation) throws PDFDocumentException { try { //ByteArrayInputStream original_bais = new ByteArrayInputStream(pdf); //byte [] normalized_pdf = TextualSignature.normalizePDF(original_bais); byte [] normalized_pdf = TextualSignature.normalizePDF(pdfDataSource); // PERF: The whole PDF normalization process is costy 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 page_length = calculatePageLength(pdfDocument_,page , footer_line, pagerotation); pdfDocument_.close(); return page_length; } catch (IOException e) { throw new PDFDocumentException(201, e); } catch (DocumentException e) { throw new PDFDocumentException(201, e); } } public static float calculatePageLength(PDDocument document,int page ,float footer_line, int pagerotation) throws IOException { //int last_page_id = document.getNumberOfPages(); List allPages = document.getDocumentCatalog().getAllPages(); PDPage pdpage = (PDPage) allPages.get(page); pdpage.setRotation(pagerotation); return calculatePageLength(pdpage, footer_line); } /** * @deprecated * @param pdf * @param footer_line * @return * @throws PDFDocumentException */ public static float calculateLastPageLength(final byte[] pdf, float footer_line) throws PDFDocumentException { try { //ByteArrayInputStream original_bais = new ByteArrayInputStream(pdf); PdfDataSource dataSource = new ByteArrayPdfDataSourceImpl(pdf); byte [] normalized_pdf = TextualSignature.normalizePDF(dataSource); 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_, footer_line); 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, float footer_line) 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, footer_line); } public static float calculatePageLength(PDPage page, float footer_line) throws IOException { // logger_.debug("Last Page id:" + last_page_id); // PDPage last_page = (PDPage) allPages.get(0); PDFPage my_page = new PDFPage(footer_line); my_page.processStream(page, page.findResources(), page.getContents().getStream()); return my_page.getMaxPageLength(); } }