我试图使用APACHE POI创建一个段落,其中包含左边的图像和右边的一些文本。有什么方法可以设置这两个组件之间的对齐方式吗?
下面是在表中执行我想要的操作的代码,但它也呈现了这两个段落。
public void createWord() throws IOException, InvalidFormatException {
XWPFDocument document = new XWPFDocument();
XWPFTable table = document.createTable();
FileOutputStream out = new FileOutputStream(new File("createdocument.docx"));
File img = new File("C:\\Users\\r4rfgretg\\Pictures\\geregrg.png");
XWPFParagraph imageParagraph = document.createParagraph();
imageParagraph.setFontAlignment(ParagraphAlignment.CENTER.getValue());
XWPFRun imageRun = imageParagraph.createRun();
imageRun.addBreak();
imageRun.addBreak();
imageRun.addBreak();
imageRun.addPicture(new FileInputStream(img), org.apache.poi.xwpf.usermodel.Document.PICTURE_TYPE_PNG, "test",
Units.toEMU(100), Units.toEMU(100));
XWPFParagraph textParagraph = document.createParagraph();
XWPFRun textRun = textParagraph.createRun();
textRun.addBreak();
textRun.addBreak();
textRun.addBreak();
imageRun.addBreak();
imageRun.addBreak();
imageRun.addBreak();
textRun.setText("KOU323D342342OUMjuj43432424S");
textRun.addBreak();
textRun.addBreak();
textRun.setText("1/1/2019 1/1/2020");
textRun.addBreak();
textRun.addBreak();
textRun.setText("GR123456789");
XWPFTableRow tableRowOne = table.getRow(0);
tableRowOne.getCell(0).setParagraph(imageParagraph);
tableRowOne.addNewTableCell().setParagraph(textParagraph);
document.write(out);
out.close();
System.out.println("createdocument.docx written successully");
}
提前谢谢你。
代码的主要问题是,它首先在XWPFDocument
中创建XWPFPartage
,然后将它们设置到XWPFTableCell
中。但是XWPFTableCell
包含它自己的主体,也可以包含整个文档的内容。因此,在此之后,该段落位于文档体和表格单元格体中。所以别这么做。相反,如果需要,从XWPFTableCell
中获取XWPFPartage
或在XWPFPartage
中创建XWPFPartage
。
一般来说,您的要求“左边有一个图像,右边有一些文本”可以通过两种方式实现。它可以用一张表来实现,就像你试过的那样。但它也可以只用一个段落来实现,正如你在问题的标题中所说的那样。这一段必须包含制表位设置,然后运行必须由制表符拆分。
下面的代码显示了这两种解决方案:
import java.io.FileOutputStream;
import java.io.FileInputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.util.Units;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTabStop;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTabJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;
import java.math.BigInteger;
public class CreateWordTabulatorAndTable {
public static void main(String[] args) throws Exception {
String text = "Text";
String imgFile="Koala.png";
int twipsPerInch = 1440; //measurement unit for table cell width and tab stop pos is twips (twentieth of an inch point)
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("Image on the left and text on the right");
paragraph = document.createParagraph();
run = paragraph.createRun();
run.setText("First using a table:");
//create table
XWPFTable table = document.createTable();
table.setWidth(6*twipsPerInch);
//create CTTblGrid for this table with widths of the 2 columns.
//necessary for Libreoffice/Openoffice to accept the column widths.
//first column = 2 inches width
table.getCTTbl().addNewTblGrid().addNewGridCol().setW(BigInteger.valueOf(2*twipsPerInch));
//second column = 4 inches width
table.getCTTbl().getTblGrid().addNewGridCol().setW(BigInteger.valueOf(4*twipsPerInch));
//create first row
XWPFTableRow tableRow = table.getRow(0);
//first cell
XWPFTableCell cell = tableRow.getCell(0);
//set width for first column = 2 inches
CTTblWidth tblWidth = cell.getCTTc().addNewTcPr().addNewTcW();
tblWidth.setW(BigInteger.valueOf(2*twipsPerInch));
//STTblWidth.DXA is used to specify width in twentieths of a point.
tblWidth.setType(STTblWidth.DXA);
//first paragraph in first cell
paragraph = cell.getParagraphArray(0); if (paragraph == null) paragraph = cell.addParagraph();
//first run in paragraph having picture
run = paragraph.createRun();
run.addPicture(new FileInputStream(imgFile), XWPFDocument.PICTURE_TYPE_PNG, imgFile, Units.toEMU(100), Units.toEMU(100));
//second cell
cell = tableRow.addNewTableCell();
cell.setText(text);
paragraph = document.createParagraph();
//---------------------------------------------------------------------------------------------------
paragraph = document.createParagraph();
run = paragraph.createRun();
run.setText("Second using tabulator having tab stops:");
//create tab stop at 2 inches position
paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.LEFT);
CTTabStop tabStop = paragraph.getCTP().getPPr().addNewTabs().addNewTab();
tabStop = paragraph.getCTP().getPPr().getTabs().addNewTab();
tabStop.setVal(STTabJc.LEFT);
tabStop.setPos(BigInteger.valueOf(2 * twipsPerInch));
//first run in paragraph having picture
run = paragraph.createRun();
run.addPicture(new FileInputStream(imgFile), XWPFDocument.PICTURE_TYPE_PNG, imgFile, Units.toEMU(100), Units.toEMU(100));
run.addTab();
//second run
run = paragraph.createRun();
run.setText(text);
FileOutputStream out = new FileOutputStream("CreateWordTabulatorAndTable.docx");
document.write(out);
out.close();
document.close();
}
}
结果:
我想创建一个带有JavaFX ChoiceBox的下拉菜单,其中每个条目由一个不同的图标组成,旁边有一个简短的文本。(例如,在语言选择器中,左边有一个小标志,右边有语言名称。) 做这件事最好的方法是什么? 我试着通过CSS来做。下面的几乎管用,但当然它会为所有条目设置相同的图标: 所以我想我可以通过或类似的方式为每个条目赋予自己的图标,但是我尝试的选择器都没有起作用。
我的app里有一些这样的按钮: 我正在尝试创建一个带有文本和图标的按钮。Android:DrawableLeft对我不起作用(也许会,但我不知道如何设置图标的最大高度)。 所以我创建了一个包含ImageView和TextView的LinearLayout,并使其像一个按钮一样运行: 我的新按钮正是我想要的(字体大小,图标和文本放置)。但它看起来不像我的默认按钮: 所以我试着改变新按钮的背景和文本颜
在这里,我将字段数据与FormUrlEncoded一起使用,但我必须在相同的API部分(“user\u image”)RequestBody文件中与多部分一起使用这两种数据。这怎么可能?提前谢谢。
搜索了几个星期的网页,但不能找到满足我所有需求的答案(只有部分),帮助是非常欢迎的。 我想要的和已经完成的: 符合普通HTML5和CSS 在文章中显示图像 图像必须有标题 标题必须位于图像下方 标题必须限制在图像的水平大小 标题可能长于一行,文本应换行到下一行(仍在图像大小范围内) 图像和标题必须作为一组向左或向右浮动(请考虑使用 ) 文章文本必须环绕图像和标题 图像大小不同(第一个图像为200p
我想包括使用FXML的图标和文本按钮。 我知道在FXML中,我可以用以下代码添加图像: 但我想知道如何将其与按钮代码合并:
问题内容: 我正在尝试制作一个用于创建自定义卡片的应用。我想在自定义背景上添加一些文本(jpg图像)。 最好的方法是什么?在将卡片发送到服务器之前,我需要向用户显示该卡片的预览。 谢谢 问题答案: 使用下面的代码来满足您的要求 您必须在清单文件中使用以下权限。 对于我的设备,访问外部SD卡的路径可能会因其他设备而异。某些设备可能是用于内部SD卡的。在使用此代码之前,只需检查一下即可。 实际上,我为