Concatenar 2 pdfs em um só

3 respostas
Paezani

Bom dia, alguém tem algum exemplo de concatenção de 2 pdfs ou mais em um único pdf em java? Estou com dificuldades em fazer isto e não encontrei nenhum exemplo quemostrasse isso…

[]s

3 Respostas

Paezani

Segue o códgio abaixo só que está dando um erro no método concatPDFs, e não sei o que é. Estou usando o eclipse 3.1

adicionei ao projeto o jar itext 1[1].3, alguem poderia me ajudar??

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;
import com.lowagie.*;

import com.lowagie.text.Document;

import com.lowagie.text.List;

import com.lowagie.text.pdf.BaseFont;

import com.lowagie.text.pdf.PdfContentByte;

import com.lowagie.text.pdf.PdfImportedPage;

import com.lowagie.text.pdf.PdfReader;

import com.lowagie.text.pdf.PdfWriter;

import com.lowagie.text.pdf.hyphenation.TernaryTree.Iterator;
public class MergePDF

{

public static void main(String[] args)

{

try

{

List pdfs = new ArrayList();

pdfs.add(new FileInputStream(c:\pdf\2.pdf));

pdfs.add(new FileInputStream(c:\pdf\3.pdf));

OutputStream output = new FileOutputStream(c:\pdf\merge.pdf);
boolean x = true;

MergePDF.concatPDFs(pdfs, output, x);

}

catch (Exception e)

{

e.printStackTrace();

}
public static void concatPDFs( List streamOfPDFFiles  , OutputStream outputStream , boolean paginate)

{

Document document = new Document();

try

{

List pdfs = streamOfPDFFiles;

List readers = new ArrayList();

int totalPages = 0;

Iterator iteratorPDFs = pdfs.iterator();
//Create Leitores de pdfs.

while (iteratorPDFs.hasNext())

{

InputStream pdf = iteratorPDFs.next();

PdfReader pdfReader = new PdfReader(pdf);

readers.add(pdfReader);

totalPages += pdfReader.getNumberOfPages();

}
//  Cria um escritor para o outputstream

PdfWriter writer = PdfWriter.getInstance(document, outputStream);

document.open();

BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);

PdfContentByte cb = writer.getDirectContent();

// Holds the
PdfContentByte cb = writer.getDirectContent ();

// data / / Dados

PdfImportedPage page;

int currentPageNumber = 0;

int pageOfCurrentReaderPDF = 0;

Iterator iteratorPDFReader = readers.iterator();
// Loop através dos ficheiros PDF e adicionar à saída.

while (iteratorPDFReader.hasNext())

{

PdfReader pdfReader = iteratorPDFReader.next();

// Cria uma nova página da meta para cada fonte página.

while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages())

{

document.newPage();

pageOfCurrentReaderPDF++;

currentPageNumber++;

page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);

cb.addTemplate(page, 0, 0);

//Código para a paginação.

if (paginate)

{

cb.beginText();

cb.setFontAndSize(bf, 9);

cb.showTextAligned(PdfContentByte.ALIGN_CENTER, “” + currentPageNumber + " of " + totalPages, 520, 5, 0);

cb.endText();

}

}
pageOfCurrentReaderPDF = 0;       
   }         
 outputStream.flush();       
 document.close();         
 outputStream.close();       
 } 
 catch (Exception e)
 { 
	 e.printStackTrace(); 
 } 
 finally 
 { 
	 if (document.isOpen()) 
		 document.close(); 
	 try 
	 {   
	  if (outputStream != null)             
		  outputStream.close(); 
	 } 
	 catch (IOException ioe) 
	 {         
		 ioe.printStackTrace();         
	 }       
	 }    
    }

}//fim do método
}//fim da classe

Paezani

Bom , na verdade faltava fechar o método principal com }.
Mas em todas as linhas que contem List ou Iterator ou List dá erro, por exemplo em um aparece a mensagem:

  • the type list is not generic; it cannot be parameterized with arguments

O que poderia ser isso? Versão do java? ou Algum jar?

Paezani

Bom pessoal , segue um código que funciona…ele mescla vários pds em um único…

import java.io.FileOutputStream;
import java.io.IOException;

import com.lowagie.text.DocumentException;

import com.lowagie.text.pdf.PdfCopyFields;

import com.lowagie.text.pdf.PdfReader;
public class MesclaPDF

{

public static void main(String[] args)

{ 	

try

{

PdfReader reader1 = new PdfReader (C:/1.pdf);

PdfReader reader2 = new PdfReader(C:/2.pdf);

PdfReader reader3 = new PdfReader(C:/3.pdf);

PdfCopyFields copy;

copy = new PdfCopyFields(new FileOutputStream(C:/concatenatedPDF.pdf));
copy.addDocument(reader1); 
 copy.addDocument(reader2); 
 copy.addDocument(reader3);
 copy.close(); 
} 
catch (IOException eio) 
{
 eio.printStackTrace();
} 
catch (DocumentException ed)
{
 ed.printStackTrace();
}

}
}

Criado 30 de abril de 2009
Ultima resposta 30 de abr. de 2009
Respostas 3
Participantes 1