PdfStamper总是假设A4尺寸

时间:2017-11-22 06:46:12

标签: c# itext

我正在尝试使用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阅读文档的正确尺寸。

1 个答案:

答案 0 :(得分:2)

我没有解释为什么stamper.GetUnderContent(i).PdfDocument默认为A4,但是,获取页面大小的正确方法是:

var pageSize = reader.GetPageSizeWithRotation(i);

请注意,这是完整页面大小,包括边距。