如何使用 itext 将 textarea 输入转换为 pdf 并使其可下载
How to convert textarea input to pdf using itext and make it downloadable
朋友们,
我已经实现了一个 jsp 表单,它接受 pdf 文件的标题、描述和内容等输入。当提交 jsp 表单时,将在名为 'pdfGenServlet.java' 的 servlet 的帮助下使用 itext 创建 pdf。
我的 jsp 表格是
<form action="pdfGenServlet" method="post" enctype="application/x-www-form-urlencoded">
<!-- input notes title-->
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" placeholder="Title of the notes" name="title">
</div>
</div>
<!-- input notes description-->
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" placeholder="Enter short description" name="description">
</div>
</div>
<div class="form-group">
<textarea name="content" id="myEditor"></textarea>
<div id="button-panel" class="panel panel-default">
<p>
<button type="submit" class="btn btn-primary "><span class="glyphicon glyphicon-plus"></span><strong> Create Note</strong></button>
<button class="btn btn-primary" type="reset"><strong>Reset</strong></button>
</p><!-- buttons -->
</div><!-- panel Button -->
</div>
</form>
servlet 'pdfGenServlet.java'
@WebServlet("/pdfGenServlet")
public class pdfGenServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// Get the text that will be added to the PDF
request.setCharacterEncoding("UTF-8");
//Font for using with itext
Font bfBold18 = new Font(FontFamily.TIMES_ROMAN, 18, Font.BOLD, new BaseColor(0, 0, 0));
Font bfBold12 = new Font(FontFamily.TIMES_ROMAN, 12, Font.BOLD, new BaseColor(0, 0, 0));
String title = request.getParameter("title");
String description = request.getParameter("description");
String notes_content = request.getParameter("content");
Date date = new Date();
System.out.println(title);
System.out.println(description);
System.out.println(notes_content);
System.out.println(date.toString());
if (description == null || description.trim().length() == 0) {
description = "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(title));
document.addCreationDate();
document.add(new Paragraph("TITLE: ", bfBold18));
document.add(new Paragraph(title,bfBold12));
document.add(new Paragraph("\n"));
document.add(new Paragraph(String.format("Created on: " + date.toString())));
document.add(new Paragraph("DESCRIPTION: ", bfBold18));
document.add(new Paragraph("\n"));
document.add(new Paragraph(notes_content,bfBold12));
// 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 content length
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());
}
}
}
上面的 servlet 和表单(提交后)的输出是 chrome 的 pdf 查看器嵌入到我显示 pdf 的页面中但是当我单击位于 [=35] 处的 pdfviewer 中的保存按钮时=]角。 pdf文件确实保存了,但显示失败。
正如您在内容 'example example ....' 中看到的那样,
标签来自 froala 编辑器应用的段落,这是我的文本区域输入。而不是应用该段落,它看起来像“
和
”。也请帮助解决这个问题。
如何使生成的pdf文件可下载到目录中,请帮忙。
要处理 HTML 标签,请使用以下库将 HTML/CSS 转换为 PDF 格式:
https://github.com/flyingsaucerproject/flyingsaucer
它在幕后使用 iText,将为您省去以编程方式构建文档的麻烦。
要下载 PDF 而不是在浏览器中显示,请执行以下操作:
response.setHeader("Content-disposition", "attachment; filename=" + name + ".pdf");
好的。所以我能够完全使用您的代码成功完成此操作,但进行了这两项更改。
- 将
method="get"
放在jsp 的<form>
标签中
- 在 servlet
中将 doPost
更改为 doGet
它应该会起作用,因为它对我也起作用。
如果有效请告诉我。
PDF 文档确实显示在 PdfViewer 中并且也成功保存了。
朋友们, 我已经实现了一个 jsp 表单,它接受 pdf 文件的标题、描述和内容等输入。当提交 jsp 表单时,将在名为 'pdfGenServlet.java' 的 servlet 的帮助下使用 itext 创建 pdf。
我的 jsp 表格是
<form action="pdfGenServlet" method="post" enctype="application/x-www-form-urlencoded">
<!-- input notes title-->
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" placeholder="Title of the notes" name="title">
</div>
</div>
<!-- input notes description-->
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" placeholder="Enter short description" name="description">
</div>
</div>
<div class="form-group">
<textarea name="content" id="myEditor"></textarea>
<div id="button-panel" class="panel panel-default">
<p>
<button type="submit" class="btn btn-primary "><span class="glyphicon glyphicon-plus"></span><strong> Create Note</strong></button>
<button class="btn btn-primary" type="reset"><strong>Reset</strong></button>
</p><!-- buttons -->
</div><!-- panel Button -->
</div>
</form>
servlet 'pdfGenServlet.java'
@WebServlet("/pdfGenServlet")
public class pdfGenServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// Get the text that will be added to the PDF
request.setCharacterEncoding("UTF-8");
//Font for using with itext
Font bfBold18 = new Font(FontFamily.TIMES_ROMAN, 18, Font.BOLD, new BaseColor(0, 0, 0));
Font bfBold12 = new Font(FontFamily.TIMES_ROMAN, 12, Font.BOLD, new BaseColor(0, 0, 0));
String title = request.getParameter("title");
String description = request.getParameter("description");
String notes_content = request.getParameter("content");
Date date = new Date();
System.out.println(title);
System.out.println(description);
System.out.println(notes_content);
System.out.println(date.toString());
if (description == null || description.trim().length() == 0) {
description = "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(title));
document.addCreationDate();
document.add(new Paragraph("TITLE: ", bfBold18));
document.add(new Paragraph(title,bfBold12));
document.add(new Paragraph("\n"));
document.add(new Paragraph(String.format("Created on: " + date.toString())));
document.add(new Paragraph("DESCRIPTION: ", bfBold18));
document.add(new Paragraph("\n"));
document.add(new Paragraph(notes_content,bfBold12));
// 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 content length
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());
}
}
}
上面的 servlet 和表单(提交后)的输出是 chrome 的 pdf 查看器嵌入到我显示 pdf 的页面中但是当我单击位于 [=35] 处的 pdfviewer 中的保存按钮时=]角。 pdf文件确实保存了,但显示失败。
正如您在内容 'example example ....' 中看到的那样,
标签来自 froala 编辑器应用的段落,这是我的文本区域输入。而不是应用该段落,它看起来像“
和
”。也请帮助解决这个问题。如何使生成的pdf文件可下载到目录中,请帮忙。
要处理 HTML 标签,请使用以下库将 HTML/CSS 转换为 PDF 格式:
https://github.com/flyingsaucerproject/flyingsaucer
它在幕后使用 iText,将为您省去以编程方式构建文档的麻烦。
要下载 PDF 而不是在浏览器中显示,请执行以下操作:
response.setHeader("Content-disposition", "attachment; filename=" + name + ".pdf");
好的。所以我能够完全使用您的代码成功完成此操作,但进行了这两项更改。
- 将
method="get"
放在jsp 的 - 在 servlet 中将
<form>
标签中
doPost
更改为 doGet
它应该会起作用,因为它对我也起作用。
如果有效请告诉我。
PDF 文档确实显示在 PdfViewer 中并且也成功保存了。