如何使用 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");

好的。所以我能够完全使用您的代码成功完成此操作,但进行了这两项更改。

  1. method="get"放在jsp
  2. <form>标签中
  3. 在 servlet
  4. 中将 doPost 更改为 doGet

它应该会起作用,因为它对我也起作用。

如果有效请告诉我。

PDF 文档确实显示在 PdfViewer 中并且也成功保存了。