如何将pdf转换为zip并获取标准对话框,询问用户他想在浏览器中显示PDF或以zip格式保存到文件系统?
public class PdfServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// Get the text that will be added to the PDF
String text = request.getParameter("text");
if (text == null || text.trim().length() == 0) {
text = "You didn't enter any text.";
}
// step 1
Document document = new Document();
// step 2
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document, baos);
// step 3
document.open();
// step 4
document.add(new Paragraph(String.format(
"You have submitted the following text using the %s method:",
request.getMethod())));
document.add(new Paragraph(text));
// step 5
document.close();
// setting some response headers
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
"must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
// setting the content type
response.setContentType("application/pdf");
// the contentlength
response.setContentLength(baos.size());
// write ByteArrayOutputStream to the ServletOutputStream
OutputStream os = response.getOutputStream();
baos.writeTo(os);
os.flush();
os.close();
}
catch(DocumentException e) {
throw new IOException(e.getMessage());
}
}
}
答案 0 :(得分:1)
再一次,我必须推荐你official documentation。出于某种原因,您似乎无法访问该网站上可用的资源。
看看HelloZip示例:
// creating a zip file with different PDF documents
ZipOutputStream zip =
new ZipOutputStream(new FileOutputStream(RESULT));
for (int i = 1; i <= 3; i++) {
ZipEntry entry = new ZipEntry("hello_" + i + ".pdf");
zip.putNextEntry(entry);
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, zip);
writer.setCloseStream(false);
// step 3
document.open();
// step 4
document.add(new Paragraph("Hello " + i));
// step 5
document.close();
zip.closeEntry();
}
zip.close();
在此示例中,我们创建了三个PDF文件,这些文件被添加到单个ZIP文件中。在您的情况下,您希望在内存中创建仅包含一个ZIP文件的ZIP文件。这很简单:
// Creating a ByteArrayOutputStream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// creating a zip outputstream stream
ZipOutputStream zip = new ZipOutputStream(baos);
// prepare entry
ZipEntry entry = new ZipEntry("my_document.pdf");
zip.putNextEntry(entry);
// create PDF
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, zip);
writer.setCloseStream(false);
document.open();
document.add(new Paragraph("Hello " + i));
document.close();
zip.closeEntry();
zip.close();
现在您可以将baos
中存储的字节发送到您的回复对象,如我对上一个问题的回答中所述:Why doesn'n create pdf-documents in java servlet?
OutputStream os = response.getOutputStream();
baos.writeTo(os);
这回答了问题的第一部分&#34;如何将pdf转换为zip&#34;我希望这次你能接受我的回答。我已经为你回答了一个问题,虽然你说我的回答对你有用,但你并没有接受我的回答。 (如果得到答案的人没有接受正确的答案,为什么有人想提供好的答案?)
至于问题的第二部分获取标准对话框询问用户他想在浏览器中显示PDF或以zip格式保存到文件系统,该部分是无法回答的。没有标准框来执行此操作。服务器获取请求并发送 响应。您只能发送一个响应,因此无法同时发送PDF以显示内联以及ZIP作为附件打开,以便用户可以选择一个对话框。
在向服务器发送请求之前,您需要为用户提供选择内联PDF,PDF作为atachment或ZIP文件中的PDF的选项。 没有什么标准!