最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 替換word文檔文字并指定位置插入圖片

 更新時間:2018年02月02日 11:28:55   作者:紫薇帝星的故事  
這篇文章主要介紹了Java 替換word文檔文字,指定位置插入圖片功能,本文通過實(shí)例代碼給大家講解,需要的朋友可以參考下

先說下 需要的依賴包

<dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-excelant</artifactId>
      <version>3.12</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-scratchpad</artifactId>
      <version>3.12</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.8</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml-schemas</artifactId>
      <version>3.8</version>
    </dependency>
<!-- 生成圖片-->
 <dependency>
    <groupId>org.jfree</groupId>
    <artifactId>jfreechart</artifactId>
    <version>1.0.19</version>
  </dependency>
  <dependency>
<!--支持插入圖片-->
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j</artifactId>
    <version>3.3.1</version>
  </dependency>

示例,下圖

如上圖,需要替換的字符串地方“$1”為“1231”,在指定位置插入書簽,并命名“test”    ,插入的圖片如下

本人也沒太過多去研究,親測通過有效,在這分享下

1.demo

import java.awt.Font;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.docx4j.TraversalUtil;
import org.docx4j.dml.wordprocessingDrawing.Inline;
import org.docx4j.finders.RangeFinder;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.Body;
import org.docx4j.wml.BooleanDefaultTrue;
import org.docx4j.wml.CTBookmark;
import org.docx4j.wml.Color;
import org.docx4j.wml.Document;
import org.docx4j.wml.Drawing;
import org.docx4j.wml.HpsMeasure;
import org.docx4j.wml.ObjectFactory;
import org.docx4j.wml.P;
import org.docx4j.wml.R;
import org.docx4j.wml.RPr;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;import com.aisino.qysds.common.constant.ERRORConstants;
import com.aisino.qysds.common.exception.SysException;
import com.aisino.qysds.service.IExportBgService;
import com.google.common.collect.Maps;
public class ExportBgServiceImpl {
public static void main(String[] args) throws Exception {
    Map<String, String> map = Maps.newHashMap();
    map.put("$1", "1231");
    XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage("D:\\tp\\test.docx"));
    Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();
    while (itPara.hasNext()) {
      XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
      List<XWPFRun> runs = paragraph.getRuns();
      for (int i = 0; i < runs.size(); i++) {
        String oneparaString = runs.get(i).getText(runs.get(i).getTextPosition());
        for (Map.Entry<String, String> entry : map.entrySet()) {
          if (oneparaString.equals(entry.getKey())) {
            oneparaString = oneparaString.replace(entry.getKey(), entry.getValue());
          }
        }
        runs.get(i).setText(oneparaString, 0);
      }
    }
    FileOutputStream outStream = null;
    outStream = new FileOutputStream("D:\\tp\\test1.docx");
    document.write(outStream);
    outStream.close();
//-----------------------------------這塊為生成圖片 和 插入圖片
    DefaultPieDataset dataset = new DefaultPieDataset();
    dataset.setValue("修改類", 1);
    dataset.setValue("提示類", 1);
    dataset.setValue("校驗(yàn)不通過", 3);
    dataset.setValue("正常類", 3);
    JFreeChart chart = ChartFactory.createPieChart3D(null, dataset, true, false, false);
    chart.getLegend().setItemFont(new Font("黑體", Font.BOLD, 15)); // 設(shè)置圖例類別字體
    // TextTitle title = new TextTitle(titleString);
    // title.setFont(new Font("黑體", Font.ITALIC, 20));//設(shè)置標(biāo)題字體
    // chart.setTitle(title);
    PiePlot piePlot = (PiePlot) chart.getPlot();
    DecimalFormat df = new DecimalFormat("0.00%");
    NumberFormat nf = NumberFormat.getInstance();
    StandardPieSectionLabelGenerator generator = new StandardPieSectionLabelGenerator("{0} {2}", nf, df);// 獲得StandardPieSectionLabelGenerator對象,生成的格式,
    // {0}表示section名,{1}表示section的值,{2}表示百分比??梢宰远x
    piePlot.setLabelGenerator(generator);// 設(shè)置百分比
    piePlot.setLabelFont(new Font("黑體", Font.ITALIC, 15));// 設(shè)置餅圖中類別字體
    piePlot.setNoDataMessage("此時并沒有任何數(shù)據(jù)可用");
    piePlot.setCircular(false);
    piePlot.setLabelGap(0.02D);
    piePlot.setIgnoreNullValues(true);// 設(shè)置不顯示空位
    piePlot.setIgnoreZeroValues(true);// 設(shè)置不顯示負(fù)值或零值
    String fName = "pie.png";
    File file = new File("D:\\tp", fName);
    if (file.exists()) {
      file.delete();
    }
    try {
      ChartUtilities.saveChartAsPNG(file, chart, 800, 500);
      File file2 = new File("D:\\tp\\test1.docx");
      WordprocessingMLPackage wPackage = WordprocessingMLPackage.load(new FileInputStream(file2));
      MainDocumentPart mainDocumentPart = wPackage.getMainDocumentPart();
      Document wmlDoc = (Document) mainDocumentPart.getJaxbElement();
      Body body = wmlDoc.getBody();
      // 提取正文中所有段落
      List<Object> paragraphs = body.getContent();
      // 提取書簽并創(chuàng)建書簽的游標(biāo)
      RangeFinder rt = new RangeFinder("CTBookmark", "CTMarkupRange");
      new TraversalUtil(paragraphs, rt);
      for (CTBookmark bm : rt.getStarts()) {
        if (bm.getName().equals("test")) {// 這里的test為 word文檔中預(yù)設(shè)的 書簽名
          InputStream inputStream = new FileInputStream(file);
          byte[] bytes = IOUtils.toByteArray(inputStream);
          BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wPackage, bytes);
          Inline inline = imagePart.createImageInline(null, null, 0, 1, false, 10000);//這里的100000不是正常屏幕大小,用于設(shè)置插入圖片的大小
          P p = (P) (bm.getParent());
          ObjectFactory factory = new ObjectFactory();
          // R對象是匿名的復(fù)雜類型,然而我并不知道具體啥意思,估計(jì)這個要好好去看看ooxml才知道
          R run = factory.createR();
          // drawing理解為畫布?
          Drawing drawing = factory.createDrawing();
          drawing.getAnchorOrInline().add(inline);
          run.getContent().add(drawing);
          p.getContent().add(run);
        }
      }
      wPackage.save(new FileOutputStream(new File("D:\\tp\\test1.docx")));
    } catch (IOException e) {
    }
  }
}

