2015-05-04 101 views
0

我最近将jsreport设置为ASP.NET应用程序中的嵌入式服务器。 经过很多的努力,我已经能够生成html报告并使用.net jsreport.Client以最简单的形式将下面的代码返回给浏览器。jsreport .net客户端API返回空PDF

正确或错误我已将jsreport嵌入到现有的VB应用程序中,并将所有示例代码转换为C#(我不是C#人员)。

Imports System.Net 
Imports System.Web.Http 
Imports System.Net.Http 
Imports System.Data 
Imports System.Text.RegularExpressions 
Imports System.IO 
Imports System.Net.Http.Headers 
Imports jsreport.Client 
Imports jsreport.Client.Entities 

<ActionName("ProcessReport")> 
Public Async Function ProcessReport(ByVal reportID As Integer) As Threading.Tasks.Task(Of HttpResponseMessage) 

Dim _reportingService = EmbeddedServer.ReportingService 
Dim Report = Await _reportingService.RenderAsync(New RenderRequest() _ 
With {.template = New Template() _ 
    With { 
      .recipe = "html", 
      .content = "<h1>Some content</h1>" 
     } 
    } 
) 

Dim ReportContent As String = New StreamReader(Report.Content).ReadToEnd() 
Dim response = New HttpResponseMessage() 
response.StatusCode = HttpStatusCode.OK 
response.Content = New StringContent(ReportContent) 
response.Content.Headers.ContentType = New MediaTypeHeaderValue(Report.ContentType.MediaType) 
Return response 

End Function 

但我的问题是,我不能使用phantom-pdf配方生成PDF,如下所示。 ReportContent是一个PDF文档,但它是空的并且没有内容。

With { 
    .recipe = "phantom-pdf", 
    .content = "<h1>Some content</h1>" 
    } 

请注意,如果我期待在:

的App_Data >> jsreport净嵌入式>>数据>>临时

运行上面的代码后有已呈现一个PDF内容,但不会在回复中返回。

回答

1

而我不是一个VB家伙。

但是下面的代码保存正确的PDF文件到我

Dim fs As New FileStream("f:\\temp\\out.pdf", FileMode.Create) 
Report.Content.CopyTo(fs) 

下面的代码在asp.net mvc的返回正确的PDF

Return New FileStreamResult(Report.Content, "application/pdf") 

当我们正在与启用Visual Studio中显示PDF问题浏览器链接,也许你可以尝试禁用它 http://www.poconosystems.com/software-development/how-to-disable-browser-link-in-visual-studio-2013/

你也可以尝试安装完整在预先jsreport上或自己做渲染web请求。这是与.net 4兼容的明码,用于提出渲染请求 https://gist.github.com/pofider/1897f8a1b6dab72a49b0