2014-04-14 24 views
5

neden:fonksiyon/Birlikte PDF'leri birleştirme - Ben iText kullanarak birlikte PDF'leri birleştirmek için aşağıdaki kodu kullanıyorum bazı sorunlar

public static void concatenatePdfs(List<File> listOfPdfFiles, File outputFile) throws DocumentException, IOException { 
     Document document = new Document(); 
     FileOutputStream outputStream = new FileOutputStream(outputFile); 
     PdfWriter writer = PdfWriter.getInstance(document, outputStream); 
     document.open(); 
     PdfContentByte cb = writer.getDirectContent(); 
     for (File inFile : listOfPdfFiles) { 
      PdfReader reader = new PdfReader(inFile.getAbsolutePath()); 
      for (int i = 1; i <= reader.getNumberOfPages(); i++) { 
       document.newPage(); 
       PdfImportedPage page = writer.getImportedPage(reader, i); 
       cb.addTemplate(page, 0, 0); 
      } 
     } 
     outputStream.flush(); 
     document.close(); 
     outputStream.close(); 
    } 

Bu genellikle iyi çalışıyor! Ama bir kez, bir kaç sayfa 90 derece döndürüyor? Bunu yapan hiç kimse oldu mu?

Çevrilmiş olanlarla ilgili neyin özel olduğunu görmek için PDF'lerin kendilerine bakıyorum.

cevap

10

Belgeleri birleştirmek için yanlış yöntemi kullandığınız için arada sırada hatalar var. chapter 6 of my book okuyun ve PdfWriter kullanarak PDF belgeleri bağlamak (veya birleştirme) için fark edeceksiniz Lütfen yanlıştır:

  • Tamamen onlar A4 boyutunda tümü size farz (orijinal belgedeki sayfaların sayfa boyutunu görmezden),
  • Sen
  • uzaklara orijinal belgedeki mevcut olduğu tüm etkileşim atmak,
  • Sen sayfa sözlükte saklanan dönme değeri görmezden böyle kırpma kutusu (varsa) sayfa sınırları görmezden , ve bunun gibi.

    Document document = new Document(); 
    PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(dest)); 
    document.open(); 
    PdfReader reader; 
    String line = br.readLine(); 
    // loop over readers 
        // add the PDF to PdfCopy 
        reader = new PdfReader(baos.toByteArray()); 
        copy.addDocument(reader); 
        reader.close(); 
    // end loop 
    document.close(); 
    

    the book Diğer örnekler bulunmaktadır:

bitiştirme PDF PdfCopy kullanılarak yapılır, örneğin FillFlattenMerge2 örneğe bakın.

public static void concatenatePdfs(List<File> listOfPdfFiles, File outputFile) throws DocumentException, IOException { 
     Document document = new Document(); 
     FileOutputStream outputStream = new FileOutputStream(outputFile); 
     PdfCopy copy = new PdfSmartCopy(document, outputStream); 
     document.open(); 
     for (File inFile : listOfPdfFiles) { 
      PdfReader reader = new PdfReader(inFile.getAbsolutePath()); 
      copy.addDocument(reader); 
      reader.close(); 
     } 
     document.close(); 
} 
+0

Adını tanımak: –

+1

Evet, bu Lowagie ;-) –

+0

Soru - copy.addDocument, itext sürümümde mevcut değil. çok mu yaşlıyım? 5.0.6 –

9

durumda kimse burada ben yukarıda açıklanan sayfa çevirme sorunu var görünmüyor fonksiyonunun versiyonudur, yukarıda Bruno Lowagie en doğru cevabı kullanarak, bunun için arıyor itext ad alanlarından. Itext kitaplığının kurucusu musunuz?
İlgili konular