我有一个Grails控制器操作,它调用一个服务,该服务将返回包含PDF的base64表示的XML。这是一个(缩写)示例示例。
<response status="Success"><messages/><values><pages>8</pages></values><xml/><files><pdf name="FitnessApplication" content-type="application/pdf"><![CDATA[JVBERi0xLjQKJeL ... </files></response>
在我们解析之后,我想在浏览器中显示该PDF。到目前为止,我能够解码字符串并使用render方法的file属性进行渲染。这可以正确地提供PDF作为下载,但我希望它在浏览器中显示(内联)而不是文件下载。
Map responseMap = new XmlParserHelper().parse( formsResponse.payload )
byte[] decoded = responseMap.files.pdf.decodeBase64()
render( file: decoded, fileName: "${document}.pdf", contentType: "application/pdf", )
我尝试将内容处置设置为渲染选项和标题映射,但似乎都没有。有谁知道我如何在浏览器中向用户提供此PDF?
答案 0 :(得分:1)
只需在回复中发送即可。但是你需要自己添加标题。例如。类似的东西:
response.contentType = "application/pdf"
response.contentLength = FileUtils.copyFile(pdfFile, response.outputStream)
答案 1 :(得分:0)
以 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();