我正在使用pdfbox api在我的项目中生成pdf文件,最初我只是将动态生成的pdf文件存储在我的服务器中,现在我正在尝试使用以下代码在浏览器中传输pdf文件
Ok.stream(Enumerator.outputStream { os =>
doc.writeToStream(os)//doc holds content of pdf file
os.close()
}).withHeaders(
CONTENT_TYPE -> "application/pdf",
CONTENT_DISPOSITION -> "attachment; filename=report.pdf"
)
我的回复是从
开始的%PDF-1.4
%����
1 0 obj
<<
/Type /Catalog
/Version /1.4
/Pages 2 0 R
>>
endobj
2 0 obj
希望看起来像pdf文件已生成,但在浏览器中没有加载..我不知道我缺少什么,我只是想加载pdf文件新标签
答案 0 :(得分:0)
也许枚举器未正确关闭。
试试这个:
Ok.stream(Enumerator.outputStream { os =>
doc.writeToStream(os)//doc holds content of pdf file
os.close()
} >>> Enumerator.eof).withHeaders(
CONTENT_TYPE -> "application/pdf",
CONTENT_DISPOSITION -> "attachment; filename=report.pdf"
)
答案 1 :(得分:0)
类似的东西:
val enumerator = Enumerator.outputStream { os =>
doc.writeToStream(os)
os.close
}
Ok.stream(enumerator >>> Enumerator.eof).as("application/pdf")
在我的情况下也很好用,所以我认为writeToStream有问题。你可以通过流式传输静态图像进行测试,在play框架中配置没有什么特别的东西
答案 2 :(得分:0)
尝试将您的CONTENT_DISPOSITION设置为“内联”:
Ok.stream(Enumerator.outputStream { os =>
doc.writeToStream(os)//doc holds content of pdf file
os.close()
}).withHeaders(
CONTENT_TYPE -> "application/pdf",
CONTENT_DISPOSITION -> "inline; filename=report.pdf"
)
看看它是否有所作为。
即使特定行为取决于浏览器,也应如此。
您可以找到有关Content-Disposition标头here的更多详细信息。
答案 3 :(得分:0)