后端使用 itextpdf 对pdf进行分片

当我们需要传输较大的pdf文件时,将文件整个传给前端会导致pdf加载时间过长,影响用户体验。这是就需要对pdf进行分片后在进行传输,减少文件的打开时间。
使用itextpdf实现截取pdf文档第几页到第几页

  1. 使用itextpdf ,先导入依赖
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13</version>
</dependency>
  1. 对指定pdf进行分页,返回文件流
//对pdf进行分页
@ResponseBody
@CrossOrigin
@GetMapping("api/download")
public void pdf( HttpServletResponse response, HttpServletRequest request) throws IOException, DocumentException {
     //获取开始页和结束页
    String startPage = request.getHeader("startPage");
    String endPage = request.getHeader("endPage");
    String page=startPage+"-"+endPage;
    //获取文件路径
    String path="test.pdf";
    // 读取pdf文档
    PdfReader reader = new PdfReader(path);
    //获取pdf总页数,可以事先将总页数传给前端
    int numberOfPages = reader.getNumberOfPages();
    // 截取开始页
    int start = Integer.parseInt(page.substring(0,1));
    response.setHeader("Content-Page", String.valueOf(numberOfPages));
    //截取pdf部分页,格式"2-5" 第2页到第5页 页码超出范围(10页,你选择"15-20")只会读最后一页
    // 参数为String型,可让前端传值,控制读取第几页
    // reader.selectPages("2-5");
    reader.selectPages(page);
    //源码没怎么看懂,但是需要内存中存放文件流,所以用了HttpServletResponse
    PdfStamper stamp = new PdfStamper(reader, response.getOutputStream());
    // 开始页 如果大于pdf总页数,不返回文件流,stamp.close()结果返回1
    if(start <= numberOfPages){
        stamp.close();
    }
    reader.close();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值