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/586716/

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

(0)

大家都在看

  • Java精进-手写持久层框架

    前言 本文适合有一定java基础的同学,通过自定义持久层框架,可以更加清楚常用的mybatis等开源框架的原理。 JDBC操作回顾及问题分析 学习java的同学一定避免不了接触过j…

    Java 2023年6月13日
    0132
  • MarkDown 简要语法学习

    MarkDown 简要语法学习 标题 +空格显示标题 多个#代表不同级别标题 ,最多不超过6级。 字体 粗体 ** 斜体 * 粗斜体 *** 删除 ~~ 下划线 引用 一个大于号 …

    Java 2023年6月9日
    077
  • 6.Springboot切换日志框架

    1.Springboot默认使用logback2.切换到log4j2 org.springframework.bootspring-boot-starter-web spring-…

    Java 2023年6月13日
    092
  • 250_RabbitMQ-集群监控

    集群监控 管理界面监控 tracing日志监控 消息追踪启用与查看 日志追踪 定制自己的监控系统 Zabbix 监控RabbitMQ 集群监控 :::info在广大的互联网行业中R…

    Java 2023年6月7日
    0106
  • Mac 系统如何利用软链接在根目录创建文件夹?

    作者:泥瓦匠 出处:https://www.bysocket.com/2021-10-26/mac-create-files-from-the-root-directory.htm…

    Java 2023年6月13日
    0124
  • phpshe xml注入

    php商城系统 xml注入 页面样式 Xml原理参考: https://www.cnblogs.com/20175211lyz/p/11413335.html 漏洞函数simple…

    Java 2023年6月6日
    082
  • 记一次线上MySQL数据库死锁问题

    最近线上项目报了一个MySQL死锁(DealLock)错误,虽说对业务上是没有什么影响的,由于自己对数据库锁这块了解不是很多,之前也没怎么的在线上碰到过。这次刚好遇到了,便在此记录…

    Java 2023年6月7日
    069
  • SpringBoot SpringBoot 定时器的三种方式定时器的三种方式

    1、使用@Scheduled注解定义 需要在添加注解 @EnableScheduling 来扫描定时器并执行: @Scheduled 中的属性有如下几种: 其中corn表达式的格式…

    Java 2023年5月30日
    092
  • JavaWeb详解

    一、基本概念 1.前言 web开发: web,网页的意思 静态web html,css 提供给所有人看的数据始终不会发生变化 动态web 提供给所有人看的数据始终会发生变化,每个人…

    Java 2023年6月13日
    084
  • ReadWriteLock 接口详解

    ReadWriteLock 接口详解 这是本人阅读ReadWriteLock接口源码的注释后,写出的一篇知识分享博客 读写锁的成分是什么? 读锁 Lock readLock(); …

    Java 2023年6月5日
    090
  • MQ高级

    1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: 生产者发送的消息未送达exchange 消息到达ex…

    Java 2023年6月9日
    069
  • SpringCloud 上

    Spring Cloud 是在 Spring Boot 基础上构建的, 用于检查分布式系统构建的工具集. 工具集包括 配置管理, 服务发现, 智能路由,断路器,为代理和控制总线. …

    Java 2023年5月30日
    060
  • SpringCloud(一).大话SpringCloud

    学习一个东西,首先要搞清楚这个东西是什么,有什么用,怎么用。最近会坚持写博客,将最近学习的SpringCloud的过程记录下来,很多东西往往看了一遍过一段时间就会遗忘,用博客记录下…

    Java 2023年6月7日
    064
  • 推荐两篇文章,关于Java Project中的两种数据访问设计模式Dao与Repository

    推荐两篇文章,关于Java Project中的两种数据访问设计模式Dao与Repository https://stackoverflow.com/questions/855012…

    Java 2023年6月7日
    077
  • STC单片机控制28BYJ-48步进电机

    STC单片机4*4按键控制步进电机旋转 28BYJ-48型步进电机说明 * 四相永磁式的含义 28BYJ-48工作原理 让电机转起来 最简单的电机转动程序 电机转速缓慢的原因分析 …

    Java 2023年6月9日
    088
  • SpringMVC

    MVCModel 业务封装事务逻辑处理View 数据展示Controller 分发指派工作 SpringMVC开发步骤 导入Spring-MVC包 配置Servlet 编写POJO…

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