2011-07-11 39 views
0

是否有任何知道如何使用iText合并两个pdf(其中一个具有cropbox,另一个没有,并且它们具有不同的页面大小)?iText合并PDF与作物箱

这里是代码,我使用的PDF合并:

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; 
    } 

但似乎不处理(内容错误立场,即有裁剪框页)页面之间裁剪框的区别,任何人有一个更好的代码把内容放在正确的位置?

回答

0

你这样做了艰辛的道路:

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)); 
    } 
} 

这将复制页注释以及页面内容。请注意,它不会复制文档级别的内容,这些注释可能需要正常工作(例如,表单字段的验证入口点的文档脚本)。

它会逐字复制原始页面,而不管各种页面大小或旋转。