2017-01-06 124 views
0

對於Bruno { 這不是「我有普通的PDF文件,我想在PDF的末尾插入空白頁使用itext LIBRARY,沒有擾亂PDF內容「。C#在使用iTextSharp的PDF中的每頁後插入一個空白頁

我試圖在源PDF中的每個頁面之後添加一個空白頁面 - 而不僅僅是源PDF文檔末尾的1個空白頁面。 } 使用C#(不是Java) - 有誰知道如何插入一個空白頁面(最好是A4-肖像8.5 x 11)在使用iTextSharp的PDF中的每個頁面之後,無論頁面大小和方向如何。源PDF的每個頁面可以具有不同的大小和方向。

我試過以下。這似乎使空白頁按照每個頁面的源PDF頁面的從源PDF的方向和大小,但在網頁似乎是以前的空白頁的方向和大小:

private string DocumentWithBlankPagesInserted(string fileName, string userComments) 
    { 
     string outputFileName = v.tmp + @"\" + v.tmpDir + @"\" + Guid.NewGuid().ToString() + ".pdf"; 

     Document document = new Document(); 
     try 
     { 
      PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(outputFileName, FileMode.Create)); 

      document.Open(); 

      PdfContentByte cb = writer.DirectContent; 
      PdfReader reader = new PdfReader(fileName); 

      for (int pageNumber = 1; pageNumber < reader.NumberOfPages + 1; pageNumber++) 
      { 
       document.SetPageSize(reader.GetPageSizeWithRotation(pageNumber)); 

       Chunk fileRef = new Chunk(); 
       fileRef.SetLocalDestination(fileName); 

       PdfImportedPage page1 = writer.GetImportedPage(reader, pageNumber); 

       Rectangle psize = reader.GetPageSizeWithRotation(pageNumber); 
       switch (psize.Rotation) 
       { 
        case 0: 
         cb.AddTemplate(page1, 1f, 0, 0, 1f, 0, 0); 
         break; 
        case 90: 
         cb.AddTemplate(page1, 0, -1f, 1f, 0, 0, psize.Height); 
         break; 
        case 180: 
         cb.AddTemplate(page1, -1f, 0, 0, -1f, 0, 0); 
         break; 
        case 270: 
         cb.AddTemplate(page1, 0, 1.0F, -1.0F, 0, psize.Width, 0); 
         break; 
        default: 
         break; 
       } 

       document.NewPage(); 
       document.Add(fileRef); 
       document.NewPage(); 
      } 
     } 
     catch (Exception e) 
     { 
      throw e; 
     } 
     finally 
     { 
      document.Close(); 
     } 
     return outputFileName; 
    } 
+0

請停止使用非官方的例子。他們錯了嗎?爲什麼你會忽略官方的iText網站,並優先考慮那些不瞭解iText第一件事的人的例子?使用'PdfStamper'(** NOT **'PdfWriter')和使用'InsertPage()'方法插入空白頁。 –

+0

@布魯諾 - 我沒有在他們的網站上看到一個關於這個特定問題的官方iTextSharp示例。你會如此友善提供一個鏈接? – Scott

+0

有關官方網站的示例,請參見[如何將空白頁面添加到Java中的現有PDF?](http://developers.itextpdf.com/question/how-add-blank-pages-existing-pdf-java )在大寫情況下更改一些小寫字母(例如將'close()'更改爲'Close()'和將insertPage()更改爲'InsertPage()'),並且您有解決方案。 (請不要告訴我做這樣的改變很困難。) –

回答

1

正如我所解釋這個問題是重複的How to add blank pages to an existing PDF in java?

你應該使用PdfStamper而不是PdfWriter(這已經在StackOverflow的不同答案中解釋過數十億次)。使用InsertPage()方法,你可以添加任何你想要的大小的網頁:

PdfReader reader = new PdfReader(src); 
PdfStamper stamper=new PdfStamper(reader, new FileStream(dest, FileMode.Create)); 
int total = reader.NumberOfPages + 1 
for (int pageNumber = total; pageNumber > 0; pageNumber--) { 
    stamper.InsertPage(pageNumber, PageSize.A4); 
} 
stamper.Close(); 
reader.Close(); 

注意,我添加以相反的順序的頁面。這是基本邏輯:添加頁面會更改頁面數量,如果您從頁面1轉到total,則難以跟蹤pageNumber。做相反的方向會更容易。

相關問題