Analysis of PDF file generated by Java based on rich text

This article mainly introduces the process of generating PDF files by Java according to rich text. It is introduced in great detail through example code, which has certain reference value for everyone's study or work. Friends in need can refer to it

public class PdfUtil {

  /*
   * 生成pdf工具类
   * wmy 12:40 2019/8/9
   * @Param [guideBook,pdfPath]
   * @return java.lang.Boolean
   **/
  public static Boolean htmlToPdf(GuideBook guideBook,String pdfPath) {
    try {
      // 1.新建document
      Document document = new Document();
      // 2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
      //创建 PdfWriter 对象 第一个参数是对文档对象的引用,第二个参数是文件的实际名称,在该名称中还会给出其输出路径。
      PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream(pdfPath));
      // 3.打开文档
      document.open();
      //要解析的html
      //html转换成普通文字,方法如下:
      org.jsoup.nodes.Document contentDoc = Jsoup.parseBodyFragment(getHtml(guideBook.getTitle())+guideBook.getContent());
      org.jsoup.nodes.Document.OutputSettings outputSettings = new org.jsoup.nodes.Document.OutputSettings();
      outputSettings.Syntax(org.jsoup.nodes.Document.OutputSettings.Syntax.xml);
      contentDoc.outputSettings(outputSettings);
      String parsedHtml = contentDoc.outerHtml();
      //这儿的font-family不支持汉字,{font-family:仿宋} 是不可以的。
      InputStream cssIs = new ByteArrayInputStream("* {font-family: PingFang-SC-Medium.otf;}".getBytes("UTF-8"));
      //第四个参数是html中的css文件的输入流
      //第五个参数是字体提供者,使用系统默认支持的字体时,可以不传。
      XMLWorkerHelper.getInstance().parseXHtml(writer,document,new ByteArrayInputStream(parsedHtml.getBytes()),cssIs);
      // 5.关闭文档
      document.close();
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }
    return true;
  }

  /*
   * 下载文件
   * wmy 9:54 2019/8/12
   * @Param [request,response,inputStream,fileName]
   * @return void
   **/
  public static void download(HttpServletRequest request,HttpServletResponse response,InputStream inputStream,String fileName){
    bufferedoutputstream bos = null;
    try {
      // 定义输出缓冲 10k
      byte[] buffer = new byte[10240];
      //文件名称的处理
      // http://127.0.0.1:5002/guide-book/pdf?id=124
      fileName = fileName.replaceAll("[\\pP\\p{Punct}]","-").replace(" ","-").replaceAll("[-]+","-")+".pdf";
      String userAgent = request.getHeader("user-agent").toLowerCase();
      if (userAgent.contains("msie") || userAgent.contains("like gecko")) {
        fileName = URLEncoder.encode(fileName,"UTF-8");
      } else {
        fileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");
      }
      response.setCharacterEncoding("utf-8");
      response.setContentType("application/msword");
      response.setHeader("Content-Disposition","attachment; filename=" + fileName);
      bos = new bufferedoutputstream(response.getOutputStream());
      int bytesRead = 0;
      while ((bytesRead = inputStream.read(buffer)) != -1) {
        bos.write(buffer,bytesRead);
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      if (bos != null) {
        try {
          bos.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }

  /*
   * 获取html
   * wmy 10:39 2019/8/12
   * @Param [title]
   * @return java.lang.String
   **/
  public static String getHtml(String title){
    return "<h1 align=\"center\">"+title+"</h1>";
  }

}

Test results:

The above is the whole content of this article. I hope it will help you in your study, and I hope you will support us a lot.

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>