Example usage for com.lowagie.text.pdf PdfCopy addPage

List of usage examples for com.lowagie.text.pdf PdfCopy addPage

Introduction

In this page you can find the example usage for com.lowagie.text.pdf PdfCopy addPage.

Prototype

public void addPage(PdfImportedPage iPage) throws IOException, BadPdfFormatException 

Source Link

Document

Add an imported page to our output

Usage

From source file:org.openelis.bean.WorksheetPrintReportBean.java

License:Open Source License

private Path fillPDFWorksheet(Integer worksheetId, String templateName, String userName) throws Exception {
    int i, j, formCapacity, diagramCapacity, pageNumber;
    AcroFields form;/*from w w w  .  j  ava 2 s . c  o  m*/
    AnalysisViewDO aVDO;
    ArrayList<AnalysisQaEventViewDO> aqeVDOs;
    ArrayList<Integer> analysisIds, qcLotIds;
    ArrayList<NoteViewDO> nVDOs;
    ArrayList<QcAnalyteViewDO> qaVDOs;
    ArrayList<QcLotViewDO> qlVDOs;
    ArrayList<SampleManager1> sMans;
    ArrayList<SampleOrganizationViewDO> sOrgs;
    ArrayList<SampleQaEventViewDO> sqeVDOs;
    ArrayList<SystemVariableDO> sysVars;
    ArrayList<WorksheetAnalysisViewDO> waVDOs;
    ByteArrayOutputStream page;
    Document doc;
    HashMap<Integer, ArrayList<QcAnalyteViewDO>> qaVDOMap;
    HashMap<Integer, ArrayList<WorksheetAnalysisViewDO>> waVDOMap;
    HashMap<Integer, QcLotViewDO> qlMap;
    HashMap<Integer, SampleManager1> sMap;
    OutputStream out;
    Path path;
    PatientDO patDO;
    PdfCopy writer;
    PdfReader reader;
    PdfStamper stamper;
    ProviderDO proDO;
    QcLotViewDO qlVDO;
    RandomAccessFileOrArray original;
    SampleEnvironmentalDO seDO;
    SampleDO sDO;
    SampleItemViewDO siVDO;
    SampleManager1 sMan;
    String collectionDateTime, dirName, now, qcLink;
    StringBuilder aNotes, aQaevents, sNotes, sQaevents;
    WorksheetAnalysisDO waDO1;
    WorksheetItemDO wiDO1;
    WorksheetManager1 wMan;
    WorksheetViewDO wVDO;

    now = ReportUtil.toString(new Date(), Messages.get().dateTimePattern());

    dirName = "";
    try {
        sysVars = systemVariable.fetchByName("worksheet_template_directory", 1);
        if (sysVars.size() > 0)
            dirName = ((SystemVariableDO) sysVars.get(0)).getValue();
    } catch (Exception anyE) {
        throw new Exception("Error retrieving temp directory variable: " + anyE.getMessage());
    }

    analysisIds = new ArrayList<Integer>();
    qcLotIds = new ArrayList<Integer>();
    waVDOMap = new HashMap<Integer, ArrayList<WorksheetAnalysisViewDO>>();
    wMan = worksheetManager.fetchById(worksheetId, WorksheetManager1.Load.DETAIL,
            WorksheetManager1.Load.REAGENT);
    for (WorksheetAnalysisViewDO data : WorksheetManager1Accessor.getAnalyses(wMan)) {
        waVDOs = waVDOMap.get(data.getWorksheetItemId());
        if (waVDOs == null) {
            waVDOs = new ArrayList<WorksheetAnalysisViewDO>();
            waVDOMap.put(data.getWorksheetItemId(), waVDOs);
        }
        waVDOs.add(data);

        if (data.getAnalysisId() != null)
            analysisIds.add(data.getAnalysisId());
        else if (data.getQcLotId() != null)
            qcLotIds.add(data.getQcLotId());
    }

    sMap = new HashMap<Integer, SampleManager1>();
    if (analysisIds.size() > 0) {
        sMans = sampleManager.fetchByAnalyses(analysisIds, SampleManager1.Load.ORGANIZATION,
                SampleManager1.Load.QA, SampleManager1.Load.NOTE, SampleManager1.Load.SINGLEANALYSIS,
                SampleManager1.Load.PROVIDER);
        for (SampleManager1 data : sMans) {
            for (AnalysisViewDO data1 : SampleManager1Accessor.getAnalyses(data))
                sMap.put(data1.getId(), data);
        }
    }

    qaVDOMap = new HashMap<Integer, ArrayList<QcAnalyteViewDO>>();
    qlMap = new HashMap<Integer, QcLotViewDO>();
    if (qcLotIds.size() > 0) {
        qlVDOs = qcLot.fetchByIds(qcLotIds);
        for (QcLotViewDO data : qlVDOs) {
            qlMap.put(data.getId(), data);
            try {
                qaVDOs = qcAnalyte.fetchByQcId(data.getQcId());
                qaVDOMap.put(data.getQcId(), qaVDOs);
            } catch (NotFoundException nfE) {
                // ignore this error as leaving the hash record blank will not
                // cause an error due to a null check later on in the code
            }
        }
    }

    formCapacity = 1;
    out = null;
    try {
        path = ReportUtil.createTempFile("worksheetPrint", ".pdf", null);
        out = Files.newOutputStream(path);

        reader = new PdfReader(dirName + "OEWorksheet" + templateName + ".pdf");
        original = reader.getSafeFile();

        form = reader.getAcroFields();
        if (form.getField("capacity") != null)
            formCapacity = Integer.parseInt(form.getField("capacity"));
        if (form.getField("diagram_capacity") != null)
            diagramCapacity = Integer.parseInt(form.getField("diagram_capacity"));
        else
            diagramCapacity = formCapacity;

        doc = new Document(reader.getPageSizeWithRotation(1));
        writer = new PdfCopy(doc, out);
        doc.open();
        reader.close();

        i = -1;
        pageNumber = -1;
        form = null;
        page = null;
        stamper = null;
        wVDO = wMan.getWorksheet();
        for (WorksheetItemDO wiDO : WorksheetManager1Accessor.getItems(wMan)) {
            j = wiDO.getPosition() % diagramCapacity;
            if (j == 0)
                j = diagramCapacity;
            for (WorksheetAnalysisViewDO waVDO : waVDOMap.get(wiDO.getId())) {
                if (i == -1 || i > formCapacity || j > diagramCapacity) {
                    if (i != -1) {
                        fillReagentFields(form, wMan);
                        stamper.setFormFlattening(true);
                        renameFields(form, pageNumber);
                        flattenFilledFields(stamper, form, formCapacity, pageNumber);
                        stamper.close();
                        reader.close();
                        reader = new PdfReader(page.toByteArray());
                        writer.addPage(writer.getImportedPage(reader, 1));
                        reader.close();
                    }
                    reader = new PdfReader(original, null);
                    page = new ByteArrayOutputStream();
                    stamper = new PdfStamper(reader, page);
                    form = stamper.getAcroFields();
                    i = 1;
                    pageNumber++;

                    form.setField("current_date_time", now);
                    form.setField("username", userName);
                    form.setField("worksheet_description_1", wVDO.getDescription());
                }

                qcLink = "";
                if (waVDO.getWorksheetAnalysisId() != null) {
                    try {
                        waDO1 = worksheetAnalysis.fetchById(waVDO.getWorksheetAnalysisId());
                        wiDO1 = worksheetItem.fetchById(waDO1.getWorksheetItemId());
                        qcLink = waDO1.getAccessionNumber() + " (" + wiDO1.getPosition() + ")";
                    } catch (Exception anyE) {
                        log.log(Level.SEVERE, anyE.getMessage(), anyE);
                    }
                }

                form.setField("worksheet_id_" + (i), wVDO.getId().toString());
                form.setField("created_date_" + (i),
                        ReportUtil.toString(wVDO.getCreatedDate(), Messages.get().dateTimePattern()));
                if (waVDOMap.get(wiDO.getId()).indexOf(waVDO) == 0)
                    form.setField("position_" + (i), wiDO.getPosition().toString());

                if (waVDO.getAnalysisId() != null) {
                    sMan = sMap.get(waVDO.getAnalysisId());
                    sDO = sMan.getSample();
                    patDO = null;
                    proDO = null;
                    seDO = null;
                    if (Constants.domain().CLINICAL.equals(sDO.getDomain())) {
                        patDO = sMan.getSampleClinical().getPatient();
                        proDO = sMan.getSampleClinical().getProvider();
                    } else if (Constants.domain().NEONATAL.equals(sDO.getDomain())) {
                        patDO = sMan.getSampleNeonatal().getPatient();
                        proDO = sMan.getSampleNeonatal().getProvider();
                    } else if (Constants.domain().ENVIRONMENTAL.equals(sDO.getDomain())) {
                        seDO = sMan.getSampleEnvironmental();
                    }
                    sOrgs = SampleManager1Accessor.getOrganizations(sMan);
                    aVDO = (AnalysisViewDO) sMan.getObject(Constants.uid().getAnalysis(waVDO.getAnalysisId()));
                    siVDO = (SampleItemViewDO) sMan
                            .getObject(Constants.uid().getSampleItem(aVDO.getSampleItemId()));

                    sQaevents = new StringBuilder();
                    sqeVDOs = SampleManager1Accessor.getSampleQAs(sMan);
                    if (sqeVDOs != null && sqeVDOs.size() > 0) {
                        for (SampleQaEventViewDO sqeVDO : sqeVDOs) {
                            if (sQaevents.length() > 0)
                                sQaevents.append(" | ");
                            sQaevents.append(sqeVDO.getQaEventName());
                        }
                    }

                    aQaevents = new StringBuilder();
                    aqeVDOs = SampleManager1Accessor.getAnalysisQAs(sMan);
                    if (aqeVDOs != null && aqeVDOs.size() > 0) {
                        for (AnalysisQaEventViewDO aqeVDO : aqeVDOs) {
                            if (!waVDO.getAnalysisId().equals(aqeVDO.getAnalysisId()))
                                continue;
                            if (aQaevents.length() > 0)
                                aQaevents.append(" | ");
                            aQaevents.append(aqeVDO.getQaEventName());
                        }
                    }

                    sNotes = new StringBuilder();
                    nVDOs = new ArrayList<NoteViewDO>();
                    if (SampleManager1Accessor.getSampleInternalNotes(sMan) != null)
                        nVDOs.addAll(SampleManager1Accessor.getSampleInternalNotes(sMan));
                    if (SampleManager1Accessor.getSampleExternalNote(sMan) != null)
                        nVDOs.add(SampleManager1Accessor.getSampleExternalNote(sMan));
                    if (nVDOs != null && nVDOs.size() > 0) {
                        for (NoteViewDO nVDO : nVDOs) {
                            if (sNotes.length() > 0)
                                sNotes.append(" | ");
                            sNotes.append(nVDO.getText());
                        }
                    }

                    aNotes = new StringBuilder();
                    nVDOs = new ArrayList<NoteViewDO>();
                    if (SampleManager1Accessor.getAnalysisInternalNotes(sMan) != null)
                        nVDOs.addAll(SampleManager1Accessor.getAnalysisInternalNotes(sMan));
                    if (SampleManager1Accessor.getAnalysisExternalNotes(sMan) != null)
                        nVDOs.addAll(SampleManager1Accessor.getAnalysisExternalNotes(sMan));
                    if (nVDOs != null && nVDOs.size() > 0) {
                        for (NoteViewDO nVDO : nVDOs) {
                            if (!waVDO.getAnalysisId().equals(nVDO.getReferenceId()))
                                continue;
                            if (aNotes.length() > 0)
                                aNotes.append(" | ");
                            aNotes.append(nVDO.getText());
                        }
                    }

                    if (waVDOMap.get(wiDO.getId()).size() > 1)
                        form.setField("well_label_" + (j), wiDO.getPosition().toString());
                    else
                        form.setField("well_label_" + (j), sDO.getAccessionNumber().toString());
                    form.setField("accession_number_" + (i), sDO.getAccessionNumber().toString());
                    form.setField("qc_link_" + (i), qcLink);
                    if (sDO.getCollectionDate() != null) {
                        collectionDateTime = ReportUtil.toString(sDO.getCollectionDate(),
                                Messages.get().datePattern());
                        if (sDO.getCollectionTime() != null) {
                            collectionDateTime += " ";
                            collectionDateTime += ReportUtil.toString(sDO.getCollectionTime(),
                                    Messages.get().timePattern());
                        }
                        form.setField("collection_date_" + (i), collectionDateTime);
                    }
                    form.setField("received_date_" + (i),
                            ReportUtil.toString(sDO.getReceivedDate(), Messages.get().dateTimePattern()));
                    if (patDO != null) {
                        form.setField("patient_last_" + (i), patDO.getLastName());
                        form.setField("patient_first_" + (i), patDO.getFirstName());
                    }
                    if (proDO != null) {
                        form.setField("provider_last_" + (i), proDO.getLastName());
                        form.setField("provider_first_" + (i), proDO.getFirstName());
                    }
                    if (seDO != null) {
                        form.setField("env_location_" + (i), seDO.getLocation());
                        form.setField("env_description_" + (i), seDO.getDescription());
                    }
                    if (sOrgs != null && sOrgs.size() > 0) {
                        for (SampleOrganizationViewDO soVDO : sOrgs) {
                            if (Constants.dictionary().ORG_REPORT_TO.equals(soVDO.getTypeId()))
                                form.setField("organization_name_" + (i), soVDO.getOrganizationName());
                            else if (Constants.dictionary().ORG_BILL_TO.equals(soVDO.getTypeId()))
                                form.setField("bill_to_name_" + (i), soVDO.getOrganizationName());
                        }
                    }
                    form.setField("type_of_sample_" + (i), siVDO.getTypeOfSample());
                    form.setField("source_of_sample_" + (i), siVDO.getSourceOfSample());
                    form.setField("source_other_" + (i), siVDO.getSourceOther());
                    form.setField("container_reference_" + (i), siVDO.getContainerReference());
                    form.setField("test_" + (i), aVDO.getTestName());
                    form.setField("method_" + (i), aVDO.getMethodName());
                    form.setField("sample_qaevent_" + (i), sQaevents.toString());
                    form.setField("analysis_qaevent_" + (i), aQaevents.toString());
                    form.setField("sample_note_" + (i), sNotes.toString());
                    form.setField("analysis_note_" + (i), aNotes.toString());
                } else if (waVDO.getQcLotId() != null) {
                    qlVDO = qlMap.get(waVDO.getQcLotId());
                    form.setField("well_label_" + (j), qlVDO.getQcName());
                    form.setField("qc_link_" + (i), qcLink);
                    form.setField("qc_name_" + (i), qlVDO.getQcName());
                    form.setField("qc_lot_" + (i), qlVDO.getLotNumber());
                    form.setField("qc_usable_" + (i),
                            ReportUtil.toString(qlVDO.getUsableDate(), Messages.get().dateTimePattern()));
                    form.setField("qc_expiration_" + (i),
                            ReportUtil.toString(qlVDO.getExpireDate(), Messages.get().dateTimePattern()));
                    qaVDOs = qaVDOMap.get(qlVDO.getQcId());
                    if (qaVDOs != null && !qaVDOs.isEmpty())
                        form.setField("qc_expected_value_" + (i), qaVDOs.get(0).getValue());
                }
                i++;
            }
        }
        fillReagentFields(form, wMan);
        stamper.setFormFlattening(true);
        renameFields(form, pageNumber);
        flattenFilledFields(stamper, form, formCapacity, pageNumber);
        stamper.close();
        reader.close();

        reader = new PdfReader(page.toByteArray());
        writer.addPage(writer.getImportedPage(reader, 1));
        doc.close();
        reader.close();
    } finally {
        try {
            if (out != null)
                out.close();
        } catch (Exception e) {
            log.severe("Could not close output stream for worksheet print report");
        }
    }
    return path;
}

