docx4j 在页眉同时增加图片和文字的方法
2017-03-09 11:35
405 查看
HTML方式建上一遍文章,本文章直接用代码加入图片和文字,代码如下:
import org.docx4j.Docx4J;
import org.docx4j.dml.wordprocessingDrawing.Inline;
import org.docx4j.jaxb.Context;
import org.docx4j.model.structure.SectionWrapper;
import org.docx4j.openpackaging.exceptions.InvalidFormatException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.Part;
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
import org.docx4j.openpackaging.parts.WordprocessingML.HeaderPart;
import org.docx4j.relationships.Relationship;
import org.docx4j.utils.BufferUtil;
import org.docx4j.wml.Hdr;
import org.docx4j.wml.HdrFtrRef;
import org.docx4j.wml.HeaderReference;
import org.docx4j.wml.Jc;
import org.docx4j.wml.JcEnumeration;
import org.docx4j.wml.ObjectFactory;
import org.docx4j.wml.P;
import org.docx4j.wml.PPr;
import org.docx4j.wml.PPrBase.PBdr;
import org.docx4j.wml.PPrBase.Spacing;
import org.docx4j.wml.R.Tab;
import org.docx4j.wml.STBorder;
import org.docx4j.wml.STLineSpacingRule;
import org.docx4j.wml.SectPr;
import org.docx4j.wml.Text;
public class HeaderFooterCreate {
private
static ObjectFactory objectFactory =
new ObjectFactory();
public
static void main(String[]
args) throws Exception {
WordprocessingMLPackage
wordMLPackage = WordprocessingMLPackage.createPackage();
ObjectFactory factory = Context.getWmlObjectFactory();
Relationship relationship = createHeaderPart(wordMLPackage);
createHeaderReference(wordMLPackage,
relationship,factory);
Docx4J.save(wordMLPackage,
new File("OUT_HeaderFooterCreate.docx") );
}
public
static Relationship createHeaderPart(
WordprocessingMLPackage
wordprocessingMLPackage)
throws Exception {
HeaderPart headerPart =
new HeaderPart();
Relationship rel =
wordprocessingMLPackage.getMainDocumentPart()
.addTargetPart(headerPart);
headerPart.setJaxbElement(getHdr(wordprocessingMLPackage,
headerPart));
return
rel;
}
public
static void createHeaderReference(
WordprocessingMLPackage
wordprocessingMLPackage,
Relationship relationship, ObjectFactory
factory)
throws InvalidFormatException {
List<SectionWrapper>
sections = wordprocessingMLPackage.getDocumentModel().getSections();
SectPr sectPr =
sections.get(sections.size() - 1).getSectPr();
if (sectPr==null ) {
sectPr =
objectFactory.createSectPr();
wordprocessingMLPackage.getMainDocumentPart().addObject(sectPr);
sections.get(sections.size() - 1).setSectPr(sectPr);
}
HeaderReference
headerReference = objectFactory.createHeaderReference();
headerReference.setId(relationship.getId());
headerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(headerReference);// add header or
}
public
static Hdr getHdr(WordprocessingMLPackage wordprocessingMLPackage,
Part sourcePart)
throws Exception {
Hdr hdr =
objectFactory.createHdr();
File file =
new File("./iyw.png" );
java.io.InputStream
is = new java.io.FileInputStream(file );
hdr.getContent().add(
newImage(wordprocessingMLPackage,
sourcePart,
BufferUtil.getBytesFromInputStream(is),
"filename",
"alttext", 1, 2
)
);
return
hdr;
}
public
static org.docx4j.wml.P newImage( WordprocessingMLPackage
wordMLPackage,
Part sourcePart,
byte[]
bytes,
String filenameHint, String
altText,
int
id1, int id2)
throws Exception {
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage,
sourcePart,
bytes);
Inline inline =
imagePart.createImageInline( filenameHint,
altText,
id1,
id2, false);
org.docx4j.wml.ObjectFactory
factory = Context.getWmlObjectFactory();
org.docx4j.wml.P
p = factory.createP();
org.docx4j.wml.R
run = factory.createR();
p.getContent().add(run);
org.docx4j.wml.Drawing
drawing = factory.createDrawing();
run.getContent().add(drawing);
drawing.getAnchorOrInline().add(inline);
org.docx4j.wml.R
runText = factory.createR();
p.getContent().add(runText);
Tab rTab =
new Tab();
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
org.docx4j.wml.R
runText1 = factory.createR();
p.getContent().add(runText1);
Text text1 =
factory.createText();
runText1.getContent().add(text1);
text1.setValue("页眉文字");
PPr pPr =
p.getPPr();
if (pPr ==
null) {
pPr =
factory.createPPr();
}
Jc jc = pPr.getJc();
if (jc ==
null) {
jc = new Jc();
}
jc.setVal(JcEnumeration.LEFT);
pPr.setJc(jc);
PBdr pBdr=pPr.getPBdr();
if(pBdr==null){
pBdr=factory.createPPrBasePBdr();
}
CTBorder value=new CTBorder();
value.setVal(STBorder.SINGLE);
value.setColor("000000");
value.setSpace(new BigInteger("0"));
value.setSz(new BigInteger("0"));
pBdr.setBetween(value);
pPr.setPBdr(pBdr);
p.setPPr(pPr);
setParagraphSpacing(factory,
p, JcEnumeration.BOTH,
"0", "0");
return
p;
}
//设置段落间距
public static
void setParagraphSpacing(ObjectFactory
factory, P p,
JcEnumeration jcEnumeration,String
before,String after) {
PPr pPr =
p.getPPr();
if (pPr ==
null) {
pPr =
factory.createPPr();
}
Jc jc = pPr.getJc();
if (jc ==
null) {
jc = new Jc();
}
jc.setVal(jcEnumeration);
pPr.setJc(jc);
Spacing spacing=new Spacing();
spacing.setBefore(new BigInteger(before));
spacing.setAfter(new BigInteger(after));
spacing.setLineRule(STLineSpacingRule.AUTO);
pPr.setSpacing(spacing);
p.setPPr(pPr);
}
}
import org.docx4j.Docx4J;
import org.docx4j.dml.wordprocessingDrawing.Inline;
import org.docx4j.jaxb.Context;
import org.docx4j.model.structure.SectionWrapper;
import org.docx4j.openpackaging.exceptions.InvalidFormatException;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.Part;
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
import org.docx4j.openpackaging.parts.WordprocessingML.HeaderPart;
import org.docx4j.relationships.Relationship;
import org.docx4j.utils.BufferUtil;
import org.docx4j.wml.Hdr;
import org.docx4j.wml.HdrFtrRef;
import org.docx4j.wml.HeaderReference;
import org.docx4j.wml.Jc;
import org.docx4j.wml.JcEnumeration;
import org.docx4j.wml.ObjectFactory;
import org.docx4j.wml.P;
import org.docx4j.wml.PPr;
import org.docx4j.wml.PPrBase.PBdr;
import org.docx4j.wml.PPrBase.Spacing;
import org.docx4j.wml.R.Tab;
import org.docx4j.wml.STBorder;
import org.docx4j.wml.STLineSpacingRule;
import org.docx4j.wml.SectPr;
import org.docx4j.wml.Text;
public class HeaderFooterCreate {
private
static ObjectFactory objectFactory =
new ObjectFactory();
public
static void main(String[]
args) throws Exception {
WordprocessingMLPackage
wordMLPackage = WordprocessingMLPackage.createPackage();
ObjectFactory factory = Context.getWmlObjectFactory();
Relationship relationship = createHeaderPart(wordMLPackage);
createHeaderReference(wordMLPackage,
relationship,factory);
Docx4J.save(wordMLPackage,
new File("OUT_HeaderFooterCreate.docx") );
}
public
static Relationship createHeaderPart(
WordprocessingMLPackage
wordprocessingMLPackage)
throws Exception {
HeaderPart headerPart =
new HeaderPart();
Relationship rel =
wordprocessingMLPackage.getMainDocumentPart()
.addTargetPart(headerPart);
headerPart.setJaxbElement(getHdr(wordprocessingMLPackage,
headerPart));
return
rel;
}
public
static void createHeaderReference(
WordprocessingMLPackage
wordprocessingMLPackage,
Relationship relationship, ObjectFactory
factory)
throws InvalidFormatException {
List<SectionWrapper>
sections = wordprocessingMLPackage.getDocumentModel().getSections();
SectPr sectPr =
sections.get(sections.size() - 1).getSectPr();
if (sectPr==null ) {
sectPr =
objectFactory.createSectPr();
wordprocessingMLPackage.getMainDocumentPart().addObject(sectPr);
sections.get(sections.size() - 1).setSectPr(sectPr);
}
HeaderReference
headerReference = objectFactory.createHeaderReference();
headerReference.setId(relationship.getId());
headerReference.setType(HdrFtrRef.DEFAULT);
sectPr.getEGHdrFtrReferences().add(headerReference);// add header or
}
public
static Hdr getHdr(WordprocessingMLPackage wordprocessingMLPackage,
Part sourcePart)
throws Exception {
Hdr hdr =
objectFactory.createHdr();
File file =
new File("./iyw.png" );
java.io.InputStream
is = new java.io.FileInputStream(file );
hdr.getContent().add(
newImage(wordprocessingMLPackage,
sourcePart,
BufferUtil.getBytesFromInputStream(is),
"filename",
"alttext", 1, 2
)
);
return
hdr;
}
public
static org.docx4j.wml.P newImage( WordprocessingMLPackage
wordMLPackage,
Part sourcePart,
byte[]
bytes,
String filenameHint, String
altText,
int
id1, int id2)
throws Exception {
BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage,
sourcePart,
bytes);
Inline inline =
imagePart.createImageInline( filenameHint,
altText,
id1,
id2, false);
org.docx4j.wml.ObjectFactory
factory = Context.getWmlObjectFactory();
org.docx4j.wml.P
p = factory.createP();
org.docx4j.wml.R
run = factory.createR();
p.getContent().add(run);
org.docx4j.wml.Drawing
drawing = factory.createDrawing();
run.getContent().add(drawing);
drawing.getAnchorOrInline().add(inline);
org.docx4j.wml.R
runText = factory.createR();
p.getContent().add(runText);
Tab rTab =
new Tab();
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
runText.getContent().add(rTab);
org.docx4j.wml.R
runText1 = factory.createR();
p.getContent().add(runText1);
Text text1 =
factory.createText();
runText1.getContent().add(text1);
text1.setValue("页眉文字");
PPr pPr =
p.getPPr();
if (pPr ==
null) {
pPr =
factory.createPPr();
}
Jc jc = pPr.getJc();
if (jc ==
null) {
jc = new Jc();
}
jc.setVal(JcEnumeration.LEFT);
pPr.setJc(jc);
PBdr pBdr=pPr.getPBdr();
if(pBdr==null){
pBdr=factory.createPPrBasePBdr();
}
CTBorder value=new CTBorder();
value.setVal(STBorder.SINGLE);
value.setColor("000000");
value.setSpace(new BigInteger("0"));
value.setSz(new BigInteger("0"));
pBdr.setBetween(value);
pPr.setPBdr(pBdr);
p.setPPr(pPr);
setParagraphSpacing(factory,
p, JcEnumeration.BOTH,
"0", "0");
return
p;
}
//设置段落间距
public static
void setParagraphSpacing(ObjectFactory
factory, P p,
JcEnumeration jcEnumeration,String
before,String after) {
PPr pPr =
p.getPPr();
if (pPr ==
null) {
pPr =
factory.createPPr();
}
Jc jc = pPr.getJc();
if (jc ==
null) {
jc = new Jc();
}
jc.setVal(jcEnumeration);
pPr.setJc(jc);
Spacing spacing=new Spacing();
spacing.setBefore(new BigInteger(before));
spacing.setAfter(new BigInteger(after));
spacing.setLineRule(STLineSpacingRule.AUTO);
pPr.setSpacing(spacing);
p.setPPr(pPr);
}
}
相关文章推荐
- Docx4j 在页眉同时 添加logo图片和文字,logo图片显示在左边,文字显示在右边
- UIButton上同时显示图片和文字的方法
- UIButton上同时显示图片和文字的方法
- UIButton上同时显示图片和文字的方法
- Django实现图片文字同时提交的方法
- 表单图片文字同时上传的解决方法
- UIButton setImage setTitle上同时显示图片和文字的方法(最有效)
- UIButton上同时显示图片和文字的方法
- UIButton上同时显示图片和文字的方法
- Django实现图片文字同时提交的方法
- UIButton setImage setTitle上同时显示图片和文字的方法(最有效)
- UIButton上同时显示图片和文字的方法
- FileUpload控件上传图片并自动生成缩略图、自动生成带文字和图片的水印图的方法
- Asp.net 上传图片添半透明图片或文字水印的方法(二)
- 用图片代替文字时解决方法_主要应用于SEO或者在不支持CSS的浏览器下使用
- ASP.NET(VB) 给图片增加水印文字
- IT民工系列——c#制作图片水印(文字和图片同时添加)
- Photoshop 去掉图片上的文字的几个方法
- 一行文字内图片与文字垂直对齐的方法
- 图片文字垂直居中的最好方法