2017-01-06 87 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。做相反的方向会更容易。

相关问题