Tengo un archivo pdf que convirtió de html por EvoPdf HtmlToPdfConverter. Leí los bytes del archivo por clase de documento evopdf y le agregué un elemento de pie de página. después de guardar los bytes, se muestra en línea webBrowser. no se muestra el pie de página con el número de página.

Este es mi código:

Document pdfDoc = new Document("myFilePath.pdf");

//create the footer element
TextElement footerText = new TextElement(0, 30, "Page &p; of &P;  ",
        new System.Drawing.Font( new System.Drawing.FontFamily("Arial"), 10, System.Drawing.GraphicsUnit.Point));
footerText.EmbedSysFont = true;
footerText.TextAlign = HorizontalTextAlign.Right;
pdfDoc.AddFooterTemplate(50);
pdfDoc.Footer.AddElement(footerText);

byte[] outBuffer = pdfDoc.Save();
pdfDoc.Close();
//...

Si agrego el elemento de pie de página al htmlToPdfConverter, se muestra bien.

¿cómo puedo mostrarlo?

Gracias.

0
user5525035 28 ene. 2016 a las 17:00

2 respuestas

La mejor respuesta

También me he encontrado con la misma situación. Básicamente, quería agregar encabezado y pie de página a archivos PDF existentes sin usar htmltopdfconverter.

Aquí está la solución con algunos ajustes a su código existente:

//Create a blank document.
Document MergeDocument = new Document(); 
Document pdfDoc = new Document("myFilePath.pdf");

//Merged n number of existing PDFs to newly created document.
MergedDocument.AppendDocument(pdfDoc, true, true, true);

//create the footer element
TextElement footerText = new TextElement(0, 30, "Page &p; of &P;  ",
    new System.Drawing.Font( new System.Drawing.FontFamily("Arial"), 10, System.Drawing.GraphicsUnit.Point));
footerText.EmbedSysFont = true;
footerText.TextAlign = HorizontalTextAlign.Right;

//Apply footer to the newly created document after all documents appended.
MergeDocument.AddFooterTemplate(50);
MergeDocument.Footer.AddElement(footerText);

byte[] outBuffer = MergeDocument.Save();

MergeDocument.Close();
0
PratikSatikunvar 6 feb. 2016 a las 09:15

Para aplicar encabezados y pies de página en documentos PDF existentes, debe crear un objeto Documento vacío, definir el encabezado y pie de página y luego agregar los documentos PDF externos utilizando el método Document.AppendDocument (Documento doc, bool enableHeaderAndFooter, bool drawHeaderOnFirstPage, bool drawFooterOnFirstPage ).

A continuación puede encontrar un ejemplo completo de esto. También puede encontrar una demostración en línea en Agregar encabezado y pie de página en PDF externo

public void protected void createPdfButton_Click(object sender, EventArgs e)
{
    // Create a PDF document
    Document pdfDocument = new Document();

    // Add a PDF page to PDF document
    PdfPage pdfPage = pdfDocument.AddPage();

    try
    {
        // Add a default document header
        AddHeader(pdfDocument, true);

        // Add a default document footer
        AddFooter(pdfDocument, true, true);

        // Create a HTML to PDF element to add to document
        HtmlToPdfElement htmlToPdfElement = new HtmlToPdfElement(0, 0, urlTextBox.Text);

        // Optionally set a delay before conversion to allow asynchonous scripts to finish
        htmlToPdfElement.ConversionDelay = 2;

        // Add HTML to PDF element to document
        pdfPage.AddElement(htmlToPdfElement);

        // Automatically close the external PDF documents after the final document is saved
        pdfDocument.AutoCloseAppendedDocs = true;

        // Insert an external PDF document in the beginning of the final PDF document
        string pdfFileBefore = Server.MapPath("~/DemoAppFiles/Input/PDF_Files/Merge_Before_Conversion.pdf");
        Document startExternalDocument = new Document(pdfFileBefore);
        pdfDocument.InsertDocument(0, startExternalDocument, addHeaderFooterInInsertedPdfCheckBox.Checked,
                        showHeaderInFirstPageCheckBox.Checked, showFooterInFirstPageCheckBox.Checked);

        // Append an external PDF document at the end of the final PDF document
        string pdfFileAfter = Server.MapPath("~/DemoAppFiles/Input/PDF_Files/Merge_After_Conversion.pdf");
        Document endExternalDocument = new Document(pdfFileAfter);
        pdfDocument.AppendDocument(endExternalDocument, addHeaderFooterInAppendedPdfCheckBox.Checked, true, true);

        // Save the PDF document in a memory buffer
        byte[] outPdfBuffer = pdfDocument.Save();

        // Send the PDF as response to browser

        // Set response content type
        Response.AddHeader("Content-Type", "application/pdf");

        // Instruct the browser to open the PDF file as an attachment or inline
        Response.AddHeader("Content-Disposition", String.Format("attachment; filename=Header_Footer_in_External_PDF.pdf; size={0}", outPdfBuffer.Length.ToString()));

        // Write the PDF document buffer to HTTP response
        Response.BinaryWrite(outPdfBuffer);

        // End the HTTP response and stop the current page processing
        Response.End();
    }
    finally
    {
        // Close the PDF document
        pdfDocument.Close();
    }
}