From source file:org.silverpeas.core.importexport.control.ImportExport.java

License:Open Source License

/**
 * @param userDetail//from w ww.j  a  v  a  2  s.  c  o m
 * @param itemsToExport
 * @return
 * @throws ImportExportException
 */
public ExportPDFReport processExportPDF(UserDetail userDetail, List<WAAttributeValuePair> itemsToExport,
        NodePK rootPK) throws ImportExportException {
    ExportPDFReport report = new ExportPDFReport();
    report.setDateDebut(new Date());

    PublicationsTypeManager pubTypeManager = getPublicationsTypeManager();

    String fileExportName = generateExportDirName(userDetail, "fusion");
    String tempDir = FileRepositoryManager.getTemporaryPath();

    File fileExportDir = new File(tempDir + fileExportName);
    if (!fileExportDir.exists()) {
        try {
            FileFolderManager.createFolder(fileExportDir);
        } catch (org.silverpeas.core.util.UtilException ex) {
            throw new ImportExportException("ImportExport", "importExport.EX_CANT_CREATE_FOLDER", ex);
        }
    }

    File pdfFileName = new File(tempDir + fileExportName + ".pdf");
    try {
        // cration des rpertoires avec le nom des thmes et des publications
        List<AttachmentDetail> pdfList = pubTypeManager.processPDFExport(report, userDetail, itemsToExport,
                fileExportDir.getPath(), true, rootPK);

        try {
            int pageOffset = 0;
            List master = new ArrayList();
            Document document = null;
            PdfCopy writer = null;

            if (!pdfList.isEmpty()) {
                boolean firstPage = true;
                for (AttachmentDetail attDetail : pdfList) {
                    PdfReader reader = null;
                    try {
                        reader = new PdfReader(
                                fileExportDir.getPath() + File.separatorChar + attDetail.getLogicalName());
                    } catch (IOException ioe) {
                        // Attached file is not physically present on disk, ignore it and log event
                        SilverLogger.getLogger(this).error("Cannot find PDF {0}",
                                new String[] { attDetail.getLogicalName() }, ioe);
                    }
                    if (reader != null) {
                        reader.consolidateNamedDestinations();
                        int nbPages = reader.getNumberOfPages();
                        List bookmarks = SimpleBookmark.getBookmark(reader);
                        if (bookmarks != null) {
                            if (pageOffset != 0) {
                                SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null);
                            }
                            master.addAll(bookmarks);
                        }
                        pageOffset += nbPages;

                        if (firstPage) {
                            document = new Document(reader.getPageSizeWithRotation(1));
                            writer = new PdfCopy(document, new FileOutputStream(pdfFileName));
                            document.open();
                            firstPage = false;
                        }

                        for (int i = 1; i <= nbPages; i++) {
                            try {
                                PdfImportedPage page = writer.getImportedPage(reader, i);
                                writer.addPage(page);
                            } catch (Exception e) {
                                // Can't import PDF file, ignore it and log event
                                SilverLogger.getLogger(this).error("Cannot merge PDF {0}",
                                        new String[] { attDetail.getLogicalName() }, e);
                            }
                        }

                        PRAcroForm form = reader.getAcroForm();
                        if (form != null) {
                            writer.copyAcroForm(reader);
                        }
                    }
                }

                if (!master.isEmpty()) {
                    writer.setOutlines(master);
                }
                writer.flush();
                document.close();
            } else {
                return null;
            }

        } catch (DocumentException e) {
            // Impossible de copier le document
            throw new ImportExportException("ImportExport", "root.EX_CANT_WRITE_FILE", e);
        }

    } catch (IOException e) {
        // Pb avec le rpertoire de destination
        throw new ImportExportException("ImportExport", "root.EX_CANT_WRITE_FILE", e);
    }

    report.setPdfFileName(pdfFileName.getName());
    report.setPdfFileSize(pdfFileName.length());
    report.setPdfFilePath(FileServerUtils.getUrlToTempDir(pdfFileName.getName()));

    report.setDateFin(new Date());

    return report;
}

