Grails Base64 到 PDF - 内联渲染 PDF
Grails Base64 to PDF - render a PDF inline
我有一个 Grails 控制器操作调用一个服务,该服务将 return XML 包含 PDF 的 base64 表示。这是一个(缩写的)示例示例。
<response status="Success"><messages/><values><pages>8</pages></values><xml/><files><pdf name="FitnessApplication" content-type="application/pdf"><![CDATA[JVBERi0xLjQKJeL ... </files></response>
在我们解析出来之后,我想在浏览器中显示该 PDF。到目前为止,我能够解码字符串并使用渲染方法的文件属性渲染它。这将 PDF 正确地作为下载提供,但我希望它显示在浏览器中(内联)而不是作为文件下载。
Map responseMap = new XmlParserHelper().parse( formsResponse.payload )
byte[] decoded = responseMap.files.pdf.decodeBase64()
render( file: decoded, fileName: "${document}.pdf", contentType: "application/pdf", )
我尝试将内容处置设置为渲染选项和 header 地图中的选项,但似乎都没有成功。有谁知道我如何在浏览器中将此 PDF 提供给用户?
只需在回复中发送即可。但是你需要自己添加 headers 。例如。类似于:
response.contentType = "application/pdf"
response.contentLength = FileUtils.copyFile(pdfFile, response.outputStream)
以 cfrick 所说的为基础,这是我采用的最终解决方案。
// response data
byte[] pdfData = responseMap.files.pdf.decodeBase64()
response.contentType = "application/pdf"
response.setHeader("Content-disposition", "inline; filename='dan.pdf'")
// write to output
OutputStream output = response.outputStream
output.write(pdfData);
output.close();
我有一个 Grails 控制器操作调用一个服务,该服务将 return XML 包含 PDF 的 base64 表示。这是一个(缩写的)示例示例。
<response status="Success"><messages/><values><pages>8</pages></values><xml/><files><pdf name="FitnessApplication" content-type="application/pdf"><![CDATA[JVBERi0xLjQKJeL ... </files></response>
在我们解析出来之后,我想在浏览器中显示该 PDF。到目前为止,我能够解码字符串并使用渲染方法的文件属性渲染它。这将 PDF 正确地作为下载提供,但我希望它显示在浏览器中(内联)而不是作为文件下载。
Map responseMap = new XmlParserHelper().parse( formsResponse.payload )
byte[] decoded = responseMap.files.pdf.decodeBase64()
render( file: decoded, fileName: "${document}.pdf", contentType: "application/pdf", )
我尝试将内容处置设置为渲染选项和 header 地图中的选项,但似乎都没有成功。有谁知道我如何在浏览器中将此 PDF 提供给用户?
只需在回复中发送即可。但是你需要自己添加 headers 。例如。类似于:
response.contentType = "application/pdf"
response.contentLength = FileUtils.copyFile(pdfFile, response.outputStream)
以 cfrick 所说的为基础,这是我采用的最终解决方案。
// response data
byte[] pdfData = responseMap.files.pdf.decodeBase64()
response.contentType = "application/pdf"
response.setHeader("Content-disposition", "inline; filename='dan.pdf'")
// write to output
OutputStream output = response.outputStream
output.write(pdfData);
output.close();