当前位置: 首页 > 知识库问答 >
问题:

图片标题POI字

乜安志
2023-03-14

我正在尝试使用Apache POI插入图片标题,但我对此没有任何想法。我在用

doc.createParagraph().createRun().addPicture(input, 
Document.PICTURE_TYPE_PNG, "picture.png", 
           Units.pixelToEMU(603), Units.pixelToEMU(226));

插入图片,现在我想为它添加标题,以便能够创建图形表。我试过使用一些样式paragraph.setstyle(“legends”);但它只改变字体,我不喜欢“header1”(我有模板)。我研究了styles.xml(在我的模板中,我使用word插入图片标题),发现

-<w:style w:type="paragraph" w:styleId="Legenda">
<w:name w:val="caption"/>
<w:basedOn w:val="Normalny"/>
<w:next w:val="Normalny"/>
<w:unhideWhenUsed/>
<w:qFormat/>

所以看起来我只需要将段落w:name w:val设置为“caption”。我说的对吗?我怎么才能够到它?

共有1个答案

戚永福
2023-03-14

关于在Word中插入图形表的工作方式,您应该知道的是:

当我们添加标题时,每个标题段都包含一个序列字段{SEQ figure\*ARABIC}。名称“figure”是序列字段的名称。然后,如果要创建一个图形表,word将收集包含这样一个字段的所有段落,以便从这些段落中构建图形表。

到目前为止(ApachePOIVersion3.17)还不提供为图添加标题,也不提供插入或创建图表,至少据我所知是这样。所以我们必须自己使用低级别的CTSimpleField来完成。

import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.util.Units;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSimpleField;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STOnOff;

public class CreateWordTableOfFigures {

 public static void main(String[] args) throws Exception {

  XWPFDocument document = new XWPFDocument();

  XWPFParagraph paragraph;
  XWPFRun run;
  InputStream in; 
  CTSimpleField seq;

  paragraph = document.createParagraph();
  run = paragraph.createRun();
  run.setText("Document containing figures");

  paragraph = document.createParagraph();
  run = paragraph.createRun();
  run.setText("Lorem ipsum...");

  //create paragraph containing figure
  paragraph = document.createParagraph();
  paragraph.setSpacingAfter(0); //Set spacing after to 0. So caption will follow immediately under the figure.
  run = paragraph.createRun();
  in = new FileInputStream("samplePict1.png");
  run.addPicture(in, Document.PICTURE_TYPE_PNG, "samplePict1.png", Units.toEMU(150), Units.toEMU(100));
  in.close();  
  paragraph = document.createParagraph(); //caption for figure
  run = paragraph.createRun();
  run.setText("Picture ");
  seq = paragraph.getCTP().addNewFldSimple();
  seq.setInstr("SEQ figure \\* ARABIC"); //This field is important for creating the table of figures then.
  run = paragraph.createRun();
  run.setText(": Description of sample picture 1");

  paragraph = document.createParagraph();
  run = paragraph.createRun();
  run.setText("Lorem ipsum...");

  paragraph = document.createParagraph();
  paragraph.setSpacingAfter(0);
  run = paragraph.createRun();
  in = new FileInputStream("samplePict2.png");
  run.addPicture(in, Document.PICTURE_TYPE_PNG, "samplePict1.png", Units.toEMU(150), Units.toEMU(100));
  in.close();  
  paragraph = document.createParagraph();
  run = paragraph.createRun();
  run.setText("Picture ");
  seq = paragraph.getCTP().addNewFldSimple();
  seq.setInstr("SEQ figure \\* ARABIC");
  run = paragraph.createRun();
  run.setText(": Description of sample picture 2");


  paragraph = document.createParagraph();
  run = paragraph.createRun();
  run.setText("Index of figures:");

  //Create table of figures field. Word will updating that field while opening the file.
  paragraph = document.createParagraph();
  CTSimpleField toc = paragraph.getCTP().addNewFldSimple();
  toc.setInstr("TOC \\c \"figure\" \\* MERGEFORMAT");
  toc.setDirty(STOnOff.TRUE); //set dirty to forcing update


  FileOutputStream out = new FileOutputStream("CreateWordTableOfFigures.docx"); 
  document.write(out);
  document.close();

 }

}
 类似资料:
  • 有人熟悉用Apache POI3.7创建的电子表格中锁定一行的方法吗?通过锁定,我的意思是希望当用户在行中滚动时,列的标题行保持可见。我创建的电子表格将有500行,如果列的名称始终可见,这将是有益的。

  • 问题内容: 我在react本机项目中使用react导航,并且想用图像自定义标题。 对于一种颜色,我可以使用简单的样式,但是由于react native不支持背景图像,因此我需要一个不同的解决方案。 问题答案: 更新: 从库的v2开始,有一个用于设置标题背景的特殊选项,即。 这个选项接受一个React组件,因此当设置为一个组件时,它将使用它。 例如: 工作示例:https : //snack.exp

  • 我想替换JOptionPane标题栏中的图标(因为它当前显示的是默认的Java咖啡标识)。 我尝试了以下操作: 它替换窗口中的图标,但不替换标题栏中的图标: 是否有任何方法可以改变标题栏中的图标,或者隐藏默认的Java图标,而不必实现JDialog类? 多谢了!托玛斯

  • 但我不知道如何使这工作。只要我有一个单一的屏幕显示它很容易...主表单容器可以是一个嵌入式容器,它被设置为显示单个屏幕的容器。但当我试图导航到另一个,我不能使它工作。 那么,我是否应该使用另一种方法呢?如果没有,我应该如何处理屏幕间的导航?

  • 问题内容: 使用最新的NFC标签,最多可以存储8k数据。因此,我想知道如何将图片存储在标签上,例如NXP TagWriter应用程序。 我没有找到任何信息。谁能解释该怎么做? 问题答案: 您可以使用MIME类型记录将图像存储在NFC标签上。例如,如果您的图像是JPEG图像,则应使用MIME类型“ image / jpeg”。您的NDEF记录可能如下所示: 在Android上,您可以使用 或使用的构

  • 问题内容: 我一直在尝试使用Apache POI将.png图片添加到.docx文件头中。我没有找到对我有帮助的方法。有人知道怎么做吗?这段代码我只能添加文本。 问题答案: 使用页眉和页脚以及页眉中的图像创建文档的示例: 编辑2016年3月29日: 这一直有效,直到Apache poi 3.13。现在,在3.14版本中,它的工作方式不再更多。原因:POI将不再在标题段落中保存图像的blip参考。 :