我正在尝试使用itextsharp将页码写入我的PDF文档。 我按照示例here进行了操作。这个答案指出了我this implementation in C#的方向。
现在,一切正常 - 假设页面方向为A4。就我而言,事实并非如此。我正在使用风景A3页面。因为我想很好地定位页码,我需要我正在处理的页面的尺寸。
stamper.GetOverContent().PdfDocument.PageSize
似乎总是返回A4页面的尺寸。
这是一个可重复的例子:
using (var ms = new MemoryStream())
{
using (var doc = new Document(PageSize.A3.Rotate()))
{
Debug.WriteLine(doc.PageSize);
var writer = PdfWriter.GetInstance(doc, ms);
doc.Open();
doc.Add(new Paragraph("Hello!"));
}
byte[] firstPass = ms.ToArray();
PdfReader reader = new PdfReader(firstPass);
using (var fs = new FileStream("out2.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
{
using (PdfStamper stamper = new PdfStamper(reader, fs))
{
int totalPages = reader.NumberOfPages;
for (var i = 1; i <= totalPages; i++)
{
var under = stamper.GetUnderContent(i);
var over = stamper.GetOverContent(i);
Debug.WriteLine(under.PdfDocument.PageSize);
Debug.WriteLine(over.PdfDocument.PageSize);
}
}
}
}
其输出为:
矩形:1191x842(腐烂:90度)
RectangleReadOnly:595x842(腐烂:0度)
RectangleReadOnly:595x842(腐烂:0度)
如何正确获取PdfStamper
的文档的页面大小?
请注意,这个问题不关于使用iTextSharp生成页码。有各种解决方法。这个问题特别关注通过PdfStamper
阅读文档的正确尺寸。
答案 0 :(得分:2)
我没有解释为什么stamper.GetUnderContent(i).PdfDocument
默认为A4,但是,获取页面大小的正确方法是:
var pageSize = reader.GetPageSizeWithRotation(i);
请注意,这是完整页面大小,包括边距。