From source file:org.sonar.report.pdf.PDFReporter.java

License:Open Source License

public ByteArrayOutputStream getReport()
        throws DocumentException, IOException, org.dom4j.DocumentException, ReportException {
    // Creation of documents
    Document mainDocument = new Document(PageSize.A4, 50, 50, 110, 50);
    Toc tocDocument = new Toc();
    Document frontPageDocument = new Document(PageSize.A4, 50, 50, 110, 50);
    ByteArrayOutputStream mainDocumentBaos = new ByteArrayOutputStream();
    ByteArrayOutputStream frontPageDocumentBaos = new ByteArrayOutputStream();
    PdfWriter mainDocumentWriter = PdfWriter.getInstance(mainDocument, mainDocumentBaos);
    PdfWriter frontPageDocumentWriter = PdfWriter.getInstance(frontPageDocument, frontPageDocumentBaos);

    // Events for TOC, header and pages numbers
    Events events = new Events(tocDocument, new Header(this.getLogo(), this.getProject()));
    mainDocumentWriter.setPageEvent(events);

    mainDocument.open();/*w  ww  . j av  a2s  .c  om*/
    tocDocument.getTocDocument().open();
    frontPageDocument.open();

    Logger.info("Generating PDF report...");
    printFrontPage(frontPageDocument, frontPageDocumentWriter);
    printTocTitle(tocDocument);
    printPdfBody(mainDocument);
    mainDocument.close();
    tocDocument.getTocDocument().close();
    frontPageDocument.close();

    // Get Readers
    PdfReader mainDocumentReader = new PdfReader(mainDocumentBaos.toByteArray());
    PdfReader tocDocumentReader = new PdfReader(tocDocument.getTocOutputStream().toByteArray());
    PdfReader frontPageDocumentReader = new PdfReader(frontPageDocumentBaos.toByteArray());

    // New document
    Document documentWithToc = new Document(tocDocumentReader.getPageSizeWithRotation(1));
    ByteArrayOutputStream finalBaos = new ByteArrayOutputStream();
    PdfCopy copy = new PdfCopy(documentWithToc, finalBaos);

    documentWithToc.open();
    copy.addPage(copy.getImportedPage(frontPageDocumentReader, 1));
    for (int i = 1; i <= tocDocumentReader.getNumberOfPages(); i++) {
        copy.addPage(copy.getImportedPage(tocDocumentReader, i));
    }
    for (int i = 1; i <= mainDocumentReader.getNumberOfPages(); i++) {
        copy.addPage(copy.getImportedPage(mainDocumentReader, i));
    }
    documentWithToc.close();

    // Return the final document (with TOC)
    return finalBaos;
}

