c# - OnStartPage CurrentPageNumber 错误 ITextSharp
问题描述
我是使用 ITextSharp 的新手,我正在尝试使用OnStartPage
event 方法PdfPageEventHelper
来创建一个简单的内容表
一切都差不多完成了,唯一的问题是第一次调用OnStartPage
是PdfWriter
CurrentPageNumber
错误的,它应该是 1,但它是 2,然后,所有其他调用中的所有其他,CurrentPageNumber
都在它应该在的页面中。
这是我的代码
public class MyPdfEventHandler: PdfPageEventHelper
{
protected List<PageIndex> Indice = new List<PageIndex>();
public override void OnStartPage(PdfWriter writer, Document document)
{
PageIndex pi = new PageIndex
{
Page = writer.CurrentPageNumber,
Name = "Name Example",
Text = "Text Example"
}
Indice.Add(pi);
}
}
为什么会这样?难道我做错了什么?
谢谢!
解决方案
我无法重现您的问题。
我创建了以下事件侦听器:
public class OnStartPageTestHandler : PdfPageEventHelper
{
public override void OnStartPage(PdfWriter writer, Document document)
{
Console.WriteLine("OnStartPage - PdfWriter {0}, Document {1}", writer.CurrentPageNumber, document.PageNumber);
}
}
并在以下测试方法中使用它
public void TestOnStartPagePageNumber()
{
using (MemoryStream memoryStream = new MemoryStream())
using (Document document = new Document())
{
PdfWriter writer = PdfWriter.GetInstance(document, memoryStream);
writer.PageEvent = new OnStartPageTestHandler();
document.Open();
for (int i=0; i<16; i++)
{
document.Add(new Paragraph("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."));
}
}
}
并得到了这个结果:
OnStartPage - PdfWriter 1, Document 1
OnStartPage - PdfWriter 2, Document 2
OnStartPage - PdfWriter 3, Document 3
因此,PdfWriter
和都Document
返回正确的当前页码。
对于测试,我使用了当前的 iText(Sharp) v5.5.13。如果您碰巧使用的是旧版本,请更新,可能您处理了一个修复了很长时间的错误...
推荐阅读
- java - 如果在同步锁周围的循环中使用变量,是否会“从主内存中重新读取”?
- assembly - MASM x86中的冒泡排序在几次交互后不排序
- ios - 使用系统字体创建 SKLabelNode(UIFont 为字体名称)
- html - SVG Polligo 指向 CSS 剪辑路径
- sql - 匹配 SQL 中相似的不同列
- python - 将两个列表合并为一个 - python
- c# - 无法将对象从 DBNull 转换为具有输出参数的存储过程中的其他类型
- javascript - 单击禁用按钮时,如何使模式出现?
- r - 使用 rvest 进行网页抓取适用于网站的第一页,但不适用于其他网页
- ios - NEHotspotConfigurationErrorDomain Code=5“无效的 EAP 设置。”