Créer un fichier pdf et de les fusionner avec pdfbox
C'est ce que je veux faire:
-
Faire 2 fichiers pdf à l'aide pdfbox
-
Fusionner ces deux fichiers à l'aide de pdfmerger
Je sais comment faire si je l'enregistrement n ° 1 pour le côté serveur disque dur local et de charger les fichiers pour le #2. Mais ce que je veux faire est d'utiliser "directement à partir de la mémoire". J'ai cherché toutes les méthodes de cette pdfboxes, mais ne pouvait toujours pas trouver.
C'est mon code le fichier local
Merci.
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDTrueTypeFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.util.PDFMergerUtility;
/**
* This is an example that creates a simple document
* with a ttf-font.
*
* @author <a href="mailto:[email protected]">Michael Niedermair</a>
* @version $Revision: 1.2 $
*/
public class Test2
{
/**
* create the second sample document from the PDF file format specification.
*
* @param file The file to write the PDF to.
* @param message The message to write in the file.
* @param fontfile The ttf-font file.
*
* @throws IOException If there is an error writing the data.
* @throws COSVisitorException If there is an error writing the PDF.
*/
public void doIt(final String file, final String message) throws IOException, COSVisitorException
{
//the document
PDDocument doc = null;
try
{
doc = new PDDocument();
PDPage page = new PDPage();
doc.addPage(page);
PDFont font = PDType1Font.HELVETICA_BOLD;
PDPageContentStream contentStream = new PDPageContentStream(doc, page);
contentStream.beginText();
contentStream.setFont(font, 12);
contentStream.moveTextPositionByAmount(100, 700);
contentStream.drawString(message);
contentStream.endText();
contentStream.close();
doc.save(file);
System.out.println(file + " created!");
}
finally
{
if (doc != null)
{
doc.close();
}
}
}
/**
* This will create a hello world PDF document
* with a ttf-font.
* <br />
* see usage() for commandline
*
* @param args Command line arguments.
*/
public static void main(String[] args)
{
Test2 app = new Test2();
Test2 app2 = new Test2();
try {
app.doIt("C:/here.pdf", "hello");
app2.doIt("C:/here2.pdf", "helloagain");
PDFMergerUtility merger = new PDFMergerUtility();
merger.addSource("C:/here.pdf");
merger.addSource("C:/here2.pdf");
OutputStream bout2 = new BufferedOutputStream(new FileOutputStream("C:/hereisthefinal.pdf"));
merger.setDestinationStream(bout2);
merger.mergeDocuments();
} catch (COSVisitorException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
OriginalL'auteur user1765884 | 2012-12-10
Vous devez vous connecter pour publier un commentaire.
Vous avez juste besoin d'utiliser le
PdfMergeUtility.addSource(InputStream)
méthode pour ajouter une source à partir d'un inputstream et non pas à partir d'un fichier physique.Avec un rapide coup d'œil à l'API, ce que vous pourriez faire est d'utiliser la
PDDocument.enregistrer(OutputStream)
méthode pour écrire le fichier dans un tableau d'octets en mémoire, quelque chose comme cela devrait fonctionner.OriginalL'auteur Alex
Je l'utilise pour fusionner des documents (InputStreams) et d'écrire le document fusionné dans un HttpServletResponse.
OriginalL'auteur tino
Vous pouvez utiliser ce moyen aussi:-
1) Créer une Liste de InputStream
2) Instancier PDFMergerUtility classe
3) Définir La Destination Du Flux De Sortie
4) Ajoutez tous les InputStreams à PDFMerger comme fichiers Source qui doit être fusionnées.
5) Fusionner les documents en appelant "
PDFmerger.mergeDocuments();
"OriginalL'auteur Akshay