Javaはword文書のテキストを置換し、位置を指定して写真を挿入します。
まず必要な依存カバンを言います。
上記のように、置換が必要な文字列の場所「$1」は「1231」であり、指定された場所にブックマークを挿入し、「test」と命名する。 ,挿入された画像は以下の通りです。
私もあまり研究に行ったことがありません。自分で測ってみます。
1.デモ
締め括りをつける
以上は小编が皆さんに绍介したJavaにword文书の文字を変えて位置を指定して写真を挿入しました。皆さんに何かお聞きしたいことがあれば、メッセージをください。ここでも私たちのサイトを応援してくれてありがとうございます。
<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.デモ
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(" ", 3);
dataset.setValue(" ", 3);
JFreeChart chart = ChartFactory.createPieChart3D(null, dataset, true, false, false);
chart.getLegend().setItemFont(new Font(" ", Font.BOLD, 15)); //
// TextTitle title = new TextTitle(titleString);
// title.setFont(new Font(" ", Font.ITALIC, 20));//
// 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} 。
piePlot.setLabelGenerator(generator);//
piePlot.setLabelFont(new Font(" ", Font.ITALIC, 15));//
piePlot.setNoDataMessage(" ");
piePlot.setCircular(false);
piePlot.setLabelGap(0.02D);
piePlot.setIgnoreNullValues(true);//
piePlot.setIgnoreZeroValues(true);//
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();
//
RangeFinder rt = new RangeFinder("CTBookmark", "CTMarkupRange");
new TraversalUtil(paragraphs, rt);
for (CTBookmark bm : rt.getStarts()) {
if (bm.getName().equals("test")) {// test word
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 ,
P p = (P) (bm.getParent());
ObjectFactory factory = new ObjectFactory();
// R , , 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) {
}
}
}
最後の効果図は以下の通りです。締め括りをつける
以上は小编が皆さんに绍介したJavaにword文书の文字を変えて位置を指定して写真を挿入しました。皆さんに何かお聞きしたいことがあれば、メッセージをください。ここでも私たちのサイトを応援してくれてありがとうございます。