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)

大家都在看

  • 编程书单

    前言 : 一开始我是不太关注技术书的, 但是直到在知乎看到了北邮人论坛转载的那个书单之后, 我才开始关注技术书尤其是技术书单. 现在我认为读技术书的效果会比看视频效果好, 但是最高…

    数据库 2023年6月11日
    075
  • NO.4 计算机组成原理-笔记

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

    数据库 2023年6月14日
    092
  • 数据库基本知识和MySQL

    数据库的基本知识和MySQL 数据库 数据库 (database) 指保存有组织的数据的容器,人们一般情况说的数据库指的是数据库软件,即数据库管理系统 (DBMS) ,而数据库实确…

    数据库 2023年6月16日
    0131
  • idea 自定义注释模板

    自定义的格式: html;gutter:true; * * * @Description * $param$ * @Author $user$ * @Date $time$ $da…

    数据库 2023年6月16日
    056
  • centos系统下mysql的配置

    配置文件路径 /etc/my.cnf Hole yor life get everything if you never give up. Original: https://ww…

    数据库 2023年6月9日
    069
  • Centos7安装Greenplum5.3单机版教程

    环境:centos7 ,Greenplum5.3 1. Greenplum 5.3 下载 安装包下载 https://download.csdn.net/download/Ange…

    数据库 2023年6月14日
    099
  • MySQL InnoDB索引原理

    数据库与I/O原理 数据会持久化到磁盘,查询数据是就会有I/O操作,相对于缓存操作,I/O操作的时间成本相当高昂。 I/O操作的基本单位是一个磁盘页面,比如16KB的页面大小。当数…

    数据库 2023年6月14日
    091
  • mysql data local的使用导入与导出数据到.txt

    一、先创建表 CREATE TABLE stu(id INT UNSIGNED AUTO_INCREMENT,NAME VARCHAR(15) UNIQUE, / 唯一约束 , 可…

    数据库 2023年6月9日
    085
  • 设计模式之(5)——原型模式

    上篇文章中我们提到单例模式可以避免重复创建消耗资源的对象,但是却不得不共用对象。若是对象本身也不让随意访问修改时,怎么办?那么我们就可以采用原型模式来创建新的实例。 定义:原型模式…

    数据库 2023年6月14日
    066
  • 1_MySQL

    概念: 数据库是按照数据结构来组织, 存储和管理数据的仓库, 是一个长期存储在计算机内的, 有组织的, 有共享的, 统一管理的数据集合 分类: 网状结构数据库: 美国通用汽车公司I…

    数据库 2023年6月11日
    073
  • MySQL函数学习(五)—–流程控制函数

    md函数笔记五 注:笔记旨在记录 五、MySQL 流程控制函数 0. 表 0.1 num表: 1. IF() — 条件判断 1.1. 函数: 1.2. sql示例: 2…

    数据库 2023年5月24日
    082
  • CMD 命令汇总

    CMD 常用命令 常用命令 作用 D: 切换到 D 盘下 dir 查看当前路径下的全部内容 cd 盘符:\目录1\目录2…… 进入多级目录 cd .. 回退…

    数据库 2023年6月6日
    067
  • 携程二面:讲讲 MySQL 中的 WAL 策略和 CheckPoint 技术

    前段时间我在准备暑期实习嘛,这是当时面携程的时候二面的一道问题,我一脸懵逼,赶紧道歉,不好意思不知道没了解过,面试官又解释说 redo log,我寻思着 redo log 我知道啊…

    数据库 2023年6月6日
    0256
  • Dubbo源码(八)-负载均衡

    前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)…

    数据库 2023年6月11日
    079
  • MySQL 同步复制及高可用方案总结

    mysql作为应用程序的数据存储服务,要实现mysql数据库的高可用。必然要使用的技术就是数据库的复制,如果主节点出现故障可以手动的切换应用到从节点,这点相信运维同学都是知道,并且…

    数据库 2023年6月9日
    071
  • 这个Python读取文件的方法,堪称天花板级别…

    序言 哈喽兄弟们,今天咱们来了解一下 fileinput 。 说到fileinput,可能90%的码农表示没用过,甚至没有听说过。 这不奇怪,因为在python界,既然open可以…

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