CSDN__FL
编程路上的蚂蚁
采纳率100%
2018-09-26 02:53

为什么使用itext生成的PDF文件只显示一页?

已采纳

工具用的:Adobe Acrobat Pro、idea、
查看生成的pdf文件工具是以下三个:2345看图王、WPS、谷歌浏览器

itext版本:5.4.3

 <dependencies>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.4.3</version>
        </dependency>
    </dependencies>

下面是代码和截图

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
/**
 * Created by wangpeng on 2018/02/01.
 */
public class pdf1 {
    // 利用模板生成pdf  
    public static void pdfout(Map<String,Object> o) {
        // 模板路径  
        String templatePath = "C:\\Users\\fu\\Desktop\\PDF\\运输合同.pdf";
        // 生成的新文件路径  
        String newPDFPath = "E:\\xzd\\src\\main\\resources\\pdf\\ht.pdf";

        PdfReader reader;
        FileOutputStream out;
        ByteArrayOutputStream bos;
        PdfStamper stamper;
        try {
            BaseFont bf = BaseFont.createFont("C:/Users/fu/Downloads/simsunttc/simsun.ttc,1",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
            Font FontChinese = new Font(bf, 5, Font.NORMAL);
            out = new FileOutputStream(newPDFPath);// 输出流
            reader = new PdfReader(templatePath);// 读取pdf模板  
            bos = new ByteArrayOutputStream();
            stamper = new PdfStamper(reader, bos);
            AcroFields form = stamper.getAcroFields();
            //文字类的内容处理
            Map<String,String> datemap = (Map<String,String>)o.get("datemap");
            form.addSubstitutionFont(bf);
            for(String key : datemap.keySet()){
                String value = datemap.get(key);
                form.setField(key,value);
            }
            stamper.setFormFlattening(true);// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑
            stamper.close();
            Document doc = new Document();
            Font font = new Font(bf, 32);
            PdfCopy copy = new PdfCopy(doc, out);
            doc.open();
            PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
            copy.addPage(importPage);
            doc.close();
            System.err.println("生成pdf合同完成~~~~~~~~~~");
        } catch (IOException e) {
            System.out.println(e);
        } catch (DocumentException e) {
            System.out.println(e);
        }


    }

    public static void main(String[] args) {
        Map<String,String> map = new HashMap();
        map.put("contractNo","HT18858585858558");///添加合同编号
        //添加公司名称
        map.put("firstParty","李四四");//甲
        //乙方公司名称
        map.put("secondParty","张三三");//乙
       //运费
        map.put("contracttotal","750.00");
        //结算方式
        map.put("isOnlinePay","现金");
        //结算周期
        map.put("settlementperiod","3");
        //参数列表
        map.put("yunshushixiao","30");
        map.put("lifang","3");
        map.put("dun","10");
        map.put("gongli","100");
        map.put("youxiaoqi","3");
        map.put("jiafangAddress","邯郸");
        map.put("yifangAddress","石家庄");
        map.put("jiafangPhone","123456");
        map.put("yifangPhone","654321");
        map.put("jiafangBake","1111111111111");
        map.put("yifangBake","3333333333333");

        Map<String,Object> o=new HashMap();
        o.put("datemap",map);
        pdfout(o);
    }
}

刚开始好像没啥问题,但是过了几天不知道发生了什么,突然就只能显示一页了。就是生成的pdf文件,用什么工具打开都是只显示一页。

这个是模板,有6页

这个是新生成的PDF文件,只有一页。

请大神赐教!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

相关推荐