Word书签替换,加盖电子印章及转换PDF(Java实用版)

一、前言

在项目中有需要对word进行操作的,可以看看哈,本次使用比较强大的spire组件来对word进行操作,免费版支持三页哦,对于不止三页的word文件,可以购买收费版,官网:https://www.e-iceblue.cn/tutorials.html#,也可使用其他组件实现,如poi、docx4j等,我将代码整理成工具类了,大家可以拿下来直接使用哈,一起努力吧。

二、Spire的使用

1、引入pom.xml

<!-- 免费版 .free  只支持前三页转化 -->
<dependency>
    <groupid>e-iceblue</groupid>
    <artifactid>spire.office.free</artifactid>
    <version>5.3.1</version>
</dependency>

2、AddStampUtils

工具类

/**
 * @Author&#xFF1A;wk
 * @Slogan&#xFF1A;&#x65E0;&#x8BBA;&#x98CE;&#x96E8;&#xFF0C;&#x548C;&#x81EA;&#x5DF1;&#x4E00;&#x51B3;&#x80DC;&#x8D1F;&#x5427;
 * @Create&#xFF1A;2022/7/15/9:30
 * @Description&#xFF1A;TODO Word&#x6587;&#x4EF6;&#x64CD;&#x4F5C;&#x5DE5;&#x5177;&#x7C7B;
 * @Version&#xFF1A;1.0
 */
@Slf4j
public class AddStampUtils {

//    &#x8F6C;&#x6362;&#x76EE;&#x6807;&#x6587;&#x4EF6;&#x5730;&#x5740;
//    public static String WORD_OLD_URL = "src/main/resources/word/20200429&#x5B8B;&#x4F53;&#x670D;&#x52A1;&#x5668;&#x540C;&#x6B65;&#x7248;.doc";

//    &#x8F6C;&#x6362;&#x540E;&#x6587;&#x4EF6;&#x5B58;&#x653E;&#x5730;&#x5740;
//    public static String WORD_NEW_URL = "src/main/resources/word/20200429&#x5B8B;&#x4F53;&#x670D;&#x52A1;&#x5668;&#x540C;&#x6B65;&#x7248;2.doc";

//    WORD&#x8F6C;PDF&#x5B58;&#x653E;&#x4F4D;&#x7F6E;
//    public static String PDF_NEW_URL = "src/main/resources/pdf/20200429&#x5B8B;&#x4F53;&#x670D;&#x52A1;&#x5668;&#x540C;&#x6B65;&#x7248;2.pdf";

//    &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x56FE;&#x7247;&#x5730;&#x5740;
//    public static String STAMP_IMG_URL = "src/main/resources/word/stamp.png";

