Saltar al contenido

PDFsharp: ¿Hay alguna forma de generar “Página X de Y” en el encabezado de la página?

Solución:

Asegúrese de incluir el using MigraDoc.DocumentObjectModel; declaración en su clase.

Document document = new Document();
Section section = document.AddSection();

Paragraph paragraph = new Paragraph();
paragraph.AddText("Page ");
paragraph.AddPageField();
paragraph.AddText(" of ");
paragraph.AddNumPagesField();

section.Headers.Primary.Add(paragraph);

Con PDFsharp, tú decides.

Supongo que está utilizando MigraDoc: con MigraDoc puede agregar un encabezado de página. Agregar paragraph.AddPageField() para el número de página actual y paragraph.AddNumPagesField() para el recuento total de páginas.

Muestra que usa AddPageField

Fragmento de código de la muestra:

// Create a paragraph with centered page number. See definition of style "Footer".
Paragraph paragraph = new Paragraph();
paragraph.AddTab();
paragraph.AddPageField();

// Add paragraph to footer for odd pages.
section.Footers.Primary.Add(paragraph);
// Add clone of paragraph to footer for odd pages. Cloning is necessary because an object must
// not belong to more than one other object. If you forget cloning an exception is thrown.
section.Footers.EvenPage.Add(paragraph.Clone());

Fragmento de código que establece la tabulación (asumiendo DIN A 4 con un cuerpo de 16 cm):

style = document.Styles[StyleNames.Footer]; 
style.ParagraphFormat.AddTabStop("8cm", TabAlignment.Center); 

Ambos fragmentos extraídos del sitio vinculado. El código de muestra también está disponible para descargar.

Sé que esta pregunta es antigua y tiene una respuesta aceptada, sin embargo, la pregunta surge entre las primeras cuando se busca una solución PDFsharp.

Para el registro, lograr esto en PDFsharp es fácil. los PdfDocument clase, que se encuentra bajo el PdfSharp.Pdf El espacio de nombres contiene una colección de páginas (PdfDocument.Pages). Todo lo que tiene que hacer es recorrer la colección y agregar el contador de página en algún lugar de cada página, usando un XGraphics objeto, que puede instanciar usando XGraphics.FromPdfPage(PdfPage).

using PdfSharp.Pdf; // PdfDocument, PdfPage
using PdfSharp.Drawing; // XGraphics, XFont, XBrush, XRect
                        // XStringFormats

// Create a new PdfDocument.
PdfDocument document = new PdfDocument();
// Add five pages to the document.
for(int i = 0; i < 5; ++i)
    document.AddPage();

// Make a font and a brush to draw the page counter.
XFont font = new XFont("Verdana", 8);
XBrush brush = XBrushes.Black;

// Add the page counter.
string noPages = document.Pages.Count.ToString();
for(int i = 0; i < document.Pages.Count; ++i)
{
    PdfPage page = document.Pages[i];

    // Make a layout rectangle.
    XRect layoutRectangle = new XRect(0/*X*/, page.Height-font.Height/*Y*/, page.Width/*Width*/, font.Height/*Height*/);

    using (XGraphics gfx = XGraphics.FromPdfPage(page))
    {
        gfx.DrawString(
            "Page " + (i+1).ToString() + " of " + noPages,
            font,
            brush,
            layoutRectangle,
            XStringFormats.Center);
    }
}

Vale la pena señalar que si ya existe un objeto XGraphics para una página determinada, antes de crear una nueva, es necesario eliminar el anterior. Esto fallaría:

PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();

XGraphics gfx1 = XGraphics.FromPage(page);
XGraphics gfx2 = XGraphics.FromPage(page);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *