2016-01-28 2 views
0

У меня есть файл pdf, который преобразован из html в EvoPdf HtmlToPdfConverter. Я прочитал байты файла с помощью класса документа evopdf и добавил к нему элемент нижнего колонтитула. после сохранения байтов - отображает встроенный webBrowser. нижний колонтитул с номером страницы не отображается.Создать нижний колонтитул с номером страницы, не отображаемым с использованием объекта документа EvoPdf

Это мой код:

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(); 
//... 

Если добавить элемент колонтитула в htmlToPdfConverter он отображается хорошо.

как я могу его отобразить?

Спасибо.

ответ

0

Я также столкнулся с такой же ситуацией. В принципе, я хотел добавить верхний и нижний колонтитулы в существующие PDF-файлы без использования htmltopdfconverter.

Вот решение с несколько настроек в существующий код:

//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(); 
+1

Спасибо, это работает! –

0

Чтобы применить верхние и нижние колонтитулы к существующим документам PDF, вам необходимо создать пустой объект Document, определить верхний и нижний колонтитулы, а затем добавить внешние документы PDF, используя метод Document.AppendDocument (Document doc, bool enableHeaderAndFooter, bool drawHeaderOnFirstPage, bool drawFooterOnFirstPage).

Ниже вы можете найти полный пример этого. Вы также можете найти онлайн демо на Add Header and Footer in External PDF

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. –

Смежные вопросы