    /**
     * 1&#x3001;&#x81EA;&#x5B9A;&#x4E49;&#x4F4D;&#x7F6E;&#x6DFB;&#x52A0;&#x7535;&#x5B50;&#x5370;&#x7AE0;
     * 2&#x3001;&#x66FF;&#x6362;&#x4E66;&#x7B7E;&#x540D;&#x4F4D;&#x7F6E;&#x6587;&#x672C;&#x5185;&#x5BB9; bookmarkName&#x4F20;&#x53C2;&#x4E3A;null&#xFF0C;&#x5219;&#x4E0D;&#x8FDB;&#x884C;&#x4E66;&#x7B7E;&#x66FF;&#x6362;&#x64CD;&#x4F5C;
     * @param wordOldUrl word&#x6587;&#x4EF6;&#x8DEF;&#x5F84;
     * @param wordNewUrl &#x65B0;word&#x6587;&#x4EF6;&#x8DEF;&#x5F84;
     * @param stampImgUrl &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x56FE;&#x7247;&#x8DEF;&#x5F84;
     * @param horizontal &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x6C34;&#x5E73;&#x4F4D;&#x7F6E; &#xFF08;&#x5F53;&#x524D;&#x6587;&#x4EF6;&#x63A8;&#x8350;260f&#xFF09;
     * @param vertical &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x5782;&#x76F4;&#x4F4D;&#x7F6E; &#xFF08;&#x5F53;&#x524D;&#x63A8;&#x8350;455f&#xFF09;
     * @param stampWidth &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x5BBD;&#x5EA6;&#xFF08;&#x63A8;&#x8350;120&#xFF09;
     * @param stampHeight &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x9AD8;&#x5EA6;&#xFF08;&#x63A8;&#x8350;120&#xFF09;
     * @param bookmarkName &#x4E66;&#x7B7E;&#x540D;&#xFF0C;&#x901A;&#x8FC7;&#x540D;&#x79F0;&#x5BFB;&#x627E;&#x4E66;&#x7B7E;&#x6587;&#x672C;&#x6240;&#x5728;&#x4F4D;&#x7F6E;
     * @param newBookmarkText &#x66FF;&#x6362;&#x7684;&#x6587;&#x672C;&#x65B0;&#x5185;&#x5BB9;
     */
    public void addStamp(
        String wordOldUrl,String wordNewUrl,String stampImgUrl,
        Float horizontal,Float vertical,Float stampWidth,
        Float stampHeight,String bookmarkName,String newBookmarkText
    ) {
        //        &#x52A0;&#x8F7D;&#x6587;&#x6863;
        Document document = new Document();
        document.loadFromFile(wordOldUrl);

//        &#x83B7;&#x53D6;&#x6307;&#x5B9A;&#x6BB5;&#x843D;
        Section section = document.getSections().get(0);
//        &#x83B7;&#x53D6;&#x6BB5;&#x843D;&#x603B;&#x6570;
        int count = section.getParagraphs().getCount();
        log.info("&#x83B7;&#x53D6;&#x6587;&#x6863;&#x5185;&#x5BB9;&#x6BB5;&#x843D;&#x603B;&#x6570;{}",count);
        Paragraph paragraph = section.getParagraphs().get(0);

        //        &#x5224;&#x65AD;&#x662F;&#x5426;&#x9700;&#x8981;&#x66FF;&#x6362;&#x4E66;&#x7B7E;&#x4F4D;&#x7F6E;&#x6587;&#x672C;&#x5185;&#x5BB9;
        if (StringUtils.isNotEmpty(bookmarkName)) {
            replaceBookmarkContent(document,bookmarkName,newBookmarkText);
        }

//        &#x6DFB;&#x52A0;&#x7535;&#x5B50;&#x5370;&#x7AE0;
        DocPicture docPicture = paragraph.appendPicture(stampImgUrl);

//        &#x6307;&#x5B9A;&#x7535;&#x5B50;&#x7AE0;&#x4F4D;&#x7F6E;
//        &#x6C34;&#x5E73;&#x4F4D;&#x7F6E;
        docPicture.setHorizontalPosition(horizontal);
//        &#x5782;&#x76F4;&#x4F4D;&#x7F6E;
        docPicture.setVerticalPosition(vertical);

//        &#x8BBE;&#x7F6E;&#x7535;&#x5B50;&#x7AE0;&#x5927;&#x5C0F;
        docPicture.setWidth(stampWidth);
        docPicture.setHeight(stampHeight);

//        &#x8BBE;&#x7F6E;&#x56FE;&#x7247;&#x4F4D;&#x4E8E;&#x6587;&#x5B57;&#x9876;&#x5C42;
        docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text);

