0

I need to generate a pdf report from a URL in our application. Is it possible to have both Landscape and Portrait pages in the same pdf document that is generated?

I'd like to have the bar charts as Portrait, and the Tables as Landscape (horizontal). Looking at the EVO doc's I don't know if this is possible.

I know that you can define either Landscape or Portrait with

htmlToPdfConverter.PdfDocumentOptions.PdfPageOrientation

But this is applied to the whole document. I'd like something I could potentially define the html that would tell EVO to print this section as Landscape.

4

1 回答 1

0

您可以在同一个 PDF 中包含纵向和横向部分。为此,您可以创建一个空白 Document 对象并将具有所需方向的 PDF 页面添加到该文档。在新创建的 PDF 页面上,您可以添加一个 HtmlToPdfElement 对象来呈现 HTML,并自动添加与您最初创建的 PDF 页面具有相同方向的 PDF 页面。可以对不同方向的 PDF 页面重复该过程。Merge Multiple HTML Pages into a Single PDF demo中有一个带有 C# 代码的实时示例,用于此方法。代码示例也复制如下:

protected void convertToPdfButton_Click(object sender, EventArgs e)
{
    // Create the PDF document where to add the HTML documents
    Document pdfDocument = new Document();

    // Create a PDF page where to add the first HTML
    PdfPage firstPdfPage = pdfDocument.AddPage();

    try
    {
        // Create the first HTML to PDF element
        HtmlToPdfElement firstHtml = new HtmlToPdfElement(0, 0, firstUrlTextBox.Text);

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

        // Add the first HTML to PDF document
        AddElementResult firstAddResult = firstPdfPage.AddElement(firstHtml);

        PdfPage secondPdfPage = null;
        PointF secondHtmlLocation = Point.Empty;

        if (startNewPageCheckBox.Checked)
        {
            // Create a PDF page where to add the second HTML
            secondPdfPage = pdfDocument.AddPage();
            secondHtmlLocation = PointF.Empty;
        }
        else
        {
            // Add the second HTML on the PDF page where the first HTML ended
            secondPdfPage = firstAddResult.EndPdfPage;
            secondHtmlLocation = new PointF(firstAddResult.EndPageBounds.Left, firstAddResult.EndPageBounds.Bottom);
        }

        // Create the second HTML to PDF element
        HtmlToPdfElement secondHtml = new HtmlToPdfElement(secondHtmlLocation.X, secondHtmlLocation.Y, secondUrlTextBox.Text);

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

        // Add the second HTML to PDF document
        secondPdfPage.AddElement(secondHtml);

        // 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=Merge_Multipe_HTML.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();
    }
}
于 2019-11-16T12:42:53.810 回答