现在我有一个docx文件,我加载到XWPF文档
XWPFDocument doc = new XWPFDocument(InputStream)
我可以看到存储在style中的不同样式的当前字体大小。通过做xml
for (CTStyle ctstyle : doc.getStyle().getStyleList())
{
if (ctstyle.isSetRPr())
{
if (ctstyle.getRPr().isSetSz())
{
CTHpsMeasure size = ctstyle.getRPr().getSz();
System.out.println(size.getVal());
}
}
}
我想用poi更新字体大小,所以我试了一下
for (CTStyle ctstyle : doc.getStyle().getStyleList())
{
if (ctstyle.isSetRPr())
{
if (ctstyle.getRPr().isSetSz())
{
CTHpsMeasure size = ctstyle.getRPr().getSz();
size.setVal(BigInteger.valueOf(12));
ctstyle.getRPr().setSz(size);
}
}
}
但是,在完成上述代码后,如果我使用第一段代码检查文档的字体大小(XWPFDocument doc
object),字体大小仍然是原始值,而不是我想要设置的12。
对于如何解决这个问题,有什么建议吗?
XWPFDocument.get样式获取org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles
,但不获取文档部分/word/styles.xml
。因此,在编写XWPF文档
时,不会提交此CTStyles
中的更改。
XWPFDocument。getStyles获取XWPFStyles
,它扩展了POIXMLDocumentPart
并覆盖了commit
方法。因此,在编写XWPFDocument
时,将提交此XWPFStyles
中的更改。
不幸的是,没有一种方法可以从这个XWPFStyles
中获得所有单一的样式。有一个字段私有CTStyles ctStyles
,它也是在保护无效提交()
中提交的,但不能公开访问。所以我使用反射来获得它。
从您之前的问题中,我知道您在解析*. docx
文件时遇到了问题,该文件的字体大小错误地设置为双
ctstyle.getRPr(). getSz()
工作没有崩溃也有
此外,您还应该获得并更正
ctstyle。getRPr()。getSzCs()
,这是所使用的“复杂脚本”字体的大小,也可能是错误的。
以下内容适用于我,之后所有字体大小的样式都设置了整数字体大小。例如
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyle;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHpsMeasure;
import java.math.BigInteger;
import java.math.BigDecimal;
import java.lang.reflect.Field;
public class WordChangeStyles {
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument(new FileInputStream("WordUsingStyles.docx"));
XWPFStyles styles = document.getStyles(); //XWPFStyles extends POIXMLDocumentPart and overwrites commit method
Field _ctStyles = XWPFStyles.class.getDeclaredField("ctStyles");
_ctStyles.setAccessible(true);
CTStyles ctStyles = (CTStyles)_ctStyles.get(styles);
CTHpsMeasure size;
String sz;
for (CTStyle ctstyle : ctStyles.getStyleList()) {
if (ctstyle.isSetRPr()) {
if (ctstyle.getRPr().isSetSz()) {
size = ctstyle.getRPr().getSz();
if (size != null) {
sz = size.selectAttribute("http://schemas.openxmlformats.org/wordprocessingml/2006/main", "val").newCursor().getTextValue();
System.out.println(sz); //here you could get the real meant size out of
size.setVal(new BigDecimal(sz).toBigInteger()); //sets the sz got from size truncated to BigInteger
ctstyle.getRPr().setSz(size); //after that the font size should be integer
System.out.println(ctstyle.getRPr().getSz().getVal());
}
size = ctstyle.getRPr().getSzCs();
if (size != null) {
sz = size.selectAttribute("http://schemas.openxmlformats.org/wordprocessingml/2006/main", "val").newCursor().getTextValue();
System.out.println(sz); //here you could get the real meant size out of
size.setVal(new BigDecimal(sz).toBigInteger()); //sets the sz got from size truncated to BigInteger
ctstyle.getRPr().setSzCs(size); //after that the font size should be integer
System.out.println(ctstyle.getRPr().getSzCs().getVal());
}
}
}
}
document.write(new FileOutputStream("WordUsingStyles.docx")); //while writing out XWPFStyles will be committed
document.close();
}
}
所以我开始了一个个人简历网站,我偶然发现了一个非常酷的东西:font awesome,它以文本的形式提供图形,允许你通过CSS添加字体效果。我的问题是一切都很好,直到我试图改变字体大小,无论什么原因,它就是不会改变。你有什么想法吗?我也是新的这里,我已经阅读通过如何使帖子,但如果我做错了,请让我知道。
问题内容: 我是Vala / Gtk的新手,我正在尝试更改Gtk.Label的字体大小,但是我找不到一种好的方法。 我发现我可以像这样使用标记: 但这似乎有点骇人听闻。正确的做法是什么? 问题答案: 您可以尝试使用CSS,我认为最近这是首选方法。给您的标签一个类,然后加载一个CSS。如果您要更改标签的字体大小,我敢打赌您也将自定义其他内容,因此CSS可能对您有用。
问题内容: 如何增加字体大小? 问题答案: 其中fontSize是一个int。drawString的API指出x和y参数是坐标,与文本的大小无关。
除了这个问题:更改超文本标记语言电子邮件正文字体类型和大小在VBA,我想知道如何才能改变字体大小 当我从代码中删除字体大小时,它确实改变了字体系列。 谢谢你的协助,
我有一个java应用程序-一个计算器。我想通过调整应用程序窗口的大小来动态调整按钮的字体大小。如何实现? 我的想法是使用ComponentEvents。我有应用程序窗口的初始大小和初始字体的大小。我想根据按钮的大小改变字体大小,受窗口大小变化的影响。问题是如何在覆盖方法中使用比例[初始窗口大小]/[初始字体大小]?每个字体的比例都不同。
问题内容: 您可以更改JOptionPane的字体和文本大小吗?我尝试了它,只有当我在那个特定的Java类上“运行文件”时,它才起作用。如果启动整个项目,则不会更改字体。我只想更改一个特定的JOptionPane而不是全部。 这是代码: 问题答案: 真的很简单。JOption窗格不仅接受字符串,还接受组件。因此,您可以创建一个标签集并设置其字体并将其用作消息。 我不明白为什么以前没人回答这个问题