首先生成pdf和正常请求接口一样,直接写~
· Controller层:
第一个注解:最顶层增加 @Controller 注解(控制器)不多讲了 直接加上。
第二个注解:最顶层增加 @CrossOrigin 注解此注解是为了浏览器请求的时候防止跨域,然后导致乱码,没有正常生成文件。
· 接口层面
@GetMapping("createMyPdf") @ApiOperation(value = "生成我的pdf", produces = "application/octet-stream") public void createMyPdf(@RequestParam @ApiParam(value = "自己的入参,自己拼") String name, HttpServletRequest request, HttpServletResponse response) throws IOException, DocumentException {
createMyPdfService.createMyPdf(name,response);
}
-------这一层结束了,往下走~~~
· Service层:
void createMyPdf(String name, HttpServletResponse response);
-------这一层结束了,往下走~~~
` Impl实现层:
重头戏来了,值得期待
@Override public void createMyPdf(String name, HttpServletResponse response) {
// 根据入参,查询自己所需的数据
// 下面开始组装pdf架子
//创建文档,纸张大小为A4 Document doc = new Document(PageSize.A4); Rectangle pageSize = new Rectangle(PageSize.A4.getHeight(), PageSize.A4.getWidth()); pageSize.rotate(); doc.setPageSize(pageSize); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { String fileName = response.encodeURL(new String((自己生成的pdf表.pdf").getBytes(StandardCharsets.UTF_8), "ISO8859-1")); doc.addTitle(fileName); doc.addAuthor("even"); doc.addCreationDate(); doc.addLanguage("中文"); PdfWriter pdfWriter = PdfWriter.getInstance(doc, outputStream); pdfWriter.setViewerPreferences(PdfWriter.HideToolbar); pdfWriter.setPageEvent(new PdfReportM1HeaderFooterCopy()); //pdfWriter.setPageEvent(new PageWatermarkEventHandler()); //中文处理 BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); // 则需创建字体 Font titleFont = new Font(bfChinese, 16, Font.BOLD); Font headFont = new Font(bfChinese, 14, Font.BOLD); Font textFont6 = new Font(bfChinese, 6, Font.NORMAL); Font textFont10 = new Font(bfChinese, 10, Font.NORMAL); Paragraph blankRow = new Paragraph(18f, " ", headFont);
//水印 pdfWriter.setPageEvent(new PageWatermarkEventHandler()); pdfWriter.setPageEvent(new PdfReportM1HeaderFooter());
// 打开文档对象 doc.open(); doc.add(blankRow); // 创建一个标题 doc.add(FundGeneralSituation