0

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

对或错,我已经将 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-net-embedded >> data >> temp

运行上述代码后,会出现一个包含渲染内容的 PDF,但它没有在响应中返回。

4

1 回答 1

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/

您也可以尝试在 prem jsreport 上安装 full 或自己执行呈现 Web 请求。这是与 .net 4 兼容的用于发出渲染请求的纯代码 https://gist.github.com/pofider/1897f8a1b6dab72a49b0

于 2015-05-06T08:01:28.310 回答