如何使用iTextSharp将空白页面添加到PDF格式?

时间:2010-03-24 22:10:43

标签: c# pdf itextsharp

我正在尝试做一些我认为会非常简单的事情,但不是那么直接而谷歌没有帮助。

我正在使用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 个答案:

答案 0 :(得分:32)

好吧,我差不多了。在你把东西放在上面之前,文档实际上不会创建页面,所以一旦我添加了一个空表,bam!它奏效了!

如果我要合并的文档有奇数页面,那么这些代码将添加一个空白页面:

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

如果这在较新版本中不起作用,请尝试改为:

document.Add(new Chunk());

答案 1 :(得分:2)

另一种成功运作的替代方案。

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