java根据模板生成PDF

首先你的制作一个pdf模板:

1.先用word做出模板界面

画单元格的时候需要考虑值的长度,像这里的状态可能会很长

2.文件另存为pdf格式文件

使用福昕PDF 打开,添加文本,以及需要添加值的地方,设置文本域,这个就是属性值

保存以后会生成PDF封面,需要去掉。

在线分封PDF

https://smallpdf.com/cn/result#r=1d5e4fbd858366eb5e4abe33a71ba648&t=split

代码

 @GetMapping("/downOrderDashboard/{orderNo}")
    @ApiAuthority
    public ResponseEntity<byte[]> downOrderDashboard(@PathVariable String orderNo,
                                                     HttpServletResponse response,
                                                     HttpServletRequest request) throws Exception {
        ByteArrayOutputStream byteArrayOutputStream = serialNumberService.downOrderDashboard(orderNo, request);
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentDispositionFormData("attachment", java.net.URLEncoder.encode("orderDB.pdf", "UTF-8"));
        httpHeaders.setContentType(MediaType.parseMediaType("application/pdf"));

        byte[] bytes = byteArrayOutputStream.toByteArray();
        return new ResponseEntity<byte[]>(bytes, httpHeaders,
            HttpStatus.CREATED);

        /*response.setContentType("application/pdf");
        response.setContentLength(byteArrayOutputStream.size());
        ServletOutputStream out = response.getOutputStream();
        byteArrayOutputStream.writeTo(out);
        out.flush();*/
    }
public ByteArrayOutputStream downOrderDashboard(String orderNo, HttpServletRequest request) {
        log.info("orderNo=" + orderNo);
        ByteArrayOutputStream outputstream = null;
        OrderDBDTO orderDashBoard = getOrderDashBoard(orderNo);
        log.info("orderDashBoard" + orderDashBoard.toString());
        try {
            //InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("classpath:pdf/orderDB.pdf");

            ClassPathResource classPathResource = new ClassPathResource("pdf/orderDB.pdf");
            InputStream inputStream =classPathResource.getInputStream();
            //File file = ResourceUtils.getFile("classpath:pdf/orderDB.pdf");
            //String currentPath = request.getServletContext().getRealPath("\\");
            //String TemplatePDF = currentPath + "resources\\"+ "pdf\\" + "orderDB.pdf";
            log.info("inputStream"+inputStream);
            PdfReader reader = new PdfReader(inputStream);
            //new PdfReader(file.getAbsolutePath());
            outputstream = new ByteArrayOutputStream(4096);
            PdfStamper stamp = new PdfStamper(reader, outputstream);
            PdfContentByte under = stamp.getUnderContent(1); /*使用中文字体*/
            BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
           // Font FontChinese = new Font(bf, 10, Font.NORMAL);
            AcroFields form = stamp.getAcroFields();
            form.addSubstitutionFont(bf);  //简宋体
            form.setField("productionOrderNo", orderDashBoard.getProductionOrderNo());

            OrderStatusType[] values = OrderStatusType.values();
            for (OrderStatusType value : values) {
                if(orderDashBoard.getStatus().equals(value.getResourceKey())){
                    form.setField("state",value.getResourceKey() );
                }
            }

            form.setField("batchNo", orderDashBoard.getBatchNo());
            form.setField("lineName", orderDashBoard.getLineName());
            form.setField("productionDate", orderDashBoard.getProductionDate().format(DateTimeFormatter.ISO_LOCAL_DATE));
            form.setField("expiryDate", orderDashBoard.getExpiryDate().format(DateTimeFormatter.ISO_LOCAL_DATE));
            List<OrderSn> orderSnList = orderDashBoard.getOrderSnList();
            for (int i = 0; i < orderSnList.size(); i++) {
                form.setField("aggregationLevel"+(i+1), orderSnList.get(i).getAggreLevelName());
                form.setField("productCount"+(i+1), orderSnList.get(i).getProductCount()+"");
                form.setField("breakCount"+(i+1), orderSnList.get(i).getBreakCount()+"");
                form.setField("sampleCount"+(i+1), orderSnList.get(i).getSampleCount()+"");
            }

            stamp.setFormFlattening(true);
            stamp.close();
            reader.close();
        } catch (DocumentException e1) {
            log.info(e1.getMessage());
            e1.printStackTrace();
        } catch (IOException e2) {
            log.info(e2.getMessage());
            e2.printStackTrace();
        }

        return outputstream;
    }

