我以编程方式将图像粘贴到docx中。但结果是布局不适合我。面临着缺乏文件的问题。我需要改变图像包装(布局)。例如,我现在有这样一个:
但要这样:
UPD1:我做的:遍历段落,然后遍历运行,找到带有特殊书签的特定运行。在此运行中,我添加图片:
XWPFPicture pic = run.addPicture(
new ByteArrayInputStream(picSource),
Document.PICTURE_TYPE_PNG,
"pic",
Units.toEMU(100),
Units.toEMU(30));
org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTAnchor
CTWrapTight ctWrapTight = currentRun.getCTR().getDrawingList().get(0).addNewAnchor().addNewWrapTight();
CTWrapPath ctWrapPath = ctWrapTight.addNewWrapPolygon();
CTPoint2D ctStart = ctWrapPath.addNewStart();
ctStart.setX(0L);
ctStart.setY(0L);
CTPoint2D ctLineTo1 = ctWrapPath.addNewLineTo();
CTPoint2D ctLineTo2 = ctWrapPath.addNewLineTo();
CTPoint2D ctLineTo3 = ctWrapPath.addNewLineTo();
ctLineTo1.setX(21384L);
ctLineTo1.setY(20520L);
ctLineTo2.setX(21384L);
ctLineTo2.setY(0L);
ctLineTo3.setX(0L);
ctLineTo3.setY(0L);
ctWrapTight.setWrapText(STWrapText.BOTH_SIDES);
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.3</version>
</dependency>
虽然您已经找到了要使用的正确类--CTAnchor和后继类--但还需要考虑Anchor的XML模式定义。这说明需要的责任元素比定义包装的元素多得多。因此,使用org.openxmlformats.schemas.drawingml.x2006
中的一个类一个类,您可能正在编写页面式代码。对于这类问题,我首选的解决方案是提供xml
,所有需要的元素都由一些变量更新。然后可以解析这个XML
以获得所需的对象。
示例:
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.util.Units;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDrawing;
import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObject;
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTAnchor;
public class WordInsertPictures {
private static CTAnchor getAnchorWithGraphic(CTGraphicalObject graphicalobject,
String drawingDescr, int width, int height,
int left, int top) throws Exception {
String anchorXML =
"<wp:anchor xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" "
+"simplePos=\"0\" relativeHeight=\"0\" behindDoc=\"1\" locked=\"0\" layoutInCell=\"1\" allowOverlap=\"1\">"
+"<wp:simplePos x=\"0\" y=\"0\"/>"
+"<wp:positionH relativeFrom=\"column\"><wp:posOffset>"+left+"</wp:posOffset></wp:positionH>"
+"<wp:positionV relativeFrom=\"paragraph\"><wp:posOffset>"+top+"</wp:posOffset></wp:positionV>"
+"<wp:extent cx=\""+width+"\" cy=\""+height+"\"/>"
+"<wp:effectExtent l=\"0\" t=\"0\" r=\"0\" b=\"0\"/>"
+"<wp:wrapTight wrapText=\"bothSides\">"
+"<wp:wrapPolygon edited=\"0\">"
+"<wp:start x=\"0\" y=\"0\"/>"
+"<wp:lineTo x=\"0\" y=\"21600\"/>" //Square polygon 21600 x 21600 leads to wrap points in fully width x height
+"<wp:lineTo x=\"21600\" y=\"21600\"/>"// Why? I don't know. Try & error ;-).
+"<wp:lineTo x=\"21600\" y=\"0\"/>"
+"<wp:lineTo x=\"0\" y=\"0\"/>"
+"</wp:wrapPolygon>"
+"</wp:wrapTight>"
+"<wp:docPr id=\"1\" name=\"Drawing 0\" descr=\""+drawingDescr+"\"/><wp:cNvGraphicFramePr/>"
+"</wp:anchor>";
CTDrawing drawing = CTDrawing.Factory.parse(anchorXML);
CTAnchor anchor = drawing.getAnchorArray(0);
anchor.setGraphic(graphicalobject);
return anchor;
}
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("The picture in line: ");
InputStream in = new FileInputStream("samplePict.jpeg");
run.addPicture(in, Document.PICTURE_TYPE_JPEG, "samplePict.jpeg", Units.toEMU(100), Units.toEMU(30));
in.close();
run.setText(" text after the picture.");
paragraph = document.createParagraph();
run = paragraph.createRun();
in = new FileInputStream("samplePict.jpeg");
run.addPicture(in, Document.PICTURE_TYPE_JPEG, "samplePict.jpeg", Units.toEMU(100), Units.toEMU(30));
in.close();
CTDrawing drawing = run.getCTR().getDrawingArray(0);
CTGraphicalObject graphicalobject = drawing.getInlineArray(0).getGraphic();
CTAnchor anchor = getAnchorWithGraphic(graphicalobject, "samplePict.jpeg",
Units.toEMU(100), Units.toEMU(30),
Units.toEMU(30), Units.toEMU(0));
drawing.setAnchorArray(new CTAnchor[]{anchor});
drawing.removeInline(0);
run = paragraph.createRun();
run.setText("The previous picture is anchored wrapTight. The previous picture is anchored wrapTight. The previous picture is anchored wrapTight. The previous picture is anchored wrapTight. The previous picture is anchored wrapTight. The previous picture is anchored wrapTight.");
document.write(new FileOutputStream("WordInsertPictures.docx"));
document.close();
}
}
我试图用处理docx文件。只是简单地读取然后写入文件(现在)。这是我的简单代码: 问题是输入文件的头文件中有一个小图像。因此,在使用POI处理输入文件并在Microsoft Word中打开输出文件后,我收到损坏的文件错误: 一切工作在OO Writer,但不是在办公室。 问题是:怎么了?apache POI是否不处理头文件中包含图像的文件?你知道解决这个问题的方法吗? 我需要使用,我不考虑其他工具
现在我有一个docx文件,我加载到 我可以看到存储在style中的不同样式的当前字体大小。通过做xml 我想用poi更新字体大小,所以我试了一下 但是,在完成上述代码后,如果我使用第一段代码检查文档的字体大小(object),字体大小仍然是原始值,而不是我想要设置的12。 对于如何解决这个问题,有什么建议吗?
我知道有几个类似的主题,但我读了并尝试了其中的大部分,但仍然不知道如何做到这一点。 我写了一个组件在Joomla 2.5和它的工作到目前为止。我有不同的视图,我可以使用controller.php.其中一个视图显示了我的数据库(关于团队的数据)中的一个表。 现在我想有另一个相同视图的布局,它将数据基表显示为表单,以便可以更改内容。 这是文件结构: -团队/ ---tmpl/ - - - defau
我对javafx非常陌生。我正试图用scene builder创建一个有趣的纸牌游戏应用程序,但在更改ImageView组件的图像时遇到了问题。 src文件夹包含两个包,一个用于所有图像,另一个包含所有代码。 在控制器类中,我尝试使用以下多种组合来更改图像,其中卡是组件,它与中的匹配:
我正在使用Apache POI读取零件编号电子表格中的数据。我在我们的数据库中查找零件编号,如果我们有零件的计算机辅助设计图纸,我将零件编号单元格涂成绿色,如果没有,我将其涂成红色。处理完成后,将保存电子表格。我遇到的问题是那列中的每个细胞都是绿色的。我已经完成了代码,查找零件号的逻辑工作正常,确定单元格应该是什么颜色以及设置颜色和填充的逻辑似乎也工作正常。知道我做错了什么吗? 谢谢
我的代码出错了。为什么胡虎123123