From source file:org.sonarqube.report.extendedpdf.OverviewPDFReporter.java

License:Open Source License

@Override
public ByteArrayOutputStream getReport()
        throws DocumentException, IOException, org.dom4j.DocumentException, ReportException {
    // Capture and save screenshots of the required widgets
    captureScreenshots();// ww w. j  a v a2s .  c om

    // Creation of documents
    Document mainDocument = new Document(PageSize.LETTER, 50, 50, 75, 50);
    ExtendedToc tocDocument = new ExtendedToc();
    Document frontPageDocument = new Document(PageSize.LETTER, 50, 50, 75, 50);

    ByteArrayOutputStream mainDocumentBaos = new ByteArrayOutputStream();
    ByteArrayOutputStream frontPageDocumentBaos = new ByteArrayOutputStream();

    PdfWriter mainDocumentWriter = PdfWriter.getInstance(mainDocument, mainDocumentBaos);
    PdfWriter frontPageDocumentWriter = PdfWriter.getInstance(frontPageDocument, frontPageDocumentBaos);

    mainDocumentWriter.setStrictImageSequence(true);
    frontPageDocumentWriter.setStrictImageSequence(true);

    // Events for TOC, header and page numbers
    ExtendedEvents events = new ExtendedEvents(tocDocument, new ExtendedHeader(this.getProject()));
    mainDocumentWriter.setPageEvent(events);

    mainDocument.open();
    tocDocument.getTocDocument().open();
    frontPageDocument.open();

    Logger.info("Generating Overview PDF report...");
    printFrontPage(frontPageDocument, frontPageDocumentWriter);
    printTocTitle(tocDocument);
    printPdfBody(mainDocument);

    mainDocument.close();
    tocDocument.getTocDocument().close();
    frontPageDocument.close();

    // Get Readers
    PdfReader mainDocumentReader = new PdfReader(mainDocumentBaos.toByteArray());
    PdfReader tocDocumentReader = new PdfReader(tocDocument.getTocOutputStream().toByteArray());
    PdfReader frontPageDocumentReader = new PdfReader(frontPageDocumentBaos.toByteArray());

    // New document
    Document documentWithToc = new Document(tocDocumentReader.getPageSizeWithRotation(1));
    ByteArrayOutputStream finalBaos = new ByteArrayOutputStream();
    PdfCopy copy = new PdfCopy(documentWithToc, finalBaos);

    documentWithToc.open();
    copy.addPage(copy.getImportedPage(frontPageDocumentReader, 1));
    for (int i = 1; i <= tocDocumentReader.getNumberOfPages(); i++) {
        copy.addPage(copy.getImportedPage(tocDocumentReader, i));
    }
    for (int i = 1; i <= mainDocumentReader.getNumberOfPages(); i++) {
        copy.addPage(copy.getImportedPage(mainDocumentReader, i));
    }
    documentWithToc.close();

    // Return the final document (with TOC)
    return finalBaos;
}

