如何获取PDF文件的总页数 - iTextSharp,c#

时间:2013-05-31 01:08:42

标签: c# itextsharp

我需要帮助。我花了4个小时试图获取PDF文件的总页数。我希望在我的页脚中有类似“Page X / Y”的内容。有人可以告诉我该如何处理这段代码?

public class pdfPage : PdfPageEventHelper
{              
    public override void OnEndPage(PdfWriter writer, Document doc)
    {

        iTextSharp.text.Rectangle page = doc.PageSize;
        //PdfPTable EndTable = new PdfPTable(2);
        PdfPTable EndTable = new PdfPTable(2);
        EndTable.DefaultCell.Padding = 2f;
        EndTable.HorizontalAlignment = Element.ALIGN_JUSTIFIED;
        iTextSharp.text.Font smallfont2 = FontFactory.GetFont(FontFactory.HELVETICA, "CP1250", 10);
        PdfPCell stopka1 = new PdfPCell(new Phrase("Left column - not important", smallfont2));
        stopka1.BorderWidthLeft = 0;
        stopka1.BorderWidthBottom = 0;
        stopka1.BorderWidthRight = 0;
        stopka1.HorizontalAlignment = Element.ALIGN_LEFT;
        stopka1.VerticalAlignment = Element.ALIGN_MIDDLE;
        PdfPCell stopka2 = new PdfPCell(new Phrase("Page " + doc.PageNumber + "/", smallfont2));
        stopka2.BorderWidthLeft = 0;
        stopka2.BorderWidthBottom = 0;
        stopka2.BorderWidthRight = 0;
        stopka2.HorizontalAlignment = Element.ALIGN_RIGHT;
        stopka2.VerticalAlignment = Element.ALIGN_MIDDLE;
        EndTable.AddCell(stopka1);
        EndTable.AddCell(stopka2);
        EndTable.TotalWidth = page.Width - doc.LeftMargin - doc.RightMargin;
        EndTable.WriteSelectedRows(0, -1, doc.LeftMargin, EndTable.TotalHeight + doc.BottomMargin - 45, writer.DirectContent);

    }
   } 

修改

好的,我把它整理出来了。我只是关闭了我正在处理的PDF文件,然后将其复制为临时文件。然后在方法“OnEndPage”中我计算了这个临时文档中的页面。后来,我打开了一个新文件,从这个临时复制了所有内容,创建了一个pdfPage类的对象并将其连接到writer2.PageEvent。现在它有效:)

1 个答案:

答案 0 :(得分:3)

请阅读documentation。如果您不知道从哪里开始查看,请查看keywords,更具体地说:Page X of Y

这里有两个例子:

  • MovieCountries1一次创建PDF,并在onDocumentClose()方法中添加页面总数,因为正如您已经发现的那样,您无法使用任何类型的软件知道文件关闭前的总页数。
  • TwoPasses分两次创建PDF,这是一个比您选择作为解决方案更强大的解决方案。

我确信你足够了解Java并将其翻译成C#,但如果SO上有其他人没有,他们可以找到这些例子的C#版本{{3 }和here