@PostMapping("/test") public void test(@RequestBody Map<String,Object> map) throws TemplateException, IOException, DocumentException { OutputStream os=new FileOutputStream("D:\\1.pdf"); String path = map.get("path").toString(); BigDecimal serviceAmount=new BigDecimal(map.get("serviceAmount").toString()); map.put("serviceAmount",serviceAmount.divide(new BigDecimal("10000")).toString()); String freeMarkerContent = freeMarkerServiceI.getFreeMarkerContent(path, map); freeMarkerContent=freeMarkerContent.replaceAll(" "," "); StringBuilder html = new StringBuilder(); html.append(freeMarkerContent); ITextRenderer renderer = new ITextRenderer(); renderer.getSharedContext().getTextRenderer().setSmoothingThreshold(0); renderer.setDocumentFromString(html.toString()); // step 3 解决中文支持 ITextFontResolver fontResolver = renderer.getFontResolver(); fontResolver.addFont(PDFUtils.getFontPath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED); renderer.layout(); renderer.createPDF(os); renderer.finishPDF(); }
此处我给的解决方案是:map入参中所有的参数全部转换成String 类型就不会被freemaker识别成数值了,如果需要保留小数位的自己保留后转String,到此就解决了