2016-03-31 2 views
2

Я пытаюсь сохранить html со страницы на pdf с помощью SelectPDF для VB.NET. Я перехожу с веб-страницы json с html для сохранения, получаю ее на стороне сервера. Похоже, конвертер конвертирует html успешно (без ошибок), но он ломается на спасительной части.selectPDF не сохраняет PDF из строки HTML

Javascript:

 var dataToSend = JSON.stringify({ 'html': $("#content").html() }); 
       $.ajax({ 
        url: "/leaderboards/pdf.aspx", 
        type: 'POST', 
        data: dataToSend, 
        contentType: "application/json; charset=utf-8", 
        success: function (data) { 
         $("#dialog").dialog("close"); 
         console.log(data); 
        }, 
        error: function (errorText) { 
         console.log(errorText); 
        } 
       }); 

pdf.aspx

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Try 
     Dim jsonString = New StreamReader(Request.InputStream).ReadToEnd() 
     Dim jsonObj As JObject = JObject.Parse(jsonString) 
     Dim html As String = jsonObj.Item("html") 


     If html.Length > 0 Then 
      html = "<html><body>" & html & "</body></html>" 


      ' read parameters from the webpage 
      Dim webPageWidth As Integer = 1024 
      Dim webPageHeight As Integer = 0 


      ' instantiate a html to pdf converter object 
      Dim converter As New HtmlToPdf() 

      ' create a new pdf document converting an url 
      Dim doc As PdfDocument = converter.ConvertHtmlString(html, Request.Url.AbsoluteUri) 
      ' save pdf document 

      ' !!! code breaks here with exception: Unable to evaluate expression.!!! 
      doc.Save(Response, False, "C:\MyProject\Pdf\Sample.pdf") 

      ' close pdf document 
      doc.Close() 
     Else 

      Response.Write("No Data") 
     End If 
    Catch ex As Exception 
     Response.Write("Error :" + ex.Message) 
    End Try 

End Sub 

Если изменить линию, которая разбивает код на

doc.Save("C:\MyProject\Pdf\Sample.pdf") 

У меня есть пустой PDF, сохраненные в этом месте. Я также попытался сохранить строку с HTML, но не были успешными например:

html = "<html><body>hello world</body></html>" 

Можно ли сохранить PDF с этой SelectPDF библиотеки из строки, которая представляет HTML? Если да, любой указатель, почему я получаю ошибку "doc.Save (Response, False," C: \ MyProject \ Pdf \ Sample.pdf ")"? Спасибо

ответ

2

Метод вызова doc.Save (Response, False, "C: \ MyProject \ Pdf \ Sample.pdf") не должен использоваться, если вам нужно просто сохранить документ pdf на диске. Цель doc.Save (Response, False, Sample.pdf) - отправить PDF в браузер и предложить имя загрузки (Sample.pdf - нет пути).

Чтобы сохранить PDF на диске, просто используйте doc.Save («C: \ MyProject \ Pdf \ Sample.pdf»).

Выполнить простой тест и убедитесь, что он работает отлично:

Dim html as String = "<html><body>hello world</body></html>" 
Dim doc As PdfDocument = converter.ConvertHtmlString(html, "") 
doc.Save("C:\MyProject\Pdf\Sample.pdf") 

После того как вы уверены, что преобразование работает отлично с простым HTML (не должен быть проблемой), проверьте, чтобы увидеть, что HTML и BaseUrl вы отправка в метод преобразования ConvertHtmlString. Запишите их в файл. Посмотрите, являются ли они тем, что вы ожидаете.

Поскольку вы используете JavaScript, что может занять некоторое время для загрузки, так что попробуйте ввести задержку перед преобразованием: http://selectpdf.com/docs/ConversionDelay.htm

Это будет что-то вроде этого:

' specify the number of seconds the conversion is delayed 
converter.Options.MinPageLoadTime = 2 
+0

Спасибо очень много! Добавляем convert.Options.MinPageLoadTime = 2! – kaplievabell

+0

Как преобразовать этот файл PDF в байтовый массив вместо сохранения в физический файл. Пожалуйста, помогите мне. –

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