2017-01-06 3 views
0

Для Bruno { Это не дубликат «У меня есть обычный PDF-файл, я хочу вставить пустые страницы в конец PDF с помощью itext LIBRARY, без нарушая содержимое PDF ».C# Вставка пустой страницы после каждой страницы в PDF с помощью iTextSharp

Я пытаюсь добавить пустую страницу после каждой страницы в исходном PDF-документе - не только 1 пустая страница в конце исходного документа PDF. } Использование C# (NOT Java) - Кто-нибудь знает, как вставить пустую страницу (желательно A4 - Портрет 8.5 x 11). После каждой страницы в PDF с помощью 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

@Bruno - Я не видел Offical iTextSharp Example на своем сайте для этой конкретной проблемы. Вы бы так любезны предоставить ссылку? – Scott

+0

Пример на официальном сайте см. В [Как добавить пустые страницы в существующий PDF-файл в java?] (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(); 

Обратите внимание, что я добавить страницы в обратном порядке. Это элементарная логика: добавление страницы меняет количество страниц, и сложнее отслеживать pageNumber, если вы переходите со страницы 1 в total. Легче идти в обратном направлении.

Смежные вопросы