Как добавить пустую страницу в PDF с помощью iTextSharp? - PullRequest
20 голосов
/ 25 марта 2010

Я пытаюсь сделать что-то, что мне показалось бы довольно простым, однако это не так просто, и Google не помог.

Я использую iTextSharp для объединения PDF-документов (букв), чтобы их можно было распечатать сразу. Если в письме нечетное количество страниц, мне нужно добавить пустую страницу, чтобы мы могли печатать буквы двусторонними.

Вот основной код, который у меня есть на данный момент для объединения всех букв:

// initiaise
 MemoryStream pdfStreamOut = new MemoryStream();
    Document document = null;
    MemoryStream pdfStreamIn = null;
    PdfReader reader = null;
    int numPages = 0;
    PdfWriter writer = null;


for int(i = 0;i < letterList.Count; i++)
{
    byte[] myLetterData = ...;
    pdfStreamIn = new MemoryStream(myLetterData);
    reader = new PdfReader(pdfStreamIn);
    numPages = reader.NumberOfPages;

    // open the streams to use for the iteration
    if (i == 0)
    {
        document = new Document(reader.GetPageSizeWithRotation(1));
        writer = PdfWriter.GetInstance(document, pdfStreamOut);
        document.Open();
    }

    PdfContentByte cb = writer.DirectContent;
    PdfImportedPage page;

    int importedPageNumber = 0;
    while (importedPageNumber < numPages)
    {
        importedPageNumber++;
        document.SetPageSize(reader.GetPageSizeWithRotation(importedPageNumber));
        document.NewPage();
        page = writer.GetImportedPage(reader, importedPageNumber);
        cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
    }
}

Я пытался использовать:

    document.SetPageSize(reader.GetPageSizeWithRotation(1));
    document.NewPage();

в конце цикла for для нечетного числа страниц без успеха.

Ответы [ 2 ]

32 голосов
/ 25 марта 2010

Ну, я был почти там. На самом деле документ не создаст страницу, пока вы не положите на нее что-нибудь, поэтому, как только я добавлю пустую таблицу, бэм! Это сработало!

Вот код, который добавит пустую страницу, если документ, который я объединяю, имеет нечетное количество страниц:

if (numPages > 0 && numPages % 2 == 1)
{
    bool result = document.NewPage();
    document.Add(new Table(1));
}

Если это не работает в более новых версиях, попробуйте вместо этого:

document.Add(new Chunk());
2 голосов
/ 30 октября 2012

Еще одна альтернатива, которая успешно работает.

if (numPaginas % 2 != 0)
            {
                documentoPdfUnico.SetPageSize(leitorPdf.GetPageSizeWithRotation(1));
                documentoPdfUnico.NewPage();
                conteudoPdf.AddTemplate(PdfTemplate.CreateTemplate(escritorPdf, 2480, 3508), 1f, 0, 0, 1f, 0, 0);
            }
...