原文地址:https://www.cnblogs.com/lyon91/p/11184961.html

时间: 2024-08-30 10:43:19

java根据模板生成PDF的相关文章

java根据模板导出pdf

在网上看了一些Java生成pdf文件的,写的有点乱,有的不支持写入中文字体,有的不支持模板,有的只是随便把数据放里面生成文件,完全不考虑数据怎样放置的以及以后的维护性,想想还是自己总结一个完全版的导出pdf的工具类吧,总结一下网上的方法,加上自己的完善.具有以下特点: 综合特点: 一对一,点对点的给对应的地方写值,比如模板里面放了个name标识,在程序里把"张三"赋给name,那么输出的pdf里面name的地方就变成了张三,准确方便快捷 支持中文,可以使用自己下载的字体. 支持图片:图

java根据模板生成word文件

原文:java根据模板生成word文件 源代码下载地址:http://www.zuidaima.com/share/1550463664884736.htm AVA生成word模板程序步骤 1. 将freemarker-2.3.13.jar复制到项目\WEB-INF\lib目录下 2. 编辑模板文件 (1) 将DOC文件另存为xml文件,将xml文件在eclipse环境下打开,右键选"源"→"格式".此处注意xml文件属性是UTF-8. (2) 将xml文件中需要替

java itextpdf使用HTML模板生成pdf文件,并设置table

我们这里是maven项目,导入相应jar包: <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency> <dependency> <groupId>com.itextpdf</groupId>

Java iText使用PDF模板生成PDF文档

我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档. 第一步:下载AdobeAcrobat DC,必须使用这个来制作from域. 第二步:使用AdobeAcrobat DC将Word导成PDF文档. 第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便: 添加水印的方法:使用AdobeAcrobat DC打开PDF文档,"工具"->"编辑PDF"->&qu

【Java】itext根据模板生成pdf(包括图片和表格)

1.导入需要的jar包:itext-asian-5.2.0.jar itextpdf-5.5.11.jar. 2.新建word文档,创建模板,将文件另存为pdf,并用Adobe Acrobat DC打开编辑,点击右侧[准备表单]后点击[开始] 3.在需要插入数据的空白处,右击,点击[文本域],将文本域拖放到你想要的位置,更改域名称为你传入的变量名. 4.保存文件,将文件放到项目中.生成pdf代码如下: 1 public static void creatPdf(Map<String, Objec

java调用wkhtmltopdf生成pdf文件,美观,省事

最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果, 需要自己调整好多东西,样式,字体等等,好麻烦,毕竟博主这么懒的人,哈哈.-------jstarseven 言归正传: java生成pdf文件,方式很多,以上提到的哪几种方式具体可以参考这篇文章<讲解很详细>:http://blog.csdn.net/ouyhong123/article/details/2640

itextsharp利用模板生成pdf文件笔记

iTextSharp是一款开源的PDF操作类库,使用它可以快速的创建PDF文件. 中文参考网站:http://hardrock.cnblogs.com/ http://pdfhome.hope.com.cn/Article.aspx?CID=bf51a5b6-78a5-4fa3-9310-16e04aee8c78&AID=f5fe52dd-8419-4baa-ab1c-ea3f26952132 英文参考网站:http://itext.ugent.be/library/ ·  技术文章(http:

Java 使用itext生成pdf以及下载

使用方法: 1.需要两个jar包: iText-5.0.6.jar    //必须使用该版本,否则缺少相关的方法 TextAsian.jar //是为了文档中正常显示中文所必须引用的包 TextAsian.jar使用时并不是单纯的引入就可以了,还需要进一步处理该jar包,否则无法显示 (无奈当时没有保存那个解决方法的链接,所以以后要用正确的包的话,就去毕设项目下找该包) 2以下是一个完整的例子. 一.要生成pdf的jsp页面 <%@ page language="java" im

java使用iText生成pdf表格

转载地址:http://www.open-open.com/code/view/1424011530749 首先需要你自己下载itext相关的jar包并添加引用,或者在maven中添加如下引用配置: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <dependency>     <groupId>com.lowagie</groupId>     <artifactId>iText</artifactId>