2015-05-06 5 views
1

Я пытаюсь преобразовать HTML в PDF с лазурного сайта, который содержит изображения и файлы css, такие как «bootstrap».HTML to PDF Rocket - PDF Generation

Моего код (такое же, как они учебник для этих случаев - 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 «самонастройки»

изображение, которое я хочу показать в 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; 
} 

Я уже попытался разместить полный путь изображения и «начальной загрузки», но он все еще не работает.

+0

Что вы в итоге решили решить? У меня в настоящее время есть тот же вопрос. – emragins

+0

Hello @emragins, Ну, я закончил использовать другое решение - NReco: http://www.nrecosite.com/pdf_generator_net.aspx У них есть бесплатная версия, и она очень хорошо работает на моих проектах. –

+0

Хм ... Я пробовал это, и он не работал на лазурных сайтах. Возможно, мне придется снова взглянуть на это. (Но все больше и больше я думаю, что мне просто нужно переключиться на VM - проблема решена.) Спасибо за быстрый ответ :) – emragins

ответ

0

Для сайтов Azure вы можете использовать решение HTML to PDF for Azure от EvoPdf. Пакет, который вы можете скачать с веб-сайта, содержит демонстрационный сайт 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(); 
} 
2

Вам только нужно изменить все ссылки на полный адрес, как

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

Или создать HTML-страницу и отправить URL этой HTML страницы в API.