最后效果圖如下:

總結(jié)

以上所述是小編給大家介紹的Java 替換word文檔文字并指定位置插入圖片,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • JAVA定義變量與輸出詳解

    JAVA定義變量與輸出詳解

    這篇文章主要介紹了JAVA定義變量與輸出詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • JVM性能調(diào)優(yōu)之運(yùn)行時參數(shù)小結(jié)

    JVM性能調(diào)優(yōu)之運(yùn)行時參數(shù)小結(jié)

    jvm是java的運(yùn)行環(huán)境,在jvm中有很多的參數(shù)可以進(jìn)行設(shè)置,本文主要介紹了JVM性能調(diào)優(yōu)之運(yùn)行時參數(shù)小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • mybatis實(shí)體類字段大小寫及字段獲取不到值問題

    mybatis實(shí)體類字段大小寫及字段獲取不到值問題

    這篇文章主要介紹了mybatis實(shí)體類字段大小寫及字段獲取不到值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot集成thymeleaf瀏覽器404的解決方案

    SpringBoot集成thymeleaf瀏覽器404的解決方案

    前后端不分離的古早 SpringMVC 項(xiàng)目通常會使用 thymeleaf 模板引擎來完成 html 頁面與后端接口之間的交互,如果要將項(xiàng)目架構(gòu)升級成 SpringBoot , thymeleaf 也可以照常集成,但有時候會踩到一些坑,所以本文給大家介紹了SpringBoot集成thymeleaf瀏覽器404的解決方案
    2024-12-12
  • 概述Java的struts2框架

    概述Java的struts2框架

    本篇文章主要對struts2框架概念、優(yōu)缺點(diǎn)進(jìn)行簡要概述。相信會對大家學(xué)習(xí)Java有所幫助,需要的朋友一起來看下吧
    2016-12-12
  • 解決springboot 2.x集成log4j2調(diào)試日志無法關(guān)閉的問題

    解決springboot 2.x集成log4j2調(diào)試日志無法關(guān)閉的問題

    這篇文章主要介紹了解決springboot 2.x集成log4j2調(diào)試日志無法關(guān)閉的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java二維數(shù)組指定不同長度實(shí)例方法

    java二維數(shù)組指定不同長度實(shí)例方法

    在本篇內(nèi)容里小編給大家分享了一篇關(guān)于java二維數(shù)組指定不同長度實(shí)例方法,有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • java 實(shí)現(xiàn)圖片像素質(zhì)量壓縮與圖片長寬縮放

    java 實(shí)現(xiàn)圖片像素質(zhì)量壓縮與圖片長寬縮放

    這篇文章主要介紹了java 實(shí)現(xiàn)圖片像素質(zhì)量壓縮與圖片長寬縮放,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java線程生命周期圖文詳細(xì)講解

    Java線程生命周期圖文詳細(xì)講解

    在java中,任何對象都要有生命周期,線程也不例外,它也有自己的生命周期。線程的整個生命周期可以分為5個階段,分別是新建狀態(tài)、就緒狀態(tài)、運(yùn)行狀態(tài)、阻塞狀態(tài)和死亡狀態(tài)
    2023-01-01
  • Java線程阻塞方法sleep()與wait()的全面講解

    Java線程阻塞方法sleep()與wait()的全面講解

    這篇文章主要介紹了Java線程阻塞方法sleep()與wait()的全面講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論

霍邱县| 泊头市| 漾濞| 麟游县| 青岛市| 五台县| 东至县| 汝城县| 乳山市| 修水县| 龙山县| 界首市| 宁德市| 丰城市| 松滋市| 望城县| 调兵山市| 黑河市| 安新县| 三江| 东海县| 承德县| 叶城县| 清新县| 阿瓦提县| 平潭县| 高清| 东兰县| 镇沅| 正安县| 榆社县| 乐东| 宁化县| 定安县| 清苑县| 东至县| 炎陵县| 古蔺县| 山丹县| 白城市| 海门市|