ejemplos c# pdfsharp migradoc

c# - ejemplos - PDFsharp: ¿Hay una manera de generar "Página X de Y" en el encabezado de la página?



pdfsharp nuget (3)

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);

Parece bastante simple, pero no puedo encontrar algo como getPageCount () en la API. Puedo hacer que devuelva la página actual, pero no el número total de páginas. Tal vez me lo estoy perdiendo?

Me gustaría poder imprimir de alguna manera ''Página 1 de 9'' en la parte superior de cada página, donde ''1'' es el número de página actual.


Con PDFsharp depende de usted.

Supongo que está utilizando MigraDoc: Con MigraDoc puede agregar un encabezado de página. Agregue el paragraph.AddPageField() para el número de página actual y el 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 el tope de tabulación (suponiendo que DIN A 4 con un cuerpo de 16 cm):

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

Ambos fragmentos tomados del sitio vinculado. 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 aparece entre las primeras cuando se busca una solución PDFsharp.

Para el registro, lograr esto en PDFsharp es fácil. La clase PdfDocument , que se encuentra en el espacio de nombres PdfSharp.Pdf 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 la página en algún lugar de cada página, usando un objeto de XGraphics , 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, debe eliminarse la antigua. Esto fallaría:

PdfDocument document = new PdfDocument(); PdfPage page = document.AddPage(); XGraphics gfx1 = XGraphics.FromPage(page); XGraphics gfx2 = XGraphics.FromPage(page);