0
是否可以使用Apache POI將任何形狀插入到word文檔中?據我所知,有辦法在文檔中插入圖片。但有可能使用POI繪製我自己的盒子或圓形或矩形。如果可能的話,請幫助我這樣做。 謝謝。使用Apache POI將任何形狀插入到word文檔中
是否可以使用Apache POI將任何形狀插入到word文檔中?據我所知,有辦法在文檔中插入圖片。但有可能使用POI繪製我自己的盒子或圓形或矩形。如果可能的話,請幫助我這樣做。 謝謝。使用Apache POI將任何形狀插入到word文檔中
下面是使用docx4j以編程方式創建文本框,橢圓和矩形的示例。
POI將非常相似(它使用Xml Bean,而不是JAXB)。
而不是全部在代碼中,你可以改爲使用一塊XML; pRectangleViaXML方法顯示該方法。
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import org.docx4j.XmlUtils;
import org.docx4j.jaxb.Context;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.vml.CTOval;
import org.docx4j.vml.CTPath;
import org.docx4j.vml.CTRect;
import org.docx4j.vml.CTShape;
import org.docx4j.vml.CTShapetype;
import org.docx4j.vml.CTStroke;
import org.docx4j.vml.CTTextbox;
import org.docx4j.wml.BooleanDefaultTrue;
import org.docx4j.wml.CTLanguage;
import org.docx4j.wml.CTTxbxContent;
import org.docx4j.wml.P;
import org.docx4j.wml.PPr;
import org.docx4j.wml.ParaRPr;
import org.docx4j.wml.Pict;
import org.docx4j.wml.R;
import org.docx4j.wml.RPr;
import org.docx4j.wml.Text;
public class PictDemo {
static org.docx4j.wml.ObjectFactory wmlObjectFactory = Context.getWmlObjectFactory();
public static void main(String[] args) throws Exception {
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
MainDocumentPart mdp = wordMLPackage.getMainDocumentPart();
mdp.getContent().add(pTextBox());
mdp.getContent().add(pOval());
// mdp.getContent().add(pRectangle());
mdp.getContent().add(pRectangleViaXML());
// Pretty print the main document part
System.out.println(
XmlUtils.marshaltoString(mdp.getJaxbElement(), true, true));
String filename = System.getProperty("user.dir") + "/OUT_PictDemo.docx";
wordMLPackage.save(new java.io.File(filename));
}
public static P pTextBox() {
P p = wmlObjectFactory.createP();
// Create object for r
R r = wmlObjectFactory.createR();
p.getContent().add(r);
// Create object for rPr
RPr rpr = wmlObjectFactory.createRPr();
r.setRPr(rpr);
// Create object for noProof
BooleanDefaultTrue booleandefaulttrue = wmlObjectFactory.createBooleanDefaultTrue();
rpr.setNoProof(booleandefaulttrue);
// Create object for pict (wrapped in JAXBElement)
Pict pict = wmlObjectFactory.createPict();
JAXBElement<org.docx4j.wml.Pict> pictWrapped = wmlObjectFactory.createRPict(pict);
r.getContent().add(pictWrapped);
org.docx4j.vml.ObjectFactory vmlObjectFactory = new org.docx4j.vml.ObjectFactory();
// Create object for shapetype (wrapped in JAXBElement)
CTShapetype shapetype = vmlObjectFactory.createCTShapetype();
JAXBElement<org.docx4j.vml.CTShapetype> shapetypeWrapped = vmlObjectFactory.createShapetype(shapetype);
pict.getAnyAndAny().add(shapetypeWrapped);
// Create object for stroke (wrapped in JAXBElement)
CTStroke stroke = vmlObjectFactory.createCTStroke();
JAXBElement<org.docx4j.vml.CTStroke> strokeWrapped = vmlObjectFactory.createStroke(stroke);
shapetype.getEGShapeElements().add(strokeWrapped);
stroke.setJoinstyle(org.docx4j.vml.STStrokeJoinStyle.MITER);
// Create object for path (wrapped in JAXBElement)
CTPath path = vmlObjectFactory.createCTPath();
JAXBElement<org.docx4j.vml.CTPath> pathWrapped = vmlObjectFactory.createPath(path);
shapetype.getEGShapeElements().add(pathWrapped);
path.setGradientshapeok(org.docx4j.vml.STTrueFalse.T);
path.setConnecttype(org.docx4j.vml.officedrawing.STConnectType.RECT);
shapetype.setCoordsize("21600,21600");
shapetype.setSpt(new Float(202.0));
shapetype.setConnectortype(org.docx4j.vml.officedrawing.STConnectorType.STRAIGHT);
shapetype.setVmlId("_x0000_t202");
shapetype.setInsetmode(org.docx4j.vml.officedrawing.STInsetMode.CUSTOM);
shapetype.setHralign(org.docx4j.vml.officedrawing.STHrAlign.LEFT);
shapetype.setPath("m,l,21600r21600,l21600,xe");
// Create object for shape (wrapped in JAXBElement)
CTShape shape = vmlObjectFactory.createCTShape();
JAXBElement<org.docx4j.vml.CTShape> shapeWrapped = vmlObjectFactory.createShape(shape);
pict.getAnyAndAny().add(shapeWrapped);
// Create object for textbox (wrapped in JAXBElement)
CTTextbox textbox = vmlObjectFactory.createCTTextbox();
JAXBElement<org.docx4j.vml.CTTextbox> textboxWrapped = vmlObjectFactory.createTextbox(textbox);
shape.getEGShapeElements().add(textboxWrapped);
// Create object for txbxContent
CTTxbxContent txbxcontent = wmlObjectFactory.createCTTxbxContent();
textbox.setTxbxContent(txbxcontent);
// Create object for p
P p2 = wmlObjectFactory.createP();
txbxcontent.getContent().add(p2);
// Create object for pPr
PPr ppr2 = wmlObjectFactory.createPPr();
p2.setPPr(ppr2);
// Create object for rPr
ParaRPr pararpr2 = wmlObjectFactory.createParaRPr();
ppr2.setRPr(pararpr2);
// Create object for lang
CTLanguage language2 = wmlObjectFactory.createCTLanguage();
pararpr2.setLang(language2);
language2.setVal("en-AU");
// Create object for r
R r2 = wmlObjectFactory.createR();
p2.getContent().add(r2);
// Create object for rPr
RPr rpr2 = wmlObjectFactory.createRPr();
r2.setRPr(rpr2);
// Create object for lang
CTLanguage language3 = wmlObjectFactory.createCTLanguage();
rpr2.setLang(language3);
language3.setVal("en-AU");
// Create object for t (wrapped in JAXBElement)
Text text = wmlObjectFactory.createText();
JAXBElement<org.docx4j.wml.Text> textWrapped = wmlObjectFactory.createRT(text);
r2.getContent().add(textWrapped);
text.setValue("my text box");
textbox.setInsetmode(org.docx4j.vml.officedrawing.STInsetMode.CUSTOM);
shape.setStrokeweight(".5pt");
shape.setFillcolor("white [3201]");
shape.setConnectortype(org.docx4j.vml.officedrawing.STConnectorType.STRAIGHT);
shape.setVmlId("Text Box 5");
shape.setStyle("position:absolute;margin-left:39pt;margin-top:17.25pt;width:1in;height:1in;z-index:251659264;visibility:visible;mso-wrap-style:none;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;v-text-anchor:top");
shape.setSpid("_x0000_s1026");
shape.setInsetmode(org.docx4j.vml.officedrawing.STInsetMode.CUSTOM);
shape.setHralign(org.docx4j.vml.officedrawing.STHrAlign.LEFT);
shape.setType("#_x0000_t202");
return p;
}
public static P pOval() {
P p = wmlObjectFactory.createP();
// Create object for r
R r = wmlObjectFactory.createR();
p.getContent().add(r);
// Create object for rPr
RPr rpr = wmlObjectFactory.createRPr();
r.setRPr(rpr);
// Create object for noProof
BooleanDefaultTrue booleandefaulttrue = wmlObjectFactory.createBooleanDefaultTrue();
rpr.setNoProof(booleandefaulttrue);
// Create object for pict (wrapped in JAXBElement)
Pict pict = wmlObjectFactory.createPict();
JAXBElement<org.docx4j.wml.Pict> pictWrapped = wmlObjectFactory.createRPict(pict);
r.getContent().add(pictWrapped);
org.docx4j.vml.ObjectFactory vmlObjectFactory = new org.docx4j.vml.ObjectFactory();
// Create object for oval (wrapped in JAXBElement)
CTOval oval = vmlObjectFactory.createCTOval();
JAXBElement<org.docx4j.vml.CTOval> ovalWrapped = vmlObjectFactory.createOval(oval);
pict.getAnyAndAny().add(ovalWrapped);
oval.setStrokecolor("#243f60 [1604]");
oval.setStrokeweight("2pt");
oval.setFillcolor("#4f81bd [3204]");
oval.setConnectortype(org.docx4j.vml.officedrawing.STConnectorType.STRAIGHT);
oval.setVmlId("Oval 6");
oval.setStyle("position:absolute;margin-left:183.75pt;margin-top:19.75pt;width:103.5pt;height:105.75pt;z-index:251660288;visibility:visible;mso-wrap-style:square;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;v-text-anchor:middle");
oval.setSpid("_x0000_s1026");
oval.setInsetmode(org.docx4j.vml.officedrawing.STInsetMode.CUSTOM);
oval.setHralign(org.docx4j.vml.officedrawing.STHrAlign.LEFT);
return p;
}
public static P pRectangle() {
P p = wmlObjectFactory.createP();
// Create object for r
R r = wmlObjectFactory.createR();
p.getContent().add(r);
// Create object for rPr
RPr rpr = wmlObjectFactory.createRPr();
r.setRPr(rpr);
// Create object for noProof
BooleanDefaultTrue booleandefaulttrue = wmlObjectFactory.createBooleanDefaultTrue();
rpr.setNoProof(booleandefaulttrue);
// Create object for pict (wrapped in JAXBElement)
Pict pict = wmlObjectFactory.createPict();
JAXBElement<org.docx4j.wml.Pict> pictWrapped = wmlObjectFactory.createRPict(pict);
r.getContent().add(pictWrapped);
org.docx4j.vml.ObjectFactory vmlObjectFactory = new org.docx4j.vml.ObjectFactory();
// Create object for rect (wrapped in JAXBElement)
CTRect rect = vmlObjectFactory.createCTRect();
JAXBElement<org.docx4j.vml.CTRect> rectWrapped = vmlObjectFactory.createRect(rect);
pict.getAnyAndAny().add(rectWrapped);
rect.setStrokecolor("#243f60 [1604]");
rect.setStrokeweight("2pt");
rect.setFillcolor("#4f81bd [3204]");
rect.setConnectortype(org.docx4j.vml.officedrawing.STConnectorType.STRAIGHT);
rect.setVmlId("Rectangle 8");
rect.setStyle("position:absolute;margin-left:48.75pt;margin-top:13.85pt;width:115.5pt;height:54pt;z-index:251661312;visibility:visible;mso-wrap-style:square;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;v-text-anchor:middle");
rect.setSpid("_x0000_s1026");
rect.setInsetmode(org.docx4j.vml.officedrawing.STInsetMode.CUSTOM);
rect.setHralign(org.docx4j.vml.officedrawing.STHrAlign.LEFT);
return p;
}
public static P pRectangleViaXML() throws JAXBException {
String openXML = "<w:p xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:o=\"urn:schemas-microsoft-com:office:office\">"
+ "<w:pPr>"
+ "<w:rPr>"
+ "<w:lang w:val=\"en-AU\"/>"
+"</w:rPr>"
+"</w:pPr>"
+ "<w:r>"
+ "<w:rPr>"
+ "<w:noProof/>"
+"</w:rPr>"
+ "<w:pict>"
+ "<v:rect fillcolor=\"#4f81bd [3204]\" id=\"Rectangle 8\" o:spid=\"_x0000_s1026\" strokecolor=\"#243f60 [1604]\" strokeweight=\"2pt\" style=\"position:absolute;margin-left:48.75pt;margin-top:13.85pt;width:115.5pt;height:54pt;z-index:251661312;visibility:visible;mso-wrap-style:square;mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;mso-position-horizontal-relative:text;mso-position-vertical:absolute;mso-position-vertical-relative:text;v-text-anchor:middle\"/>"
+"</w:pict>"
+"</w:r>"
+"</w:p>";
return (P)XmlUtils.unmarshalString(openXML);
}
}
非常感謝。與POI相比,它看起來更好。 –