From source file:org.squale.welcom.outils.pdf.advanced.WPdfMerge.java

License:Open Source License

/**
 * merge//from   w ww .j  ava  2 s  .  co m
 * 
 * @return byte array rempli
 */
private byte[] merge() {
    final ByteArrayOutputStream tmpout = new ByteArrayOutputStream();
    int pageOffset = 0;
    int f = 0;
    Document document = null;
    final ArrayList master = new ArrayList();
    PdfCopy writer = null;

    final Iterator it = readers.iterator();

    while (it.hasNext()) {
        PdfReader reader = (PdfReader) it.next();

        try {
            // Renome tout les champs;
            reader = new PdfReader(renameFieldUnique(reader));

            reader.consolidateNamedDestinations();
            // we retrieve the total number of pages
            final int n = reader.getNumberOfPages();
            final 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, tmpout);
                // 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);
            }
            final PRAcroForm form = reader.getAcroForm();
            if (form != null) {
                writer.copyAcroForm(reader);
            }
            f++;
            if (master.size() > 0) {
                writer.setOutlines(master);
            }
            // step 5: we close the document
            // document.close();

        } catch (final Exception e) {
            e.printStackTrace();
        }
    }
    if (document != null) {
        document.close();
    }
    return tmpout.toByteArray();
}

