Java 如何通过docx4j将图像插入xlsx
我尝试使用docx4j在xlsx文件中插入图像,但是图像的大小只有一个单元格 到目前为止,我的代码是: 以及调用的方法:Java 如何通过docx4j将图像插入xlsx,java,excel,docx4j,Java,Excel,Docx4j,我尝试使用docx4j在xlsx文件中插入图像,但是图像的大小只有一个单元格 到目前为止,我的代码是: 以及调用的方法: public static void addBarcode(CTDrawing drawing, BarcodeData data, String imageRelID, int col, int row) { org.docx4j.dml.ObjectFactory dmlObjectFactory = new org.docx4j.dml.ObjectFactor
public static void addBarcode(CTDrawing drawing, BarcodeData data, String imageRelID, int col, int row) {
org.docx4j.dml.ObjectFactory dmlObjectFactory = new org.docx4j.dml.ObjectFactory();
org.docx4j.dml.spreadsheetdrawing.ObjectFactory dmlspreadsheetdrawingObjectFactory = new org.docx4j.dml.spreadsheetdrawing.ObjectFactory();
// <twoCellAnchor>
CTTwoCellAnchor twoCellAnchor = dmlspreadsheetdrawingObjectFactory.createCTTwoCellAnchor();
twoCellAnchor.setEditAs(org.docx4j.dml.spreadsheetdrawing.STEditAs.ONE_CELL);
drawing.getEGAnchor().add(twoCellAnchor);
// <twoCellAnchor/from>
CTMarker from = dmlspreadsheetdrawingObjectFactory.createCTMarker();
twoCellAnchor.setFrom(from);
from.setCol(col);
from.setColOff(0);
from.setRow(row);
from.setRowOff(0);
// <twoCellAnchor/to>
CTMarker to = dmlspreadsheetdrawingObjectFactory.createCTMarker();
twoCellAnchor.setTo(to);
to.setCol(col);
to.setColOff(data.width * 9525);
to.setRow(row);
to.setRowOff(data.height * 9525);
// <twoCellAnchor/pic>
CTPicture pic = dmlspreadsheetdrawingObjectFactory.createCTPicture();
twoCellAnchor.setPic(pic);
pic.setMacro(null);
// <twoCellAnchor/clientData>
CTAnchorClientData clientData = dmlspreadsheetdrawingObjectFactory.createCTAnchorClientData();
twoCellAnchor.setClientData(clientData);
// <twoCellAnchor/pic/nvPicPr>
CTPictureNonVisual nvPicPr = dmlspreadsheetdrawingObjectFactory.createCTPictureNonVisual();
pic.setNvPicPr(nvPicPr);
// <twoCellAnchor/pic/nvPicPr/cNvPr>
CTNonVisualDrawingProps cNvPr = dmlObjectFactory.createCTNonVisualDrawingProps();
nvPicPr.setCNvPr(cNvPr);
cNvPr.setDescr(null);
cNvPr.setName("Barcode");
cNvPr.setId(1);
// <twoCellAnchor/pic/nvPicPr/cNvPicPr>
CTNonVisualPictureProperties cNvPicPr = dmlObjectFactory.createCTNonVisualPictureProperties();
nvPicPr.setCNvPicPr(cNvPicPr);
// <twoCellAnchor/pic/nvPicPr/cNvPr/picLocks>
CTPictureLocking picLocks = dmlObjectFactory.createCTPictureLocking();
cNvPicPr.setPicLocks(picLocks);
picLocks.setNoChangeAspect(true);
// <twoCellAnchor/pic/blipFill>
CTBlipFillProperties blipFill = dmlObjectFactory.createCTBlipFillProperties();
pic.setBlipFill(blipFill);
// <twoCellAnchor/pic/blipFill/blip>
CTBlip blip = dmlObjectFactory.createCTBlip();
blipFill.setBlip(blip);
blip.setLink(null);
blip.setEmbed(imageRelID);
blip.setCstate(null); // org.docx4j.dml.STBlipCompression.NONE);
// <twoCellAnchor/pic/blipFill/blip/extLst>
CTOfficeArtExtensionList extLst = dmlObjectFactory.createCTOfficeArtExtensionList();
blip.setExtLst(extLst);
// <twoCellAnchor/pic/blipFill/blip/extLst/ext>
// CTOfficeArtExtension ext =
// dmlObjectFactory.createCTOfficeArtExtension();
// ext.setUri("{28A0092B-C50C-407E-A947-70E740481C1C}");
// extLst.getExt().add(ext);
// <twoCellAnchor/pic/blipFill/stretch>
CTStretchInfoProperties stretch = dmlObjectFactory.createCTStretchInfoProperties();
blipFill.setStretch(stretch);
// <twoCellAnchor/pic/blipFill/stretch/fillRect>
CTRelativeRect fillRect = dmlObjectFactory.createCTRelativeRect();
stretch.setFillRect(fillRect);
fillRect.setR(null);
fillRect.setT(null);
fillRect.setL(null);
fillRect.setB(null);
// <twoCellAnchor/pic/spPr>
CTShapeProperties spPr = dmlObjectFactory.createCTShapeProperties();
pic.setSpPr(spPr);
// <twoCellAnchor/pic/spPr/xfrm>
CTTransform2D xfrm = dmlObjectFactory.createCTTransform2D();
spPr.setXfrm(xfrm);
xfrm.setRot(null); // Rotation 0
// <twoCellAnchor/pic/spPr/xfrm/off>
CTPoint2D off = dmlObjectFactory.createCTPoint2D();
xfrm.setOff(off);
off.setY(0);
off.setX(0);
// <twoCellAnchor/pic/spPr/xfrm/ext>
CTPositiveSize2D ext = dmlObjectFactory.createCTPositiveSize2D();
xfrm.setExt(ext);
ext.setCx(data.width * 9525);
ext.setCy(data.height * 9525);
// <twoCellAnchor/pic/spPr/prstGeom>
CTPresetGeometry2D prstGeom = dmlObjectFactory.createCTPresetGeometry2D();
spPr.setPrstGeom(prstGeom);
prstGeom.setPrst(org.docx4j.dml.STShapeType.RECT);
// <twoCellAnchor/pic/spPr/prstGeom/avLst>
CTGeomGuideList avLst = dmlObjectFactory.createCTGeomGuideList();
prstGeom.setAvLst(avLst);
}
我猜您已经使用docx4j webapp从示例xlsx生成了该代码,但是您需要检查xlsx xml以了解图像大小是如何确定的。如果你不能解决这个问题,就发布一个新的问题。这是一个通用的openxml、xlsx问题,而不是docx4j问题。一旦您了解了它是如何完成的,那么您就可以修改这个问题,以解决您在用docx4j表达时遇到的任何问题;导入org.docx4j.openpackaging.io.SaveToZipFile;导入org.docx4j.openpackaging.packages.SpreadsheetMLPackage;导入org.docx4j.openpackaging.parts.*;导入org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;导入org.docx4j.openpackaging.parts.relationships.RelationshipsPart.addPartBehavior;导入org.docx4j.relationships.Relationship;导入org.xlsx4j.sml.*;----并且使用docx4j而不是openxml
public static void addBarcode(CTDrawing drawing, BarcodeData data, String imageRelID, int col, int row) {
org.docx4j.dml.ObjectFactory dmlObjectFactory = new org.docx4j.dml.ObjectFactory();
org.docx4j.dml.spreadsheetdrawing.ObjectFactory dmlspreadsheetdrawingObjectFactory = new org.docx4j.dml.spreadsheetdrawing.ObjectFactory();
// <twoCellAnchor>
CTTwoCellAnchor twoCellAnchor = dmlspreadsheetdrawingObjectFactory.createCTTwoCellAnchor();
twoCellAnchor.setEditAs(org.docx4j.dml.spreadsheetdrawing.STEditAs.ONE_CELL);
drawing.getEGAnchor().add(twoCellAnchor);
// <twoCellAnchor/from>
CTMarker from = dmlspreadsheetdrawingObjectFactory.createCTMarker();
twoCellAnchor.setFrom(from);
from.setCol(col);
from.setColOff(0);
from.setRow(row);
from.setRowOff(0);
// <twoCellAnchor/to>
CTMarker to = dmlspreadsheetdrawingObjectFactory.createCTMarker();
twoCellAnchor.setTo(to);
to.setCol(col);
to.setColOff(data.width * 9525);
to.setRow(row);
to.setRowOff(data.height * 9525);
// <twoCellAnchor/pic>
CTPicture pic = dmlspreadsheetdrawingObjectFactory.createCTPicture();
twoCellAnchor.setPic(pic);
pic.setMacro(null);
// <twoCellAnchor/clientData>
CTAnchorClientData clientData = dmlspreadsheetdrawingObjectFactory.createCTAnchorClientData();
twoCellAnchor.setClientData(clientData);
// <twoCellAnchor/pic/nvPicPr>
CTPictureNonVisual nvPicPr = dmlspreadsheetdrawingObjectFactory.createCTPictureNonVisual();
pic.setNvPicPr(nvPicPr);
// <twoCellAnchor/pic/nvPicPr/cNvPr>
CTNonVisualDrawingProps cNvPr = dmlObjectFactory.createCTNonVisualDrawingProps();
nvPicPr.setCNvPr(cNvPr);
cNvPr.setDescr(null);
cNvPr.setName("Barcode");
cNvPr.setId(1);
// <twoCellAnchor/pic/nvPicPr/cNvPicPr>
CTNonVisualPictureProperties cNvPicPr = dmlObjectFactory.createCTNonVisualPictureProperties();
nvPicPr.setCNvPicPr(cNvPicPr);
// <twoCellAnchor/pic/nvPicPr/cNvPr/picLocks>
CTPictureLocking picLocks = dmlObjectFactory.createCTPictureLocking();
cNvPicPr.setPicLocks(picLocks);
picLocks.setNoChangeAspect(true);
// <twoCellAnchor/pic/blipFill>
CTBlipFillProperties blipFill = dmlObjectFactory.createCTBlipFillProperties();
pic.setBlipFill(blipFill);
// <twoCellAnchor/pic/blipFill/blip>
CTBlip blip = dmlObjectFactory.createCTBlip();
blipFill.setBlip(blip);
blip.setLink(null);
blip.setEmbed(imageRelID);
blip.setCstate(null); // org.docx4j.dml.STBlipCompression.NONE);
// <twoCellAnchor/pic/blipFill/blip/extLst>
CTOfficeArtExtensionList extLst = dmlObjectFactory.createCTOfficeArtExtensionList();
blip.setExtLst(extLst);
// <twoCellAnchor/pic/blipFill/blip/extLst/ext>
// CTOfficeArtExtension ext =
// dmlObjectFactory.createCTOfficeArtExtension();
// ext.setUri("{28A0092B-C50C-407E-A947-70E740481C1C}");
// extLst.getExt().add(ext);
// <twoCellAnchor/pic/blipFill/stretch>
CTStretchInfoProperties stretch = dmlObjectFactory.createCTStretchInfoProperties();
blipFill.setStretch(stretch);
// <twoCellAnchor/pic/blipFill/stretch/fillRect>
CTRelativeRect fillRect = dmlObjectFactory.createCTRelativeRect();
stretch.setFillRect(fillRect);
fillRect.setR(null);
fillRect.setT(null);
fillRect.setL(null);
fillRect.setB(null);
// <twoCellAnchor/pic/spPr>
CTShapeProperties spPr = dmlObjectFactory.createCTShapeProperties();
pic.setSpPr(spPr);
// <twoCellAnchor/pic/spPr/xfrm>
CTTransform2D xfrm = dmlObjectFactory.createCTTransform2D();
spPr.setXfrm(xfrm);
xfrm.setRot(null); // Rotation 0
// <twoCellAnchor/pic/spPr/xfrm/off>
CTPoint2D off = dmlObjectFactory.createCTPoint2D();
xfrm.setOff(off);
off.setY(0);
off.setX(0);
// <twoCellAnchor/pic/spPr/xfrm/ext>
CTPositiveSize2D ext = dmlObjectFactory.createCTPositiveSize2D();
xfrm.setExt(ext);
ext.setCx(data.width * 9525);
ext.setCy(data.height * 9525);
// <twoCellAnchor/pic/spPr/prstGeom>
CTPresetGeometry2D prstGeom = dmlObjectFactory.createCTPresetGeometry2D();
spPr.setPrstGeom(prstGeom);
prstGeom.setPrst(org.docx4j.dml.STShapeType.RECT);
// <twoCellAnchor/pic/spPr/prstGeom/avLst>
CTGeomGuideList avLst = dmlObjectFactory.createCTGeomGuideList();
prstGeom.setAvLst(avLst);
}