2013-03-14 169 views
3

我有一个问题,使用Winnovative HTML到PDF转换器v8.0.0.0,我的pdf页码不正确。 这是我所做的。 我设置一个页脚在我的转换器Winnovative Html to pdf转换器页码不正确附加文件

pdfConverter.PdfFooterOptions.AddTextArea(new TextArea(500, 0, 50, "&p;/&P;", new Font(new FontFamily("Arial"), 8))); 

然后我从一个URL创建一个文档

pdfDocument = pdfConverter.GetPdfDocumentObjectFromUrl(FirstUrl); 

然后我追加的文件从一个url

pdfDocument.AppendDocument(pdfConverter.GetPdfDocumentObjectFromUrl(SecondUrl)); 

所有页面从产生第一个url包含正确的页码,但附加文档中的页码似乎没有重新计算

例如: FirstUrl导致3页,第二页导致2页。 页码

1/5 
2/5 
3/5 
1/2 
2/2 

我想他们是这样的:

1/5 
2/5 
3/5 
4/5 
5/5 

我也尽量不喜欢这个转换后的页脚添加到转换器,但到pdfDocument:

PdfFont pdfFont = pdfDocument.Fonts.Add(new Font(new FontFamily("Arial"), 8)); 
    string strPageNum = "&p;/&P;"; 
    TextElement footerPageNumber = new TextElement(500, 0, 50, strPageNum, pdfFont); 
    pdfDocument.FooterTemplate.AddElement(footerPageNumber); 

但在这种情况下。只有来自第一个Url的页面才会获取页码,无法在附加文档的页面上看到。

感谢您的帮助。

回答

0

遇到与另一个项目相同的问题。我终于找到了从许多Url创建PDF的正确方法。

我仍然设置页脚像这样的文件:

pdfConverter.PdfFooterOptions.AddTextArea(new TextArea(500, 0, 50, "&p;/&P;", new Font(new FontFamily("Arial"), 8))); 

然后我从一个URL创建一个文档,就像之前:

​​

代替,但附加其他PDF我得到的HtmlToPdfElement中的第二个url,如下所示:

HtmlToPdfElement pdfBody = new HtmlToPdfElement(secoundUrl); 

并最终将其添加到PDF文档,使用ew页面。

PdfPage newPage = pdfDocument.Pages.AddNewPage(); 
newPage.AddElement(pdfBody); 
-1

在PDF转换的最新版本Winovative HTML的,你现在可以添加页眉和页脚appeneded或前置到转换的结果外PDF文档。您可以在Add Header and Footer In External PDF Documents demo

与C#源代码,一个完整的例子下面是相关代码从演示应用程序复制:

protected void convertToPdfButton_Click(object sender, EventArgs e) 
{ 
    // Create a HTML to PDF converter object with default settings 
    HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(); 

    // Set the PDF file to be inserted before conversion result 
    string pdfFileBefore = Server.MapPath("~/DemoAppFiles/Input/PDF_Files/Merge_Before_Conversion.pdf"); 
    htmlToPdfConverter.PdfDocumentOptions.AddStartDocument(pdfFileBefore, addHeaderFooterInInsertedPdfCheckBox.Checked, 
         showHeaderInFirstPageCheckBox.Checked, showFooterInFirstPageCheckBox.Checked); 

    // Set the PDF file to be added after conversion result 
    string pdfFileAfter = Server.MapPath("~/DemoAppFiles/Input/PDF_Files/Merge_After_Conversion.pdf"); 
    htmlToPdfConverter.PdfDocumentOptions.AddEndDocument(pdfFileAfter, addHeaderFooterInAppendedPdfCheckBox.Checked, true, true); 

    // Enable header in the generated PDF document 
    htmlToPdfConverter.PdfDocumentOptions.ShowHeader = true; 

    // Draw header elements 
    if (htmlToPdfConverter.PdfDocumentOptions.ShowHeader) 
     DrawHeader(htmlToPdfConverter, true); 

    // Enable footer in the generated PDF document 
    htmlToPdfConverter.PdfDocumentOptions.ShowFooter = true; 

    // Draw footer elements 
    if (htmlToPdfConverter.PdfDocumentOptions.ShowFooter) 
     DrawFooter(htmlToPdfConverter, true, true); 

    string url = urlTextBox.Text; 

    // Convert the HTML page to a PDF document and add the external PDF documents 
    byte[] outPdfBuffer = htmlToPdfConverter.ConvertUrl(url); 

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

/// <summary> 
/// Draw the header elements 
/// </summary> 
/// <param name="htmlToPdfConverter">The HTML to PDF Converter object</param> 
/// <param name="drawHeaderLine">A flag indicating if a line should be drawn at the bottom of the header</param> 
private void DrawHeader(HtmlToPdfConverter htmlToPdfConverter, bool drawHeaderLine) 
{ 
    string headerHtmlUrl = Server.MapPath("~/DemoAppFiles/Input/HTML_Files/Header_HTML.html"); 

    // Set the header height in points 
    htmlToPdfConverter.PdfHeaderOptions.HeaderHeight = 60; 

    // Set header background color 
    htmlToPdfConverter.PdfHeaderOptions.HeaderBackColor = Color.White; 

    // 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 
    htmlToPdfConverter.PdfHeaderOptions.AddElement(headerHtml); 

    if (drawHeaderLine) 
    { 
     // Calculate the header width based on PDF page size and margins 
     float headerWidth = htmlToPdfConverter.PdfDocumentOptions.PdfPageSize.Width - 
        htmlToPdfConverter.PdfDocumentOptions.LeftMargin - htmlToPdfConverter.PdfDocumentOptions.RightMargin; 

     // Calculate header height 
     float headerHeight = htmlToPdfConverter.PdfHeaderOptions.HeaderHeight; 

     // 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 
     htmlToPdfConverter.PdfHeaderOptions.AddElement(headerLine); 
    } 
} 

/// <summary> 
/// Draw the footer elements 
/// </summary> 
/// <param name="htmlToPdfConverter">The HTML to PDF Converter 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 DrawFooter(HtmlToPdfConverter htmlToPdfConverter, bool addPageNumbers, bool drawFooterLine) 
{ 
    string footerHtmlUrl = Server.MapPath("~/DemoAppFiles/Input/HTML_Files/Footer_HTML.html"); 

    // Set the footer height in points 
    htmlToPdfConverter.PdfFooterOptions.FooterHeight = 60; 

    // Set footer background color 
    htmlToPdfConverter.PdfFooterOptions.FooterBackColor = Color.WhiteSmoke; 

    // 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 
    htmlToPdfConverter.PdfFooterOptions.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 
     htmlToPdfConverter.PdfFooterOptions.AddElement(footerText); 
    } 

    if (drawFooterLine) 
    { 
     // Calculate the footer width based on PDF page size and margins 
     float footerWidth = htmlToPdfConverter.PdfDocumentOptions.PdfPageSize.Width - 
        htmlToPdfConverter.PdfDocumentOptions.LeftMargin - htmlToPdfConverter.PdfDocumentOptions.RightMargin; 

     // 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 
     htmlToPdfConverter.PdfFooterOptions.AddElement(footerLine); 
    } 
}