From source file:oscar.util.ConcatPDF.java

License:Open Source License

/**
 * This class can be used to concatenate existing PDF files.
 * (This was an example known as PdfCopy.java)
 * @param args the command line arguments
 *//*from   w  w  w. jav a 2 s .  c  o m*/
public static void concat(List<Object> alist, OutputStream out) {

    try {
        int pageOffset = 0;
        ArrayList master = new ArrayList();
        int f = 0;
        Document document = null;
        PdfCopy writer = null;
        boolean fileAsStream = false;
        PdfReader reader = null;
        String name = "";

        MiscUtils.getLogger().debug("Size of list = " + alist.size());

        while (f < alist.size()) {
            // we create a reader for a certain document
            Object o = alist.get(f);

            if (o instanceof InputStream) {
                name = "";
                fileAsStream = true;
            } else {
                name = (String) alist.get(f);
                fileAsStream = false;
            }

            if (fileAsStream) {
                reader = new PdfReader((InputStream) alist.get(f));
            } else {
                reader = new PdfReader(name);
            }

            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;
            MiscUtils.getLogger().debug("There are " + n + " pages in " + name);

            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, out);
                // 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);
                MiscUtils.getLogger().debug("Processed page " + i);
            }
            PRAcroForm form = reader.getAcroForm();
            if (form != null)
                writer.copyAcroForm(reader);
            f++;
        }
        if (master.size() > 0)
            writer.setOutlines(master);
        // step 5: we close the document
        document.close();
    } catch (Exception e) {
        MiscUtils.getLogger().error("Error", e);
    }
}

