List of usage examples for com.lowagie.text.pdf SimpleBookmark shiftPageNumbers
public static void shiftPageNumbers(List list, int pageShift, int pageRange[])
pageShift
to the page number. From source file:org.jaffa.modules.printing.services.MultiFormPrintEngine.java
License:Open Source License
/** * Merge a list of generated Pdf Documents together * @param documents /*w w w. ja v a2s .com*/ * @throws java.io.IOException * @throws com.lowagie.text.DocumentException * @return byte[] */ public static byte[] mergePdf(List<byte[]> documents) throws IOException, DocumentException { int pageOffset = 0; ArrayList master = new ArrayList(); ByteArrayOutputStream output = new ByteArrayOutputStream(); Document document = null; PdfCopy writer = null; boolean first = true; for (Iterator<byte[]> it = documents.iterator(); it.hasNext();) { // we create a reader for a certain document PdfReader reader = new PdfReader(it.next()); reader.consolidateNamedDestinations(); // we retrieve the total number of pages int n = reader.getNumberOfPages(); List bookmarks = SimpleBookmark.getBookmark(reader); if (bookmarks != null) { if (pageOffset != 0) SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null); master.addAll(bookmarks); } pageOffset += n; if (first) { first = false; // step 1: creation of a document-object document = new Document(reader.getPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document writer = new PdfCopy(document, output); // step 3: we open the document document.open(); } // step 4: we add content PdfImportedPage page; for (int i = 0; i < n;) { ++i; page = writer.getImportedPage(reader, i); writer.addPage(page); } PRAcroForm form = reader.getAcroForm(); if (form != null) writer.copyAcroForm(reader); } if (master.size() > 0) writer.setOutlines(master); // step 5: we close the document if (document != null) document.close(); return output.toByteArray(); }
From source file:org.jpedal.examples.simpleviewer.utils.ItextFunctions.java
License:Open Source License
public void delete(int pageCount, PdfPageData currentPageData, DeletePDFPages deletedPages) { File tempFile = null;// w ww. j a v a 2s .c om try { tempFile = File.createTempFile("temp", null); ObjectStore.copy(selectedFile, tempFile.getAbsolutePath()); } catch (Exception e) { return; } try { int[] pgsToDelete = deletedPages.getDeletedPages(); if (pgsToDelete == null) return; int check = -1; if (pgsToDelete.length == 1) { check = currentGUI.showConfirmDialog(Messages.getMessage("PdfViewerMessage.ConfirmDeletePage"), Messages.getMessage("PdfViewerMessage.Confirm"), JOptionPane.YES_NO_OPTION); } else { check = currentGUI.showConfirmDialog(Messages.getMessage("PdfViewerMessage.ConfirmDeletePage"), Messages.getMessage("PdfViewerMessage.Confirm"), JOptionPane.YES_NO_OPTION); } if (check != 0) return; if (pgsToDelete == null) return; List pagesToDelete = new ArrayList(); for (int i = 0; i < pgsToDelete.length; i++) pagesToDelete.add(new Integer(pgsToDelete[i])); PdfReader reader = new PdfReader(tempFile.getAbsolutePath()); List bookmarks = SimpleBookmark.getBookmark(reader); // int[][] xx = new int[pgsToDelete.length][1]; // for(int i=0; i<pgsToDelete.length;i++){ // xx[i][0] = pgsToDelete[i]; // } // // PageRanges pr = new PageRanges(xx); // int[] toRemove = linearize(pr.getMembers()); // // SimpleBookmark.eliminatePages(bookmarks,toRemove); SimpleBookmark.shiftPageNumbers(bookmarks, -1, new int[] { 5, 5 }); // if(1==1) // return; /** * check document will have at leat 1 page */ boolean pageAdded = false; for (int page = 1; page <= pageCount; page++) { if (!pagesToDelete.contains(new Integer(page))) { pageAdded = true; page = pageCount; } } if (!pageAdded) { currentGUI.showMessageDialog(Messages.getMessage("PdfViewerError.PageWillNotDelete")); return; } Document document = new Document(); PdfCopy writer = new PdfCopy(document, new FileOutputStream(selectedFile)); document.open(); for (int page = 1; page <= pageCount; page++) { if (!pagesToDelete.contains(new Integer(page))) { PdfImportedPage pip = writer.getImportedPage(reader, page); writer.addPage(pip); pageAdded = true; } } writer.setOutlines(bookmarks); document.close(); } catch (Exception e) { ObjectStore.copy(tempFile.getAbsolutePath(), selectedFile); e.printStackTrace(); } finally { tempFile.delete(); } }
From source file:org.jrimum.bopepo.pdf.PDFUtil.java
License:Apache License
/** * <p>/*from ww w . ja v a 2 s. co m*/ * Junta varios arquivos pdf em um soh. * </p> * * @param pdfFiles * Lista de array de bytes * * @return Arquivo PDF em forma de byte * @since 0.2 */ @SuppressWarnings("unchecked") public static byte[] mergeFiles(List<byte[]> pdfFiles) { // retorno byte[] bytes = null; if (isNotNull(pdfFiles) && !pdfFiles.isEmpty()) { int pageOffset = 0; boolean first = true; ArrayList master = null; Document document = null; PdfCopy writer = null; ByteArrayOutputStream byteOS = null; try { byteOS = new ByteArrayOutputStream(); master = new ArrayList(); for (byte[] doc : pdfFiles) { if (isNotNull(doc)) { // cria-se um reader para cada documento PdfReader reader = new PdfReader(doc); if (reader.isEncrypted()) { reader = new PdfReader(doc, "".getBytes()); } reader.consolidateNamedDestinations(); // pega-se o numero total de paginas int n = reader.getNumberOfPages(); List bookmarks = SimpleBookmark.getBookmark(reader); if (isNotNull(bookmarks)) { if (pageOffset != 0) { SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null); } master.addAll(bookmarks); } pageOffset += n; if (first) { // passo 1: criar um document-object document = new Document(reader.getPageSizeWithRotation(1)); // passo 2: criar um writer que observa o documento writer = new PdfCopy(document, byteOS); document.addAuthor("JRimum Group"); document.addSubject("JRimum Merged Document"); document.addCreator("JRimum Utilix"); // passo 3: abre-se o documento document.open(); first = false; } // passo 4: adciona-se o conteudo PdfImportedPage page; for (int i = 0; i < n;) { ++i; page = writer.getImportedPage(reader, i); writer.addPage(page); } } } if (master.size() > 0) { writer.setOutlines(master); } // passo 5: fecha-se o documento if (isNotNull(document)) { document.close(); } bytes = byteOS.toByteArray(); } catch (Exception e) { LOG.error("", e); } } return bytes; }
From source file:org.kuali.ext.mm.document.web.struts.CountWorksheetPrintAction.java
License:Educational Community License
private void combineAndFlushReportPDFFiles(List<File> fileList, HttpServletRequest request, HttpServletResponse response) throws Exception { long startTime = System.currentTimeMillis(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ArrayList master = new ArrayList(); int pageOffset = 0; int f = 0;/*from w ww.j av a2s .com*/ PdfCopy writer = null; com.lowagie.text.Document document = null; for (File file : fileList) { // we create a reader for a certain document String reportName = file.getAbsolutePath(); PdfReader reader = new PdfReader(reportName); reader.consolidateNamedDestinations(); // we retrieve the total number of pages int n = reader.getNumberOfPages(); List bookmarks = SimpleBookmark.getBookmark(reader); if (bookmarks != null) { if (pageOffset != 0) { SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null); } master.addAll(bookmarks); } pageOffset += n; if (f == 0) { // step 1: creation of a document-object document = new com.lowagie.text.Document(reader.getPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document writer = new PdfCopy(document, baos); // step 3: we open the document document.open(); } // step 4: we add content PdfImportedPage page; for (int i = 0; i < n;) { ++i; page = writer.getImportedPage(reader, i); writer.addPage(page); } writer.freeReader(reader); f++; } if (!master.isEmpty()) writer.setOutlines(master); // step 5: we close the document document.close(); StringBuffer sbContentDispValue = new StringBuffer(); String useJavascript = request.getParameter("useJavascript"); if (useJavascript == null || useJavascript.equalsIgnoreCase("false")) { sbContentDispValue.append("attachment"); } else { sbContentDispValue.append("inline"); } sbContentDispValue.append("; filename="); sbContentDispValue.append(MMUtil.getFileName()); String contentDisposition = sbContentDispValue.toString(); response.setContentType("application/pdf"); response.setHeader("Content-disposition", contentDisposition); response.setHeader("Expires", "0"); response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); response.setHeader("Pragma", "public"); response.setContentLength(baos.size()); // write to output ServletOutputStream sos = response.getOutputStream(); baos.writeTo(sos); sos.flush(); baos.close(); sos.close(); long endTime = System.currentTimeMillis(); loggerAc.debug("Time taken for report Parameter settings in action " + (endTime - startTime)); }
From source file:org.kuali.ext.mm.service.impl.CountWorksheetReportServiceImpl.java
License:Educational Community License
public ByteArrayOutputStream combineAndFlushReportPDFFiles(List<File> fileList) throws Exception { long startTime = System.currentTimeMillis(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ArrayList master = new ArrayList(); int pageOffset = 0; int f = 0;/* w ww . ja v a 2 s . co m*/ PdfCopy writer = null; com.lowagie.text.Document document = null; for (File file : fileList) { // we create a reader for a certain document String reportName = file.getAbsolutePath(); PdfReader reader = new PdfReader(reportName); reader.consolidateNamedDestinations(); // we retrieve the total number of pages int n = reader.getNumberOfPages(); List bookmarks = SimpleBookmark.getBookmark(reader); if (bookmarks != null) { if (pageOffset != 0) { SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null); } master.addAll(bookmarks); } pageOffset += n; if (f == 0) { // step 1: creation of a document-object document = new com.lowagie.text.Document(reader.getPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document writer = new PdfCopy(document, baos); // step 3: we open the document document.open(); } // step 4: we add content PdfImportedPage page; for (int i = 0; i < n;) { ++i; page = writer.getImportedPage(reader, i); writer.addPage(page); } writer.freeReader(reader); f++; } if (!master.isEmpty()) writer.setOutlines(master); // step 5: we close the document document.close(); return baos; }
From source file:org.kuali.ext.mm.service.impl.CountWorksheetReportServiceImpl.java
License:Educational Community License
public ByteArrayOutputStream combineAndFlushReportPDFStreams(List<ByteArrayOutputStream> fileList) throws Exception { long startTime = System.currentTimeMillis(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ArrayList master = new ArrayList(); int pageOffset = 0; int f = 0;/*from w w w. j av a 2 s . co m*/ PdfCopy writer = null; com.lowagie.text.Document document = null; for (ByteArrayOutputStream file : fileList) { // we create a reader for a certain document // String reportName = file.getAbsolutePath(); PdfReader reader = new PdfReader(file.toByteArray()); reader.consolidateNamedDestinations(); // we retrieve the total number of pages int n = reader.getNumberOfPages(); List bookmarks = SimpleBookmark.getBookmark(reader); if (bookmarks != null) { if (pageOffset != 0) { SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null); } master.addAll(bookmarks); } pageOffset += n; if (f == 0) { // step 1: creation of a document-object document = new com.lowagie.text.Document(reader.getPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document writer = new PdfCopy(document, baos); // step 3: we open the document document.open(); } // step 4: we add content PdfImportedPage page; for (int i = 0; i < n;) { ++i; page = writer.getImportedPage(reader, i); writer.addPage(page); } writer.freeReader(reader); f++; } if (!master.isEmpty()) writer.setOutlines(master); // step 5: we close the document document.close(); return baos; }
From source file:org.kuali.kfs.module.ar.web.struts.CustomerInvoiceAction.java
License:Open Source License
/** * * This method.../*from ww w .j a v a 2s . c o m*/ * @param mapping * @param form * @param request * @param response * @return * @throws Exception */ public ActionForward print(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { CustomerInvoiceForm ciForm = (CustomerInvoiceForm) form; String org = ciForm.getOrgCode(); String chart = ciForm.getChartCode(); Date date = ciForm.getRunDate(); StringBuilder fileName = new StringBuilder(); AccountsReceivableReportService reportService = SpringContext .getBean(AccountsReceivableReportService.class); List<File> reports = new ArrayList<File>(); if (ciForm.getOrgType() != null && chart != null && org != null) { if (ciForm.getOrgType().equals("B")) { reports = reportService.generateInvoicesByBillingOrg(chart, org, date); } else if (ciForm.getOrgType().equals("P")) { reports = reportService.generateInvoicesByProcessingOrg(chart, org, date); } fileName.append(chart); fileName.append(org); if (date != null) { fileName.append(date); } } else if (ciForm.getUserId() != null) { reports = reportService.generateInvoicesByInitiator(ciForm.getUserId(), date); fileName.append(ciForm.getUserId()); } if (reports.size() > 0) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); int pageOffset = 0; ArrayList master = new ArrayList(); int f = 0; Document document = null; PdfCopy writer = null; for (Iterator<File> itr = reports.iterator(); itr.hasNext();) { // we create a reader for a certain document String reportName = itr.next().getAbsolutePath(); PdfReader reader = new PdfReader(reportName); reader.consolidateNamedDestinations(); // we retrieve the total number of pages int n = reader.getNumberOfPages(); List bookmarks = SimpleBookmark.getBookmark(reader); if (bookmarks != null) { if (pageOffset != 0) { SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null); } master.addAll(bookmarks); } pageOffset += n; if (f == 0) { // step 1: creation of a document-object document = new Document(reader.getPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document writer = new PdfCopy(document, baos); // step 3: we open the document document.open(); } // step 4: we add content PdfImportedPage page; for (int i = 0; i < n;) { ++i; page = writer.getImportedPage(reader, i); writer.addPage(page); } writer.freeReader(reader); f++; } if (!master.isEmpty()) { writer.setOutlines(master); // step 5: we close the document } document.close(); fileName.append("-InvoiceBatchPDFs.pdf"); WebUtils.saveMimeOutputStreamAsFile(response, "application/pdf", baos, fileName.toString()); ciForm.setMessage(reports.size() + " Reports Generated"); return null; } ciForm.setMessage("No Reports Generated"); return mapping.findForward(KFSConstants.MAPPING_BASIC); }
From source file:org.kuali.kfs.module.ar.web.struts.CustomerStatementAction.java
License:Educational Community License
public ActionForward printStatementPDF(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { CustomerStatementForm csForm = (CustomerStatementForm) form; String chartCode = request.getParameter("chartCode"); chartCode = chartCode == null ? "" : chartCode; String orgCode = request.getParameter("orgCode"); orgCode = orgCode == null ? "" : orgCode; String customerNumber = request.getParameter("customerNumber"); customerNumber = customerNumber == null ? "" : customerNumber; String accountNumber = request.getParameter("accountNumber"); accountNumber = accountNumber == null ? "" : accountNumber; String statementFormat = request.getParameter("statementFormat"); String includeZeroBalanceCustomers = request.getParameter("includeZeroBalanceCustomers"); AccountsReceivableReportService reportService = SpringContext .getBean(AccountsReceivableReportService.class); List<CustomerStatementResultHolder> reports = new ArrayList<CustomerStatementResultHolder>(); StringBuilder fileName = new StringBuilder(); String contentDisposition = ""; if (!StringUtils.isBlank(chartCode) && !StringUtils.isBlank(orgCode)) { reports = reportService.generateStatementByBillingOrg(chartCode, orgCode, statementFormat, includeZeroBalanceCustomers); fileName.append(chartCode);//from w ww . ja v a2 s . c o m fileName.append(orgCode); } else if (!StringUtils.isBlank(customerNumber)) { reports = reportService.generateStatementByCustomer(customerNumber.toUpperCase(), statementFormat, includeZeroBalanceCustomers); fileName.append(customerNumber); } else if (!StringUtils.isBlank(accountNumber)) { reports = reportService.generateStatementByAccount(accountNumber, statementFormat, includeZeroBalanceCustomers); fileName.append(accountNumber); } if (reports.size() != 0) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { int pageOffset = 0; ArrayList<PdfReader> master = new ArrayList<PdfReader>(); int f = 0; // File file = new File(fileName); Document document = null; PdfCopy writer = null; for (CustomerStatementResultHolder customerStatementResultHolder : reports) { File file = customerStatementResultHolder.getFile(); // we create a reader for a certain document String reportName = file.getAbsolutePath(); PdfReader reader = new PdfReader(reportName); reader.consolidateNamedDestinations(); // we retrieve the total number of pages int n = reader.getNumberOfPages(); List<PdfReader> bookmarks = SimpleBookmark.getBookmark(reader); if (bookmarks != null) { if (pageOffset != 0) { SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null); } master.addAll(bookmarks); } pageOffset += n; if (f == 0) { // step 1: creation of a document-object document = new Document(reader.getPageSizeWithRotation(1)); // step 2: we create a writer that listens to the document writer = new PdfCopy(document, baos); // step 3: we open the document document.open(); } // step 4: we add content PdfImportedPage page; for (int i = 0; i < n;) { ++i; page = writer.getImportedPage(reader, i); writer.addPage(page); } writer.freeReader(reader); f++; } if (!master.isEmpty()) writer.setOutlines(master); // step 5: we close the document document.close(); // csForm.setReports(file); StringBuffer sbContentDispValue = new StringBuffer(); String useJavascript = request.getParameter("useJavascript"); if (useJavascript == null || useJavascript.equalsIgnoreCase("false")) { sbContentDispValue.append("attachment"); } else { sbContentDispValue.append("inline"); } sbContentDispValue.append("; filename="); sbContentDispValue.append(fileName); contentDisposition = sbContentDispValue.toString(); } catch (Exception e) { e.printStackTrace(); } fileName.append("-StatementBatchPDFs.pdf"); response.setContentType("application/pdf"); response.setHeader("Content-disposition", contentDisposition); response.setHeader("Expires", "0"); response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); response.setHeader("Pragma", "public"); response.setContentLength(baos.size()); // write to output ServletOutputStream sos = response.getOutputStream(); baos.writeTo(sos); sos.flush(); sos.close(); // update reported data for the detailed statement if (statementFormat.equalsIgnoreCase(ArConstants.STATEMENT_FORMAT_DETAIL)) { CustomerInvoiceDocumentService customerInvoiceDocumentService = SpringContext .getBean(CustomerInvoiceDocumentService.class); for (CustomerStatementResultHolder data : reports) { // update reported invoice info if (data.getInvoiceNumbers() != null) { List<String> invoiceNumbers = data.getInvoiceNumbers(); for (String number : invoiceNumbers) { customerInvoiceDocumentService.updateReportedDate(number); } } // update reported customer info customerInvoiceDocumentService.updateReportedInvoiceInfo(data); } } return null; } csForm.setMessage("No Reports Generated"); return mapping.findForward(KFSConstants.MAPPING_BASIC); }
From source file:org.lucee.extension.pdf.tag.Document.java
License:Open Source License
private void render(OutputStream os, boolean doBookmarks, boolean doHtmlBookmarks) throws IOException, PageException, DocumentException { byte[] pdf = null; // merge multiple docs to 1 if (documents.size() > 1) { PDFDocument[] pdfDocs = new PDFDocument[documents.size()]; PdfReader[] pdfReaders = new PdfReader[pdfDocs.length]; Iterator<PDFDocument> it = documents.iterator(); int index = 0; // generate pdf with pd4ml while (it.hasNext()) { pdfDocs[index] = it.next();// w ww.j av a 2s . com pdfReaders[index] = new PdfReader( pdfDocs[index].render(getDimension(), unitFactor, pageContext, doHtmlBookmarks)); index++; } // collect together ByteArrayOutputStream baos = new ByteArrayOutputStream(); com.lowagie.text.Document document = new com.lowagie.text.Document( pdfReaders[0].getPageSizeWithRotation(1)); PdfCopy copy = new PdfCopy(document, baos); document.open(); String name; ArrayList bookmarks = doBookmarks ? new ArrayList() : null; try { int size, totalPage = 0; Map parent; for (int doc = 0; doc < pdfReaders.length; doc++) { size = pdfReaders[doc].getNumberOfPages(); PdfImportedPage ip; // bookmarks if (doBookmarks) { name = pdfDocs[doc].getName(); if (!Util.isEmpty(name)) { // TODO bookmarks.add(parent=PDFUtil.generateGoToBookMark(name, totalPage+1)); } else parent = null; if (doHtmlBookmarks) { java.util.List pageBM = SimpleBookmark.getBookmark(pdfReaders[doc]); if (pageBM != null) { if (totalPage > 0) SimpleBookmark.shiftPageNumbers(pageBM, totalPage, null); // TODO if(parent!=null)PDFUtil.setChildBookmarks(parent,pageBM); // TODO else bookmarks.addAll(pageBM); } } } totalPage++; for (int page = 1; page <= size; page++) { if (page > 1) totalPage++; ip = copy.getImportedPage(pdfReaders[doc], page); // ip.getPdfDocument().setHeader(arg0); // ip.getPdfDocument().setFooter(arg0); copy.addPage(ip); } } if (doBookmarks && !bookmarks.isEmpty()) copy.setOutlines(bookmarks); } finally { document.close(); } pdf = baos.toByteArray(); } else if (documents.size() == 1) { pdf = (documents.get(0)).render(getDimension(), unitFactor, pageContext, doHtmlBookmarks); } else { pdf = getDocument().render(getDimension(), unitFactor, pageContext, doHtmlBookmarks); } // permission/encryption if (PDFDocument.ENC_NONE != encryption) { PdfReader reader = new PdfReader(pdf); com.lowagie.text.Document document = new com.lowagie.text.Document(reader.getPageSize(1)); Info info = CFMLEngineFactory.getInstance().getInfo(); document.addCreator("Lucee PDF Extension"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfCopy copy = new PdfCopy(document, baos); // PdfWriter writer = PdfWriter.getInstance(document, pdfOut); copy.setEncryption(PDFDocument.ENC_128BIT == encryption, userpassword, ownerpassword, permissions); document.open(); int size = reader.getNumberOfPages(); for (int page = 1; page <= size; page++) { copy.addPage(copy.getImportedPage(reader, page)); } document.close(); pdf = baos.toByteArray(); } // write out if (os != null) Util.copy(new ByteArrayInputStream(pdf), os, true, false); if (!Util.isEmpty(name)) { pageContext.setVariable(name, pdf); } }
From source file:org.lucee.extension.pdf.util.PDFUtil.java
License:Open Source License
/** * @param docs/*from w ww. j av a 2 s . com*/ * @param os * @param removePages * if true, pages defined in PDFDocument will be removed, otherwise all other pages will be removed * @param version * @throws PageException * @throws IOException * @throws DocumentException */ public static void concat(PDFStruct[] docs, OutputStream os, boolean keepBookmark, boolean removePages, boolean stopOnError, char version) throws PageException, IOException, DocumentException { Document document = null; PdfCopy writer = null; PdfReader reader; Set pages; boolean isInit = false; PdfImportedPage page; try { int pageOffset = 0; ArrayList master = new ArrayList(); for (int i = 0; i < docs.length; i++) { // we create a reader for a certain document pages = docs[i].getPages(); try { reader = docs[i].getPdfReader(); } catch (Throwable t) { if (t instanceof ThreadDeath) throw (ThreadDeath) t; if (!stopOnError) continue; throw CFMLEngineFactory.getInstance().getCastUtil().toPageException(t); } reader.consolidateNamedDestinations(); // we retrieve the total number of pages int n = reader.getNumberOfPages(); List bookmarks = keepBookmark ? SimpleBookmark.getBookmark(reader) : null; if (bookmarks != null) { removeBookmarks(bookmarks, pages, removePages); if (pageOffset != 0) SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null); master.addAll(bookmarks); } if (!isInit) { isInit = true; document = new Document(reader.getPageSizeWithRotation(1)); writer = new PdfCopy(document, os); if (version != 0) writer.setPdfVersion(version); document.open(); } for (int y = 1; y <= n; y++) { if (pages != null && removePages == pages.contains(Integer.valueOf(y))) { continue; } pageOffset++; page = writer.getImportedPage(reader, y); writer.addPage(page); } PRAcroForm form = reader.getAcroForm(); if (form != null) writer.copyAcroForm(reader); } if (master.size() > 0) writer.setOutlines(master); } finally { CFMLEngineFactory.getInstance().getIOUtil().closeSilent(document); } }