номер страницы в pdf файле с помощью iTextSharp 5.0.2.0 - PullRequest
0 голосов
/ 20 сентября 2019

Я хотел получить номер страницы на каждой странице PDF-файла, сгенерированного с помощью iTextSharp 5.0.2.0.

, сейчас часть кода

e.FooterText = writer.CurrentPageNumber.ToString();

Но когда я делаю это, он показывает номер страницы, но проблема в том, что он показывает один и тот же номер страницы на всех страницах.как "1" на всех страницах.Как получить номер страницы для PDF-файла с помощью iTextSharp версии 5.0.2.0? Есть идеи ??

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Как заявляет @ bradbury9, событие OnEndPage - это то, к чему вы стремитесь.

Вот пример кода, который добавляет желаемый текст нижнего колонтитула в нужную позицию страницы каждый раз, когда событие OnPageEndtriggered

public class MyPdfPageEventHandler: PdfPageEventHelper
{
    const float horizontalPosition = 0.5f;  // %50 of the page width, starting from the left
    const float verticalPosition = 0.1f;    // %10 of the page height starting from the bottom

    public override void OnEndPage(PdfWriter writer, Document document)
    {
        var footerText = new Phrase(writer.CurrentPageNumber.ToString());

        float posX = writer.PageSize.Width * horizontalPosition;
        float posY = writer.PageSize.Height * verticalPosition;
        float rotation = 0;

        ColumnText.ShowTextAligned(writer.DirectContent, Element.PHRASE, footerText, posX, posY, rotation);
    }
}

А вот пример кода о том, как заставить его работать

static void Main(string[] args)
{
    FileStream fs = new FileStream("NewDocument.pdf", FileMode.Create, FileAccess.Write, FileShare.None);
    Document doc = new Document();
    PdfWriter writer = PdfWriter.GetInstance(doc, fs);
    writer.PageEvent = new MyPdfPageEventHandler(); //This will trigger the code above

    doc.Open();
    doc.Add(new Paragraph("First Page"));
    doc.NewPage();
    doc.Add(new Paragraph("Second Page"));
    doc.NewPage();
    doc.Add(new Paragraph("Thid Page"));
    doc.Close();
}

Вы можете использовать класс MyPdfPageEventHandler для переопределения других событий страницы, таких как OnStartPage и т. д.

0 голосов
/ 20 сентября 2019

Вам придется открыть PDF с iTextSharp, и следующий код поможет вам


public void AddPageNumberToPDF(string physicalDocPath, bool showPageOfPage)
{
   byte[] Fbytes = File.ReadAllBytes(physicalDocPath);
   PdfReader reader = new PdfReader(Fbytes);
   int n = reader.NumberOfPages;
   using (var fileStream = new FileStream(physicalDocPath, FileMode.Create, FileAccess.Write))
   {
       var document = new Document(reader.GetPageSizeWithRotation(1));
       var writer = PdfWriter.GetInstance(document, fileStream);
       document.Open();
       PdfContentByte cb = writer.DirectContent;
       int p = 0;

       for (int page = 1; page <= reader.NumberOfPages; page++)
       {
           document.NewPage();
           p++;

           PdfImportedPage importedPage = writer.GetImportedPage(reader, page);
           cb.AddTemplate(importedPage, 0, 0);

           BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
           cb.BeginText();
           cb.SetFontAndSize(bf, 10);
           if (showPageOfPage)
           {
               cb.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, p.ToString()+"/"+n.ToString(), 575, 17, 0);
           }
           else
           {
               cb.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, p.ToString(), 575, 17, 0);
           }
           cb.EndText();
       }

       document.Close();
       writer.Close();
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...