From source file:questions.importpages.ConcatenateMakeTOC.java

public static void main(String[] args) {
    Document document = new Document();
    try {//from w  ww .  j  av a  2  s .c om
        PdfCopy copy = new PdfCopy(document, new FileOutputStream(RESULT));
        copy.setViewerPreferences(PdfWriter.PageModeUseOutlines);
        document.open();
        List<HashMap<String, Object>> bookmarks = new ArrayList<HashMap<String, Object>>();
        List<HashMap<String, Object>> kids;
        PdfReader reader;
        int page = 1;
        for (int i = 0; i < 3; i++) {
            createPdf(i);
            HashMap<String, Object> titlepage = new HashMap<String, Object>();
            titlepage.put("Title", String.format("Document %d", i + 1));
            titlepage.put("Action", "GoTo");
            titlepage.put("Page", String.format("%d Fit", page));
            kids = new ArrayList<HashMap<String, Object>>();
            reader = new PdfReader(RESULTS[i]);
            for (int j = 1; j <= reader.getNumberOfPages(); j++) {
                copy.addPage(copy.getImportedPage(reader, j));
                HashMap<String, Object> kid = new HashMap<String, Object>();
                kid.put("Title", String.format("Page %d in document %d", j, i + 1));
                kid.put("Action", "GoTo");
                kid.put("Page", String.format("%d FitH 806", page));
                kids.add(kid);
                page++;
            }
            titlepage.put("Kids", kids);
            bookmarks.add(titlepage);
        }
        copy.setOutlines(bookmarks);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (DocumentException e) {
        e.printStackTrace();
    }
    document.close();
}

From source file:questions.importpages.ConcatenateWithTOC.java

public static void main(String[] args) {
    try {//  ww w  .j av a 2  s  .  c om
        // suppose we have some TEST PDF files
        for (int i = 0; i < TEST.length; i++) {
            createTestPdf(i);
        }
        // and we want to concatenate them
        Document document = new Document();
        PdfCopy copy = new PdfCopy(document, new FileOutputStream(RESULT));
        copy.setViewerPreferences(PdfWriter.PageModeUseOutlines);
        document.open();
        // but we want to create an outline tree
        PdfOutline root = copy.getRootOutline();
        // we also want an extra page with the file name
        Document coverpage;
        ByteArrayOutputStream baos;
        PdfReader reader;
        // we want to add page numbers too
        int pagenumber = 0;
        BaseFont bf = BaseFont.createFont();
        for (int i = 0; i < TEST.length; i++) {
            // we create the coverpage in memory
            coverpage = new Document();
            baos = new ByteArrayOutputStream();
            PdfWriter.getInstance(coverpage, baos);
            coverpage.open();
            coverpage.add(new Paragraph("file: " + TEST[i]));
            coverpage.close();
            // we import that page
            reader = new PdfReader(baos.toByteArray());
            pagenumber++;
            copy.addPage(getStampedPage(reader, copy, 1, pagenumber, bf));
            // we create the bookmark to that page
            PdfDestination dest = new PdfDestination(PdfDestination.FIT);
            new PdfOutline(root, PdfAction.gotoLocalPage(pagenumber, dest, copy), TEST[i]);
            // we import the document itself
            reader = new PdfReader(TEST[i]);
            for (int j = 1; j <= reader.getNumberOfPages(); j++) {
                pagenumber++;
                copy.addPage(getStampedPage(reader, copy, j, pagenumber, bf));
            }
        }
        document.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    } catch (DocumentException de) {
        de.printStackTrace();
    }
}

From source file:questions.importpages.ConcatenateWithTOC2.java

public static void main(String[] args) {
    try {/* ww w. j  av  a2  s . c o m*/
        // suppose we have some TEST PDF files
        for (int i = 0; i < TEST.length; i++) {
            createTestPdf(i);
        }
        // and we want to concatenate them
        Document document = new Document();
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        PdfCopy copy = new PdfCopy(document, os);
        copy.setViewerPreferences(PdfWriter.PageModeUseOutlines);
        document.open();
        // but we want to create an outline tree
        PdfOutline root = copy.getRootOutline();
        // we also want an extra page with the file name
        Document coverpage;
        ByteArrayOutputStream baos;
        PdfReader reader;
        // we want keep track of the page numbers
        int pagenumber = 0;
        for (int i = 0; i < TEST.length; i++) {
            // we create the coverpage in memory
            coverpage = new Document();
            baos = new ByteArrayOutputStream();
            PdfWriter.getInstance(coverpage, baos);
            coverpage.open();
            coverpage.add(new Paragraph("file: " + TEST[i]));
            coverpage.close();
            // we import that page
            reader = new PdfReader(baos.toByteArray());
            pagenumber++;
            copy.addPage(copy.getImportedPage(reader, 1));
            // we create the bookmark to that page
            PdfDestination dest = new PdfDestination(PdfDestination.FIT);
            new PdfOutline(root, PdfAction.gotoLocalPage(pagenumber, dest, copy), TEST[i]);
            // we import the document itself
            reader = new PdfReader(TEST[i]);
            for (int j = 1; j <= reader.getNumberOfPages(); j++) {
                pagenumber++;
                copy.addPage(copy.getImportedPage(reader, j));
            }
        }
        document.close();

        // we want to add page X of Y
        reader = new PdfReader(os.toByteArray());
        int n = reader.getNumberOfPages();
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(RESULT));
        BaseFont bf = BaseFont.createFont();
        for (int i = 1; i <= n; i++) {
            PdfContentByte canvas = stamper.getOverContent(i);
            canvas.beginText();
            canvas.setFontAndSize(bf, 12);
            canvas.showTextAligned(Element.ALIGN_LEFT, "page " + i + " of " + n, 36, 26, 0);
            canvas.endText();
        }
        stamper.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    } catch (DocumentException de) {
        de.printStackTrace();
    }
}