Как добавить пустую страницу в pdf с помощью iTextSharp?
Я пытаюсь сделать что-то, что, по моему мнению, будет довольно простым, однако это не так прямо, и 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 для нечетного числа страниц без успеха.
Ответы
Ответ 1
Ну, я был почти там. Документ фактически не создаст страницу, пока вы не нанесете что-нибудь на нее, поэтому, как только я добавлю пустую таблицу, bam! Это сработало!
Вот код, который добавит пустую страницу, если документ, с которым я объединяюсь, содержит нечетное количество страниц:
if (numPages > 0 && numPages % 2 == 1)
{
bool result = document.NewPage();
document.Add(new Table(1));
}
Если это не работает в более новых версиях, попробуйте это вместо:
document.Add(new Chunk());
Ответ 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);
}