2011-07-11 4 views
0

Est-ce que quelqu'un sait comment fusionner deux pdf (l'un d'entre eux ont une corbeille et l'autre n'a pas, et ils ont une taille de page différente) en utilisant iText?iText Fusionner PDF avec cropbox

est le code ici, que j'utilise pour PDF fusion:

public bool MergeFiles(string destinationFile, string[] sourceFiles) 
    { 
     bool bSucess = true; 

     if (System.IO.File.Exists(destinationFile)) 
      System.IO.File.Delete(destinationFile); 

     string[] sSrcFile; 
     sSrcFile = new string[2]; 


     string[] arr = new string[2]; 
     for (int i = 0; i <= sourceFiles.Length - 1; i++) 
     { 
      if (sourceFiles[i] != null) 
      { 
       if (sourceFiles[i].Trim() != "") 
        arr[i] = sourceFiles[i].ToString(); 
      } 
     } 

     if (arr != null) 
     { 

      sSrcFile = new string[2]; 

      for (int ic = 0; ic <= arr.Length - 1; ic++) 
      { 
       sSrcFile[ic] = arr[ic].ToString(); 
      } 
     } 

     string sPDFPath = Server.MapPath(@"pdftemp/"); 
     Scripting.FileSystemObject fso = new Scripting.FileSystemObjectClass(); 


     try 
     { 
      int f = 0; 

      PdfReader reader = new PdfReader(sSrcFile[f]); 
      int n = reader.NumberOfPages; 
      Console.WriteLine("There are " + n + " pages in the original file."); 
      Document document = new Document(PageSize.A4); 

      PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create)); 
      PdfDate st = new PdfDate(DateTime.Today); 


      document.Open(); 
      PdfContentByte cb = writer.DirectContent; 
      PdfImportedPage page; 

      int rotation; 
      while (f < sSrcFile.Length) 
      { 
       int i = 0; 
       while (i < n) 
       { 
        i++; 

        document.SetPageSize(PageSize.A4); 
        document.NewPage(); 
        page = writer.GetImportedPage(reader, i); 

        rotation = reader.GetPageRotation(i); 
        if (rotation == 90 || rotation == 270) 
        { 
         cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height); 
        } 
        else 
        { 
         cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0); 
        } 
        Console.WriteLine("Processed page " + i); 
       } 

       f++; 
       if (f < sSrcFile.Length) 
       { 
        reader = new PdfReader(sSrcFile[f]); 
        n = reader.NumberOfPages; 
        Console.WriteLine("There are " + n + " pages in the original file."); 
       } 
      } 

      document.Close(); 

     } 
     catch (Exception e) 
     { 
      bSucess = false; 
     } 

     return bSucess; 
    } 

Mais il ne semble pas manipuler la différence de CropBox entre les pages (mauvaise position de contenu à la page qui ont CropBox), quelqu'un a un meilleur code mettre le contenu dans la bonne position?

Répondre

0

Vous le faites à la dure:

PdfReader reader = null; 
PdfCopy copier = new PdfCopy(outputStream); 
String paths[] = ...; 
for (String path : paths) { 
    reader = new PdfReader(path); 
    for (int pageNum = 1; pageNum <= reader.getNumberOfPages(); ++pageNum) { 
    copier.addPage(copier.getImportedPage(reader, pageNum)); 
    } 
} 

Ce copierez annotations page ainsi que le contenu de la page. Notez qu'il ne copiera pas les informations de niveau document dont ces annotations pourraient avoir besoin pour fonctionner correctement (script de document pour le point d'entrée de validation d'un champ de formulaire, par exemple).

Et il va copier la page d'origine verbatim, indépendamment de diverses tailles de page ou de rotation.