Salut,
Voila mon code qui fusionne des pdf, sachant que des le nombre des fichier a fusionner est trés grand.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public class Ms { public static void main(String path ,int n) throws FileNotFoundException { int t = 0; String[] R = lister(path); for (int i =0;i<R.length;i++){ R[i]=path.concat("\\"+R[i]); } List<InputStream> pdfs = new ArrayList<InputStream>(); int m =R.length; do{ if (m<=5000){ for (int i =0;i<m;i++){ pdfs.add(new FileInputStream(R[t])); t=t+1; } OutputStream output = new FileOutputStream(path+t+".pdf"); Ms.concatPDFs(pdfs, output, true); System.out.println("fin traitement"); } else{ for (int i =0;i<5000;i++){ pdfs.add(new FileInputStream(R[t])); t=t+1; } OutputStream output = new FileOutputStream(path+t+".pdf"); Ms.concatPDFs(pdfs, output, true); pdfs = new ArrayList<InputStream>(); m=m-5000; System.out.println("fin traitement"); } } while(t<R.length); }l'orsque le dossier dont les fichiers doivent etre fusioner est de tres grande taille le programme affiche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 public static void concatPDFs(List<InputStream> streamOfPDFFiles, OutputStream outputStream, boolean paginate) { Document document = new Document(); try { List<InputStream> pdfs = streamOfPDFFiles; List<PdfReader> readers = new ArrayList<PdfReader>(); int totalPages = 0; Iterator<InputStream> iteratorPDFs = pdfs.iterator(); // Create Readers for the pdfs while (iteratorPDFs.hasNext()) { InputStream pdf = iteratorPDFs.next(); PdfReader pdfReader = new PdfReader(pdf); readers.add(pdfReader); totalPages += pdfReader.getNumberOfPages(); } // Create a writer for the 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 PDF // data PdfImportedPage page; int currentPageNumber = 0; int pageOfCurrentReaderPDF = 0; Iterator<PdfReader> iteratorPDFReader = readers.iterator(); // Loop through the PDF files and add to the output. while (iteratorPDFReader.hasNext()) { PdfReader pdfReader = iteratorPDFReader.next(); // Creer new page while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) { document.newPage(); pageOfCurrentReaderPDF++; currentPageNumber++; page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF); cb.addTemplate(page, 0, 0); // Code pour pagination. if (paginate) { cb.beginText(); cb.setFontAndSize(bf, 9); cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "" + currentPageNumber + " of " + totalPages, 520, 5, 0); cb.endText(); } } pageOfCurrentReaderPDF = 0; } document.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (document.isOpen()) document.close(); try { if (outputStream != null) outputStream.close(); } catch (IOException ioe) { ioe.printStackTrace(); } } }
Sachant que les variables Xms et Xmx sont au max.fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
fin traitement
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.io.ByteArrayOutputStream.grow(Unknown Source)
at java.io.ByteArrayOutputStream.ensureCapacity(Unknown Source)
at java.io.ByteArrayOutputStream.write(Unknown Source)
at com.itextpdf.text.io.StreamUtil.inputStreamToArray(StreamUtil.java:74)
at com.itextpdf.text.io.RandomAccessSourceFactory.createSource(RandomAccessSourceFactory.java:146)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:350)
at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:370)
at test.Ms.concatPDFs(Ms.java:91)
at test.Ms.main(Ms.java:58)
at test.List.main(List.java:20)
aidez moi svp!!
Partager