        //        &#x4FDD;&#x5B58;&#x6DFB;&#x52A0;&#x7535;&#x5B50;&#x7AE0;&#x7684;Word&#x6587;&#x6863;
        document.saveToFile(wordNewUrl);
        document.dispose();
        log.info("&#x6587;&#x6863;&#x6DFB;&#x52A0;&#x7535;&#x5B50;&#x5370;&#x7AE0;&#x7ED3;&#x675F;&#xFF0C;&#x65B0;WORD&#x6587;&#x6863;&#x5730;&#x5740;&#xFF1A;{}",wordNewUrl);

    }

    /**
     * 1&#x3001;&#x6839;&#x636E;&#x5173;&#x952E;&#x8BCD;&#x4F4D;&#x7F6E;&#x6DFB;&#x52A0;&#x7535;&#x5B50;&#x5370;&#x7AE0;
     * 2&#x3001;&#x66FF;&#x6362;&#x4E66;&#x7B7E;&#x540D;&#x4F4D;&#x7F6E;&#x6587;&#x672C;&#x5185;&#x5BB9; bookmarkName&#x4F20;&#x53C2;&#x4E3A;null&#xFF0C;&#x5219;&#x4E0D;&#x8FDB;&#x884C;&#x4E66;&#x7B7E;&#x66FF;&#x6362;&#x64CD;&#x4F5C;
     * @param wordOldUrl word&#x6587;&#x4EF6;&#x8DEF;&#x5F84;
     * @param wordNewUrl &#x65B0;word&#x6587;&#x4EF6;&#x8DEF;&#x5F84;
     * @param stampImgUrl &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x56FE;&#x7247;&#x8DEF;&#x5F84;
     * @param keyWord &#x5173;&#x952E;&#x5B57; (&#x81EA;&#x5B9A;&#x4E49;)
     * @param keyWordIndex &#x5173;&#x952E;&#x5B57;&#x7D22;&#x5F15; (-1)
     * @param horizontal &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x6C34;&#x5E73;&#x4F4D;&#x7F6E; (260f)
     * @param vertical &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x5782;&#x76F4;&#x4F4D;&#x7F6E; &#xFF08;-55f&#xFF09;
     * @param stampWidth &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x5BBD;&#x5EA6; &#xFF08;&#x63A8;&#x8350;120&#xFF09;
     * @param stampHeight &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x9AD8;&#x5EA6;&#xFF08;&#x63A8;&#x8350;120&#xFF09;
     * @param bookmarkName &#x4E66;&#x7B7E;&#x540D;&#xFF0C;&#x901A;&#x8FC7;&#x540D;&#x79F0;&#x5BFB;&#x627E;&#x4E66;&#x7B7E;&#x6587;&#x672C;&#x6240;&#x5728;&#x4F4D;&#x7F6E;
     * @param newBookmarkText &#x66FF;&#x6362;&#x7684;&#x6587;&#x672C;&#x65B0;&#x5185;&#x5BB9;
     */
    public void addKeyWordStamp(
            String wordOldUrl,String wordNewUrl,String stampImgUrl,
            String keyWord,Integer keyWordIndex,Float horizontal,
            Float vertical,Float stampWidth,Float stampHeight,
            String bookmarkName,String newBookmarkText
    ) {
        //        &#x52A0;&#x8F7D;&#x6587;&#x6863;
        Document document = new Document();
        document.loadFromFile(wordOldUrl);

//        &#x5224;&#x65AD;&#x662F;&#x5426;&#x9700;&#x8981;&#x66FF;&#x6362;&#x4E66;&#x7B7E;&#x4F4D;&#x7F6E;&#x6587;&#x672C;&#x5185;&#x5BB9;
        if (StringUtils.isNotEmpty(bookmarkName)) {
            replaceBookmarkContent(document,bookmarkName,newBookmarkText);
        }

//        &#x83B7;&#x53D6;&#x5173;&#x952E;&#x5B57;&#x4F4D;&#x7F6E;
        TextSelection[] textSelections = document.findAllString(keyWord, false, false);
        if (ObjectUtils.isNotEmpty(textSelections)) {
            Paragraph paragraph = textSelections[keyWordIndex > -1 ? 0 : textSelections.length - 1].getAsOneRange().getOwnerParagraph();
            //        &#x6DFB;&#x52A0;&#x7535;&#x5B50;&#x5370;&#x7AE0;
            DocPicture docPicture = paragraph.appendPicture(stampImgUrl);
            //        &#x8BBE;&#x7F6E;&#x56FE;&#x7247;&#x4F4D;&#x4E8E;&#x6587;&#x5B57;&#x9876;&#x5C42;
            docPicture.setTextWrappingStyle(TextWrappingStyle.In_Front_Of_Text);
            //        &#x6307;&#x5B9A;&#x7535;&#x5B50;&#x7AE0;&#x4F4D;&#x7F6E;
            //        &#x6C34;&#x5E73;&#x4F4D;&#x7F6E;
            docPicture.setHorizontalPosition(horizontal);
            //        &#x5782;&#x76F4;&#x4F4D;&#x7F6E;
            docPicture.setVerticalPosition(vertical);
            //        &#x8BBE;&#x7F6E;&#x7535;&#x5B50;&#x7AE0;&#x5927;&#x5C0F;
            docPicture.setWidth(stampWidth);
            docPicture.setHeight(stampHeight);
        }

//        &#x4FDD;&#x5B58;&#x6DFB;&#x52A0;&#x7535;&#x5B50;&#x7AE0;&#x7684;Word&#x6587;&#x6863;
        document.saveToFile(wordNewUrl);
        document.dispose();
        log.info("&#x6587;&#x6863;&#x6DFB;&#x52A0;&#x7535;&#x5B50;&#x5370;&#x7AE0;&#x7ED3;&#x675F;&#xFF0C;&#x65B0;WORD&#x6587;&#x6863;&#x5730;&#x5740;&#xFF1A;{}",wordNewUrl);
    }

    /**
     * &#x66FF;&#x6362;&#x4E66;&#x7B7E;&#x540D;&#x4F4D;&#x7F6E;&#x6587;&#x672C;&#x5185;&#x5BB9;
     * @param document word&#x6587;&#x6863;&#x5BF9;&#x8C61;
     * @param bookmarkName &#x4E66;&#x7B7E;&#x540D;
     * @param newBookmarkText &#x65B0;&#x6587;&#x672C;&#x5185;&#x5BB9;
     */
    public void replaceBookmarkContent(Document document,String bookmarkName,String newBookmarkText) {
        //&#x5B9A;&#x4F4D;&#x5230;&#x6307;&#x5B9A;&#x4E66;&#x7B7E;&#x4F4D;&#x7F6E;
        BookmarksNavigator bookmarksNavigator = new BookmarksNavigator(document);
        bookmarksNavigator.moveToBookmark(bookmarkName);
        //&#x7528;&#x6587;&#x672C;&#x5185;&#x5BB9;&#x66FF;&#x6362;&#x539F;&#x6709;&#x4E66;&#x7B7E;&#x4F4D;&#x7F6E;&#x7684;&#x6587;&#x672C;&#xFF0C;&#x65B0;&#x66FF;&#x6362;&#x7684;&#x5185;&#x5BB9;&#x4E0E;&#x539F;&#x6587;&#x683C;&#x5F0F;&#x4E00;&#x81F4;
        bookmarksNavigator.replaceBookmarkContent(newBookmarkText,true);
    }

    /**
     * &#x66FF;&#x6362;&#x4E66;&#x7B7E;&#x540D;&#x4F4D;&#x7F6E;&#x6587;&#x672C;&#x5185;&#x5BB9;&#x4E3A;&#x56FE;&#x7247;
     * @param document word&#x6587;&#x6863;&#x5BF9;&#x8C61;
     * @param bookmarkName &#x4E66;&#x7B7E;&#x540D;
     * @param newImgUrl &#x56FE;&#x7247;&#x5730;&#x5740;
     */
    public void replaceBookmarkContentToImg(Document document,String bookmarkName,String newImgUrl) {
        //&#x5B9A;&#x4F4D;&#x5230;&#x6307;&#x5B9A;&#x4E66;&#x7B7E;&#x4F4D;&#x7F6E;
        BookmarksNavigator bookmarksNavigator = new BookmarksNavigator(document);
        bookmarksNavigator.moveToBookmark(bookmarkName);
        //&#x6DFB;&#x52A0;&#x56FE;&#x7247;&#xFF0C;&#x66FF;&#x6362;&#x539F;&#x6709;&#x4E66;&#x7B7E;&#x5185;&#x5BB9;
        Paragraph para= new Paragraph(document);
        para.appendPicture(newImgUrl);
        TextBodyPart bodyPart = new TextBodyPart(document);
        bodyPart.getBodyItems().add(para);
        bookmarksNavigator.replaceBookmarkContent(bodyPart);
    }

    /**
     * &#x66FF;&#x6362;&#x4E66;&#x7B7E;&#x540D;&#x4F4D;&#x7F6E;&#x6587;&#x672C;&#x5185;&#x5BB9;&#x4E3A;&#x8868;&#x683C;
     * @param document word&#x6587;&#x6863;&#x5BF9;&#x8C61;
     * @param bookmarkName &#x4E66;&#x7B7E;&#x540D;
     */
    public void replaceBookmarkContentToTable(Document document,String bookmarkName) {
        //&#x58F0;&#x660E;&#x6570;&#x7EC4;&#x5185;&#x5BB9;
        String[][] data =
        {
                new String[]{"&#x5206;&#x7C7B;", "&#x7B49;&#x7EA7;", "&#x7F16;&#x53F7;"},
                new String[]{"A", "&#x4E00;&#x7EA7;", "01A"},
                new String[]{"B", "&#x4E8C;&#x7EA7;", "02B"},
                new String[]{"C", "&#x4E09;&#x7EA7;", "03C"},
        };

        //&#x521B;&#x5EFA;&#x8868;&#x683C;
        Table table = new Table(document, true);
        table.resetCells(4, 3);
        for (int i = 0; i < data.length; i++) {
            TableRow dataRow = table.getRows().get(i);
            for (int j = 0; j < data[i].length; j++) {
                TextRange range = dataRow.getCells().get(j).addParagraph().appendText(data[i][j]);
                range.getOwnerParagraph().getFormat().setHorizontalAlignment(HorizontalAlignment.Center);
                range.getCharacterFormat().setFontName("&#x6977;&#x4F53;");
                dataRow.getRowFormat().setHorizontalAlignment(RowAlignment.Center);
                dataRow.getCells().get(j).getCellFormat().setVerticalAlignment(VerticalAlignment.Middle);
            }
        }

        //&#x521B;&#x5EFA;TextBodyPart&#x5BF9;&#x8C61;
        TextBodyPart bodyPart= new TextBodyPart(document);
        bodyPart.getBodyItems().add(table);

        //&#x5B9A;&#x4F4D;&#x5230;&#x6307;&#x5B9A;&#x4E66;&#x7B7E;&#x4F4D;&#x7F6E;
        BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(document);
        bookmarkNavigator.moveToBookmark(bookmarkName);

        //&#x4F7F;&#x7528;&#x8868;&#x683C;&#x66FF;&#x6362;&#x539F;&#x4E66;&#x7B7E;&#x7684;&#x5185;&#x5BB9;
        bookmarkNavigator.replaceBookmarkContent(bodyPart);
    }

    /**
     * &#x6587;&#x4EF6;&#x8F6C;&#x6D41;
     * @param wordNewUrl
     * @return
     */
    public byte[] getBytesByFile(String wordNewUrl) {
        try {
//            byte[] bytes = Files.readAllBytes(Paths.get(wordNewUrl));
            File file = new File(wordNewUrl);
            FileInputStream fis = new FileInputStream(file);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] b = new byte[1024];
            int len = -1;
            while((len = fis.read(b)) != -1) {
                bos.write(b, 0, len);
            }
            fis.close();
            bos.close();
            byte[] bytes = bos.toByteArray();
            System.out.println("successful...");
            return bytes;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * &#x6D41;&#x8F6C;&#x6587;&#x4EF6;
     * @param buf &#x6D41;&#x5B57;&#x8282;&#x6570;&#x7EC4;
     * @param filePath &#x65B0;&#x6587;&#x4EF6;&#x8DEF;&#x5F84;
     * @param fileName &#x65B0;&#x6587;&#x4EF6;&#x540D;&#x79F0;
     */
    public void byte2File(byte[] buf, String filePath, String fileName) {
        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        File file = null;
        try {
            File dir = new File(filePath);
            if (!dir.exists() && dir.isDirectory()) {
                dir.mkdirs();
            }
            file = new File(filePath + File.separator + fileName);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(buf);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * word&#x8F6C;PDF
     * @param wordNewUrl word&#x6587;&#x4EF6;&#x8DEF;&#x5F84;
     * @param pdfNewUrl  &#x5B58;&#x50A8;&#x65B0;PDF&#x6587;&#x4EF6;&#x8DEF;&#x5F84;
     */
    public void wordToPdf(String wordNewUrl, String pdfNewUrl) {
//        &#x5C06;&#x65B0;Word&#x6587;&#x6863;&#x8F6C;&#x6362;&#x4E3A;PDF&#x6587;&#x4EF6;
        Document document = new Document();
        document.loadFromFile(wordNewUrl);
        document.saveToFile(pdfNewUrl, FileFormat.PDF);
        document.dispose();
        log.info("&#x6587;&#x6863;&#x8F6C;&#x6362;&#x7ED3;&#x675F;&#xFF0C;&#x65B0;PDF&#x6587;&#x6863;&#x5730;&#x5740;&#xFF1A;{}",pdfNewUrl);
    }
}

3、测试

Main主函数测试

public static void main(String[] args) {
    //       &#x76EE;&#x6807;&#x6587;&#x4EF6;&#x5730;&#x5740;
    String wordOldUrl = "src/main/resources/word/20200429&#x5B8B;&#x4F53;&#x670D;&#x52A1;&#x5668;&#x540C;&#x6B65;&#x7248;.doc";
    //       &#x6DFB;&#x52A0;&#x7535;&#x5B50;&#x5370;&#x7AE0;&#x540E;&#x6587;&#x4EF6;&#x5B58;&#x653E;&#x5730;&#x5740;
    String wordNewUrl = "src/main/resources/word/20200429&#x5B8B;&#x4F53;&#x670D;&#x52A1;&#x5668;&#x540C;&#x6B65;&#x7248;2.doc";
    //       WORD&#x8F6C;PDF&#x5B58;&#x653E;&#x4F4D;&#x7F6E;
    String pdfNewUrl = "src/main/resources/pdf/20200429&#x5B8B;&#x4F53;&#x670D;&#x52A1;&#x5668;&#x540C;&#x6B65;&#x7248;2.pdf";
    //        &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x56FE;&#x7247;&#x5730;&#x5740;
    String stampImgUrl = "src/main/resources/word/stamp.png";
    //        word&#x6587;&#x6863;&#x5185;&#x5BB9;&#x5173;&#x952E;&#x5B57;
    String keyWord = "&#x76D6;&#x7AE0;";
    //        &#x7D22;&#x5F15;&#xFF0C;&#x9ED8;&#x8BA4;&#x5C31;&#x586B;-1&#x5373;&#x53EF;
    Integer keyWordIndex = -1;
    //        &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x6C34;&#x5E73;&#x4F4D;&#x7F6E;
    float horizontal = 260f;
    //        &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x5782;&#x76F4;&#x4F4D;&#x7F6E;
    float vertical = -55f;
    //        &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x5BBD;&#x5EA6;
    float stampWidth = 120;
    //        &#x7535;&#x5B50;&#x5370;&#x7AE0;&#x9AD8;&#x5EA6;
    float stampHeight = 120;
    //        &#x4E66;&#x7B7E;&#x540D;
    String bookmarkName = "ZWSTTCJKBH";
    //        &#x4E66;&#x7B7E;&#x4F4D;&#x7F6E;&#x6587;&#x672C;&#x66FF;&#x6362;&#x65B0;&#x5185;&#x5BB9;
    String newBookmarkText = "&#x516C;&#x5F00;";
    AddStampUtils addStampUtils = new AddStampUtils();
    //        &#x83B7;&#x53D6;&#x5173;&#x952E;&#x5B57;&#x4F4D;&#x7F6E;&#x5E76;&#x52A0;&#x76D6;&#x5370;&#x7AE0;&#x5E76;&#x66FF;&#x6362;&#x4E66;&#x7B7E;&#x540D;&#x4F4D;&#x7F6E;&#x6587;&#x672C;&#x5185;&#x5BB9;
    addStampUtils.addKeyWordStamp(wordOldUrl,wordNewUrl,stampImgUrl,keyWord,keyWordIndex,horizontal,vertical,stampWidth,stampHeight,bookmarkName,newBookmarkText);

    //  &#x8F6C;&#x6362;&#x4E3A;&#x6D41; &#x5B57;&#x8282;&#x6570;&#x7EC4;
    byte[] bytesByFile = addStampUtils.getBytesByFile(wordNewUrl);
    //  &#x6D41;&#x8F6C;&#x6362;&#x4E3A;&#x6587;&#x4EF6;
    addStampUtils.byte2File(bytesByFile,"src/main/resources/word/","20200429&#x5B8B;&#x4F53;&#x670D;&#x52A1;&#x5668;&#x540C;&#x6B65;&#x7248;3.doc");

    //        &#x5C06;&#x65B0;word&#x8F6C;&#x5316;&#x4E3A;pdf&#x6587;&#x4EF6;
    addStampUtils.wordToPdf(wordNewUrl,pdfNewUrl);
}

4、效果展示

Before

旧书签位置内容

Word书签替换,加盖电子印章及转换PDF(Java实用版)

文档盖章地方:

Word书签替换,加盖电子印章及转换PDF(Java实用版)

After

Word书签替换,加盖电子印章及转换PDF(Java实用版)

Word书签替换,加盖电子印章及转换PDF(Java实用版)

5、注意事项

将word转化为PDF时,打开pdf,发现顶部多了一条横线,如下:

Word书签替换,加盖电子印章及转换PDF(Java实用版)

这条横线的由来:传说这条横线是由于word文件的页眉导致的,经过我的证实,发现将鼠标移动至页面顶端,并且双击进入了页眉编辑状态,退出时有时就会在留下一根页眉横线(即使啥都不输入),由此得出传说也可信。哈哈哈,心情愉悦一下

处理方法:

第一种方法:首先将点击页眉,进入页眉编辑状态,并将光标置于页眉处。然后单击”开始”,找到”样式”里面的”正文”样式,轻松删除。

第二种方法(推荐):将光标置于页眉处,同时按住键盘上的:Ctrl+Shift+N,页眉横线立即消失,再按ESC键退出页眉编辑即可。

Original: https://www.cnblogs.com/aerfazhe/p/16481306.html
Author: 阿尔法哲
Title: Word书签替换,加盖电子印章及转换PDF(Java实用版)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621864/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • mybatis-延迟加载

    本文主要介绍下mybatis的延迟加载,从原理上介绍下怎么使用、有什么好处能规避什么问题。延迟加载一般用于级联查询(级联查询可以将主表不能直接查询的数据使用自定义映射规则调用字表来…

    数据库 2023年6月16日
    060
  • 折腾 2 年多!我们终于见面了!

    2018年3月,我与张老师就这么在微信上聊了起来,起初我并没有写书的打算,我们之间只是通过讨论、交流的形式聊聊关于出书的方方面面。最终,敌不过张老师超强的专业能力、细致的解说与盛情…

    数据库 2023年6月9日
    0159
  • 启用Hyper-v后,重启后界面提示 无法完成功能配置,正在撤销更改

    安装docker后,提示需要启用hyper-v,在控制面板中勾选Hyper-v,然后重启,更新快完成就提示无法完成功能配置,正在撤销更改 解决方法 方法1 控制面板一个一个选 方法…

    数据库 2023年6月14日
    0107
  • 详解在Linux中同时安装配置并使用 MySQL5.7 和 MySQL8.0

    最近需要使用mysql8.0版本,但是原本的mysql5.7版本已经被多个服务依赖,于是想想能不能同一台服务器装多个版本的mysql,一查确实可行,这里做一个记录方便自己后期回忆 …

    数据库 2023年5月24日
    069
  • Python第二十一天 fileinput模块

    Python第二十一天 fileinput模块 fileinput模块 fileinput.input([files[, inplace[, backup[, bufsize[, …

    数据库 2023年6月9日
    062
  • 《SpringBoot官网文档:2.1.5》

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    075
  • Java线程通信

    Java线程通信 螣蛇乘雾,终为土灰。 多个线程协同工作完成某个任务时就会涉及到线程间通信问题。如何使各个线程之间同时执行,顺序执行、交叉执行等。 一、线程同时执行 创建两个线程a…

    数据库 2023年6月14日
    080
  • python-去除txt文件空格、特殊字符

    #!/usr/bin/python -*- coding: UTF-8 -*- """ @author: Roc-xb ""&qu…

    数据库 2023年6月14日
    075
  • Redis——数据操作(2)

    2022-09-21 (2)hash操作: ①设置多个hash值,(hmset): 查看说明: help hmset hmset person name A age 1 ②获得多个…

    数据库 2023年6月14日
    059
  • IDEA中tomcat插件版本7中文乱码问题

    tomcat插件版本7中文乱码问题 IDEA中tomcat插件版本7中文乱码问题 问题描述: 因为idea中tomcat插件版本只到7,他的默认解码方式为:ISO-8859-1,又…

    数据库 2023年6月16日
    068
  • 网络通信知识地图

    知识地图是一种知识导航系统,并显示不同的知识存储之间重要的动态联系。本篇主要就是从更高的视角将之前的文章的结构思路展现出来。文章结构的思路实际上也是达到架构师程度要掌握的网络通信知…

    数据库 2023年6月6日
    085
  • jdbc分页

    一、最低级分页 resources下的db.properties db.driver=com.mysql.cj.jdbc.Driver db.url=jdbc:mysql://lo…

    数据库 2023年6月9日
    091
  • Golang context

    Context Go 语言中提供了 context 包,通过显示传递 context, 实现请求级别的元数据、取消信号、终止信号的传递。context 包提供了从现有的上下文值(c…

    数据库 2023年6月16日
    077
  • 2021长安杯wp

    案件背景 2021年4月25日,上午8点左右,警方接到被害人金某报案,声称自己被敲诈数万元;经询问,昨日金某被嫌疑人诱导果聊,下载了某果聊软件,导致自己的通讯录和果聊视频被嫌疑人获…

    数据库 2023年6月11日
    066
  • 高可用 | Xenon 实现 MySQL 高可用架构 常用操作篇

    原创:知数堂 上一篇文章,我们详细介绍了 Xenon 实现 MySQL 高可用架构的部署过程。接下来本篇将介绍 Xenon 的常用操作,帮助大家在完成环境搭建之后,能把 Xenon…

    数据库 2023年5月24日
    086
  • spring内嵌cglib包,这里藏着一个大坑

    问题发现 2022-01-21 早上 9 点,订单系统出现大面积的”系统未知错误”报错,导致部分用户无法正常下单。查询后台日志,可以看到大量的 duplic…

    数据库 2023年6月6日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球