c# - iTextSharp:复制最后一页再创建一页
问题描述
我在每一页都有一个带有页眉、页脚等的 PDF 文件。如果文本很长(我有可变文本),我需要扩展页数。例如:
if (countOfRecords > 120)
{
// add one more page like second page of template (which does not have content, only header/footer
}
可能吗?
解决方案
我通过以下方式实现它:创建带有“空”页面的 PDF 文件(意味着仅带有必要的页眉/页脚),然后在必要时将其添加到主 PDF 中多少次:
PdfReader pdfReader = new PdfReader(model.Input);
Document document = new Document(pdfReader.GetPageSizeWithRotation(1));
using (MemoryStream ms = new MemoryStream())
{
PdfWriter writer = PdfWriter.GetInstance(document, ms);
document.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage page = writer.GetImportedPage(pdfReader, 1);
cb.AddTemplate(page, 0, 0);
int countOfPages = (int)Math.Ceiling(Convert.ToDecimal(model.ActiveDriverList.Count - countDriversOnFirstPage) / countDriversOnEmptyPage);
for (int i = 0; i < countOfPages; i++)
{
PdfReader readerPage = new PdfReader(model.EmptyPage);
readerPage.ConsolidateNamedDestinations();
document.SetPageSize(pdfReader.GetPageSizeWithRotation(1));
document.NewPage();
PdfImportedPage importedPage = writer.GetImportedPage(readerPage, 1);
cb = AddTextDriversNextPage(cb, model.ActiveDriverList, i + 1);
cb.AddTemplate(importedPage, 0, 0);
}
document.Close();
writer.Close();
return ms.ToArray();
}
推荐阅读
- function - 如何评估数据类型和 true_of_all_constants 函数?
- google-chrome - 如何关闭使用 cmd/bat 打开的特定 Chrome 配置文件?
- php - 通过 PHP CURL 从登录中获取会话 ID
- mongodb - 无法写入 MongoDB
- sed - grep 按字符串汇总行
- java - 我应该先转换字节流,缓冲区流还是字符流?
- python-3.x - Keras 顺序建模到功能 API
- javascript - 来自数据库的动态图表
- python - 如何从另一个类更新 tkinter 小部件图像?
- java - 有什么方法可以控制 java 部分中的“style.xml”元素?