2011-07-11 8 views
0

iTextを使って2つのpdfをマージする方法を知っていますか(どちらか一方はトリプルボックス、もう一方は持っていない、ページサイズは違う)ここ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; 
    } 

しかし、それはページ(クロップボックスを持つページのコンテンツの誤位置)との間にクロップボックス差を処理していないようで、誰もがより良いコードを持っていますコンテンツを正しい位置に配置しますか?ページの注釈をコピーするだけでなく、ページの内容でしょう

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

:あなたはそれを苦労して

答えて

0

やっています。注釈が適切に機能する必要があるかもしれない文書レベルのものをコピーしないことに注意してください(例えばフォームフィールドの検証エントリポイントのための文書スクリプト)。

さまざまなページボックスのサイズや回転に関係なく、元のページはそのままコピーされます。

関連する問題