001: /*
002: * $Id: concat_pdf.java 2441 2006-10-27 17:24:01Z xlv $
003: * $Name$
004: *
005: * Copyright 2002 by Mark Thompson
006: *
007: * The contents of this file are subject to the Mozilla Public License Version 1.1
008: * (the "License"); you may not use this file except in compliance with the License.
009: * You may obtain a copy of the License at http://www.mozilla.org/MPL/
010: *
011: * Software distributed under the License is distributed on an "AS IS" basis,
012: * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
013: * for the specific language governing rights and limitations under the License.
014: *
015: * The Original Code is 'iText, a free JAVA-PDF library'.
016: *
017: * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
018: * the Initial Developer are Copyright (C) 1999-2006 by Bruno Lowagie.
019: * All Rights Reserved.
020: * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
021: * are Copyright (C) 2000-2006 by Paulo Soares. All Rights Reserved.
022: *
023: * Contributor(s): all the names of the contributors are added in the source code
024: * where applicable.
025: *
026: * Alternatively, the contents of this file may be used under the terms of the
027: * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
028: * provisions of LGPL are applicable instead of those above. If you wish to
029: * allow use of your version of this file only under the terms of the LGPL
030: * License and not to allow others to use your version of this file under
031: * the MPL, indicate your decision by deleting the provisions above and
032: * replace them with the notice and other provisions required by the LGPL.
033: * If you do not delete the provisions above, a recipient may use your version
034: * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
035: *
036: * This library is free software; you can redistribute it and/or modify it
037: * under the terms of the MPL as stated above or under the terms of the GNU
038: * Library General Public License as published by the Free Software Foundation;
039: * either version 2 of the License, or any later version.
040: *
041: * This library is distributed in the hope that it will be useful, but WITHOUT
042: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
043: * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
044: * details.
045: *
046: * If you didn't download this code from the following link, you should check if
047: * you aren't using an obsolete version:
048: * http://www.lowagie.com/iText/
049: */
050:
051: package com.lowagie.tools;
052:
053: import java.io.FileOutputStream;
054: import java.util.ArrayList;
055: import java.util.List;
056:
057: import com.lowagie.text.Document;
058: import com.lowagie.text.pdf.PdfCopy;
059: import com.lowagie.text.pdf.PdfImportedPage;
060: import com.lowagie.text.pdf.PdfReader;
061: import com.lowagie.text.pdf.SimpleBookmark;
062:
063: /**
064: * Tool that can be used to concatenate existing PDF files.
065: */
066: public class concat_pdf {
067:
068: /**
069: * This class can be used to concatenate existing PDF files.
070: * (This was an example known as PdfCopy.java)
071: * @param args the command line arguments
072: */
073: public static void main(String args[]) {
074: if (args.length < 2) {
075: System.err.println("arguments: file1 [file2 ...] destfile");
076: } else {
077: try {
078: int pageOffset = 0;
079: ArrayList master = new ArrayList();
080: int f = 0;
081: String outFile = args[args.length - 1];
082: Document document = null;
083: PdfCopy writer = null;
084: while (f < args.length - 1) {
085: // we create a reader for a certain document
086: PdfReader reader = new PdfReader(args[f]);
087: reader.consolidateNamedDestinations();
088: // we retrieve the total number of pages
089: int n = reader.getNumberOfPages();
090: List bookmarks = SimpleBookmark.getBookmark(reader);
091: if (bookmarks != null) {
092: if (pageOffset != 0)
093: SimpleBookmark.shiftPageNumbers(bookmarks,
094: pageOffset, null);
095: master.addAll(bookmarks);
096: }
097: pageOffset += n;
098: System.out.println("There are " + n + " pages in "
099: + args[f]);
100:
101: if (f == 0) {
102: // step 1: creation of a document-object
103: document = new Document(reader
104: .getPageSizeWithRotation(1));
105: // step 2: we create a writer that listens to the document
106: writer = new PdfCopy(document,
107: new FileOutputStream(outFile));
108: // step 3: we open the document
109: document.open();
110: }
111: // step 4: we add content
112: PdfImportedPage page;
113: for (int i = 0; i < n;) {
114: ++i;
115: page = writer.getImportedPage(reader, i);
116: writer.addPage(page);
117: System.out.println("Processed page " + i);
118: }
119: writer.freeReader(reader);
120: f++;
121: }
122: if (!master.isEmpty())
123: writer.setOutlines(master);
124: // step 5: we close the document
125: document.close();
126: } catch (Exception e) {
127: e.printStackTrace();
128: }
129: }
130: }
131: }
|