【问题标题】:HTML to PDF Rocket - PDF GenerationHTML to PDF Rocket - PDF 生成
【发布时间】:2015-07-17 04:18:36
【问题描述】:

我正在尝试从包含图像和 css 文件(如“bootstrap”)的 azure 网站将 HTML 转换为 PDF。

我的代码(与本案例的教程相同 - MVC c# - http://www.html2pdfrocket.com/Examples/CSharp

string apiKey = "MY KEY";
string value = html; // SOME HTML IN STRING FORMAT

using (var client = new WebClient())
            {
                // Build the conversion options
                NameValueCollection options = new NameValueCollection();
                options.Add("apikey", apiKey);
                options.Add("value", value);

                // Call the API convert to an image
                byte[] result = client.UploadValues("http://api.html2pdfrocket.com/pdf", options);

                // Save the image to disk
                System.IO.File.WriteAllBytes(Server.MapPath("~/PDF/somepdf.pdf"), result);
            }

代码正在生成 pdf 文件,但没有 css 样式和图像。

我该如何解决这个问题?

html真的很简单,只有一张表格,一张图片和一个css文件“bootstrap”

我要在html中显示的图片是这样放置的:

 <img id="image" src="~/Images/someimage.jpg" >

CSS 文件是:

<link href="~/Scripts/bootstrap/dist/css/bootstrap.css" rel="stylesheet" />

我也有一些这样的 CSS 类:

#header {
    padding: 0;
    margin: 0;
    float: left;
    position: relative;
    min-height: 1px;
    font-size: 12px;
}

我已经尝试放置图像和“引导程序”的完整路径,但它仍然无法正常工作。

【问题讨论】:

  • 你最终做了什么来解决这个问题?我目前有同样的问题。
  • 你好@emragins,好吧,我最终使用了另一个解决方案 - NReco:nrecosite.com/pdf_generator_net.aspx 他们有一个免费版本,它在我的项目中运行良好。
  • 嗯...我试过了,但它似乎不适用于 azure 网站。也许我得再看看它。 (但我越来越多地认为我只需要切换到虚拟机——问题已解决。)感谢您的快速回复:)
  • 我的临时解决方案是使用引导 CDN 并内联任何其他 css。我正在用 razor 构建 html,并且只是制作了一个部分视图,我可以将其包含在我的常见“打印”css 中。将图像嵌入为 base64 字符串也可以...
  • 是的,如果您使用 Azure,NReco 会出现问题,我必须创建一个 Web 角色才能使其正常工作

标签: html css image azure pdf-generation


【解决方案1】:

您只需将所有链接更改为完整地址,例如

<link href="https://www.example.com/Scripts/bootstrap/dist/css/bootstrap.css" rel="stylesheet" />

或者创建一个 html 页面并将这个 html 页面的 url 发送到 API。

【讨论】:

    【解决方案2】:

    对于 Azure 网站,您可以使用 EvoPdf 的 HTML to PDF for Azure 解决方案。您可以从网站下载的软件包包含一个演示 Azure 网站。演示源代码如下:

    protected void convertToPdfButton_Click(object sender, EventArgs e)
    {
        // Get the server IP and port
        String serverIP = textBoxServerIP.Text;
        uint serverPort = uint.Parse(textBoxServerPort.Text);
    
        // Create a HTML to PDF converter object with default settings
        HtmlToPdfConverter htmlToPdfConverter = new HtmlToPdfConverter(serverIP, serverPort);
    
        // Set optional service password
        if (textBoxServicePassword.Text.Length > 0)
            htmlToPdfConverter.ServicePassword = textBoxServicePassword.Text;
    
        // Set HTML Viewer width in pixels which is the equivalent in converter of the browser window width
        htmlToPdfConverter.HtmlViewerWidth = int.Parse(htmlViewerWidthTextBox.Text);
    
        // Set HTML viewer height in pixels to convert the top part of a HTML page 
        // Leave it not set to convert the entire HTML
        if (htmlViewerHeightTextBox.Text.Length > 0)
            htmlToPdfConverter.HtmlViewerHeight = int.Parse(htmlViewerHeightTextBox.Text);
    
        // Set PDF page size which can be a predefined size like A4 or a custom size in points 
        // Leave it not set to have a default A4 PDF page
        htmlToPdfConverter.PdfDocumentOptions.PdfPageSize = SelectedPdfPageSize();
    
        // Set PDF page orientation to Portrait or Landscape
        // Leave it not set to have a default Portrait orientation for PDF page
        htmlToPdfConverter.PdfDocumentOptions.PdfPageOrientation = SelectedPdfPageOrientation();
    
        // Set the maximum time in seconds to wait for HTML page to be loaded 
        // Leave it not set for a default 60 seconds maximum wait time
        htmlToPdfConverter.NavigationTimeout = int.Parse(navigationTimeoutTextBox.Text);
    
        // Set an adddional delay in seconds to wait for JavaScript or AJAX calls after page load completed
        // Set this property to 0 if you don't need to wait for such asynchcronous operations to finish
        if (conversionDelayTextBox.Text.Length > 0)
            htmlToPdfConverter.ConversionDelay = int.Parse(conversionDelayTextBox.Text);
    
        // The buffer to receive the generated PDF document
        byte[] outPdfBuffer = null;
    
        if (convertUrlRadioButton.Checked)
        {
            string url = urlTextBox.Text;
    
            // Convert the HTML page given by an URL to a PDF document in a memory buffer
            outPdfBuffer = htmlToPdfConverter.ConvertUrl(url);
        }
        else
        {
            string htmlString = htmlStringTextBox.Text;
            string baseUrl = baseUrlTextBox.Text;
    
            // Convert a HTML string with a base URL to a PDF document in a memory buffer
            outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlString, baseUrl);
        }
    
        // 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("{0}; filename=Getting_Started.pdf; size={1}",
            openInlineCheckBox.Checked ? "inline" : "attachment", 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();
    }
    

    【讨论】:

    • 请在答案正文中声明您与 EvoPdf 的隶属关系。
    猜你喜欢
    • 2022-10-05
    • 1970-01-01
    • 2019-04-16
    • 2011-12-31
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多