zoukankan      html  css  js  c++  java
  • pdf工具类之添加页码

    实现思路:将原pdf复制一份到目标pdf,在目标pdf上进行操作,复制的原因是:原pdf需要获取其pdf读入流(PdfReader),如果还在原pdf上继续宁操作,就会出现一下一下异常

    java.io.FileNotFoundException: D:	esttest1	est.pdf (请求的操作无法在使用用户映射区域打开的文件上执行。)
        at java.io.FileOutputStream.open0(Native Method)
        at java.io.FileOutputStream.open(FileOutputStream.java:270)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
        at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
        at priv.lgq.filesysspringboot.utils.pdf.PdfUtils.addPageNum(PdfUtils.java:146)
        at priv.lgq.filesysspringboot.business.DemoTest.main(DemoTest.java:28)

    源码如下:

     1     /** 
     2      * 添加页码
     3      *
     4      * @author 龙谷情
     5      * @date 2020/11/12 14:25
     6      * @param pdfPath 原pdf路径
     7      * @param outFilePath 目标pdf路径
     8      * @param positionX 页数位置X
     9      * @param positionY 页数位置Y
    10      * @param fontSize 字体大小
    11      * @return java.io.File[返回类型说明]
    12      * @exception/throws [异常类型] [异常说明]
    13      * @since [v1.0]
    14      */
    15     public static File addPageNum(String pdfPath, String outFilePath, int positionX, int positionY, int fontSize) {
    16         PdfReader reader = null;
    17         PdfStamper stamper = null;
    18         FileOutputStream outputStream = null;
    19         try {
    20             // 创建一个pdf读入流
    21             reader = new PdfReader(pdfPath);
    22             // 根据一个pdfreader创建一个pdfStamper.用来生成新的pdf.
    23             outputStream = new FileOutputStream(outFilePath);
    24             stamper = new PdfStamper(reader, outputStream);
    25             // 这个字体是itext-asian.jar中自带的 所以不用考虑操作系统环境问题.
    26             BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false);
    27             // baseFont不支持字体样式设定.但是font字体要求操作系统支持此字体会带来移植问题.
    28             Font font = new Font(bf, 10);
    29             font.setStyle(Font.BOLD);
    30             font.getBaseFont();
    31             // 获取页码
    32             int num = reader.getNumberOfPages();
    33             for (int i = 1; i <= num; i++) {
    34                 PdfContentByte over = stamper.getOverContent(i);
    35                 over.beginText();
    36                 over.setFontAndSize(font.getBaseFont(), fontSize);
    37                 over.setColorFill(BaseColor.BLACK);
    38                 // 设置页码在页面中的坐标
    39                 over.setTextMatrix(positionX, positionY);
    40                 over.showText("第" + i + "页");
    41                 over.endText();
    42                 over.stroke();
    43             }
    44             stamper.close();
    45         } catch (Exception e) {
    46             e.printStackTrace();
    47         } finally {
    48             if (outputStream != null) {
    49                 try {
    50                     outputStream.close();
    51                 } catch (IOException e) {
    52                     e.printStackTrace();
    53                 }
    54             }
    55             if (reader != null) {
    56                 reader.close();
    57             }
    58             if (stamper != null) {
    59                 try {
    60                     stamper.close();
    61                 } catch (DocumentException e) {
    62                     e.printStackTrace();
    63                 } catch (IOException e) {
    64                     e.printStackTrace();
    65                 }
    66             }
    67         }
    68         File file = new File(outFilePath);
    69         return file;
    70     }
    昔日我曾苍老,如今风华正茂(ง •̀_•́)ง
  • 相关阅读:
    让 ijkplayer 支持兼容armv7 armv7s
    以太网私网建立:同一台电脑,不同电脑运行多个节点。
    solidity 语言总结笔记
    web.js 方法详解
    Fabric 环境搭建
    浅谈区块链1
    以太坊私链建立和geth的使用
    搭建联盟链
    fabric 网络 合约部署 和 测试
    【Advanced Windows Phone Programming】番外篇 WP8与WP7
  • 原文地址:https://www.cnblogs.com/lgqrlchinese/p/13963738.html
Copyright © 2011-2022 走看看