/// <summary>
/// Add a header to document
/// </summary>
/// <param name="pdfDocument">The PDF document object</param>
/// <param name="drawHeaderLine">A flag indicating if a line should be drawn at the bottom of the header</param>
private void AddHeader(Document pdfDocument, bool drawHeaderLine)
{
    string headerHtmlUrl = Server.MapPath("~/DemoAppFiles/Input/HTML_Files/Header_HTML.html");

    // Create the document footer template
    pdfDocument.AddHeaderTemplate(60);

    // Create a HTML element to be added in header
    HtmlToPdfElement headerHtml = new HtmlToPdfElement(headerHtmlUrl);

    // Set the HTML element to fit the container height
    headerHtml.FitHeight = true;

    // Add HTML element to header
    pdfDocument.Header.AddElement(headerHtml);

    if (drawHeaderLine)
    {
        float headerWidth = pdfDocument.Header.Width;
        float headerHeight = pdfDocument.Header.Height;

        // Create a line element for the bottom of the header
        LineElement headerLine = new LineElement(0, headerHeight - 1, headerWidth, headerHeight - 1);

        // Set line color
        headerLine.ForeColor = Color.Gray;

        // Add line element to the bottom of the header
        pdfDocument.Header.AddElement(headerLine);
    }
}

/// <summary>
/// Add a footer to document
/// </summary>
/// <param name="pdfDocument">The PDF document object</param>
/// <param name="addPageNumbers">A flag indicating if the page numbering is present in footer</param>
/// <param name="drawFooterLine">A flag indicating if a line should be drawn at the top of the footer</param>
private void AddFooter(Document pdfDocument, bool addPageNumbers, bool drawFooterLine)
{
    string footerHtmlUrl = Server.MapPath("~/DemoAppFiles/Input/HTML_Files/Footer_HTML.html");

    // Create the document footer template
    pdfDocument.AddFooterTemplate(60);

    // Set footer background color
    RectangleElement backColorRectangle = new RectangleElement(0, 0, pdfDocument.Footer.Width, pdfDocument.Footer.Height);
    backColorRectangle.BackColor = Color.WhiteSmoke;
    pdfDocument.Footer.AddElement(backColorRectangle);

    // Create a HTML element to be added in footer
    HtmlToPdfElement footerHtml = new HtmlToPdfElement(footerHtmlUrl);

    // Set the HTML element to fit the container height
    footerHtml.FitHeight = true;

    // Add HTML element to footer
    pdfDocument.Footer.AddElement(footerHtml);

    // Add page numbering
    if (addPageNumbers)
    {
        // Create a text element with page numbering place holders &p; and & P;
        TextElement footerText = new TextElement(0, 30, "Page &p; of &P;  ",
            new System.Drawing.Font(new System.Drawing.FontFamily("Times New Roman"), 10, System.Drawing.GraphicsUnit.Point));

        // Align the text at the right of the footer
        footerText.TextAlign = HorizontalTextAlign.Right;

        // Set page numbering text color
        footerText.ForeColor = Color.Navy;

        // Embed the text element font in PDF
        footerText.EmbedSysFont = true;

        // Add the text element to footer
        pdfDocument.Footer.AddElement(footerText);
    }

    if (drawFooterLine)
    {
        float footerWidth = pdfDocument.Footer.Width;

        // Create a line element for the top of the footer
        LineElement footerLine = new LineElement(0, 0, footerWidth, 0);

        // Set line color
        footerLine.ForeColor = Color.Gray;

        // Add line element to the bottom of the footer
        pdfDocument.Footer.AddElement(footerLine);
    }
}
0
EvoPdf 2 feb. 2016 a las 17:34