我正在尝试用Apache POI提取应用于特定段落的字体样式。方法getStyle()
在myXWPF段落
对象上返回null。
调用方法getCTR()。getRPr()。第一个
也返回null。XWPFRun
对象上的getRStyle()
调用方法getStyle()。getDocDefaults()。在我的
返回以下内容:XWPFDocument
对象上的getrpdefault()
<w:rPr>
<w:rFonts w:asciiTheme="minorHAnsi"/>
<w:sz w:val="22"/>
<w:szCs w:val="22"/>
<w:lang w:val="en-GB" w:eastAsia="en-US" w:bidi="ar-SA"/>
</w:rPr>
在w:rFonts
标记中没有w:ascii
属性。然而,标签中声明了一个w:asciiTheme
属性。如何使用ApachePOI提取给定主题下的信息?
本例的字体样式定义为主题minorHAnsi
,主题可以在主题1中找到。xml文件。但是,例如,我如何使用ApachePOI提取a:latin
标记下的属性呢?以下是主题1中的示例。xml文件:
<a:minorFont>
<a:latin typeface="Calibri"/>
<a:ea typeface=""/>
<a:cs typeface=""/>
<a:font script="Jpan" typeface="MS 明朝"/>
<a:font script="Hang" typeface="맑은 고딕"/>
<a:font script="Hans" typeface="宋体"/>
...
<a:font script="Viet" typeface="Arial"/>
<a:font script="Uigh" typeface="Microsoft Uighur"/>
<a:font script="Geor" typeface="Sylfaen"/>
</a:minorFont>
如果问题是如何获得/word/theme/theme1。xml
超出了*。docx
文件系统,然后如何解析它,然后获取
首先使用OPCPackage的方法获取包部分
/word/主题/theme1.xml
。
...
XWPFDocument document = new XWPFDocument(new FileInputStream("./WordExample.docx"));
OPCPackage oPCPackage = document.getPackage();
PackagePartName partName = PackagingURIHelper.createPartName("/word/theme/theme1.xml");
PackagePart themePart = oPCPackage.getPart(partName);
...
然后,如果我们有那个
PackagePart
,将它解析成一个org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument
,然后使用org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument
的方法来获取它的子元素。
...
ThemeDocument themeDocument = ThemeDocument.Factory.parse(themePart.getInputStream());
CTOfficeStyleSheet theme = themeDocument.getTheme();
CTBaseStyles themeElements = theme.getThemeElements();
CTFontScheme fontScheme = themeElements.getFontScheme();
CTFontCollection minorFont = fontScheme.getMinorFont();
CTTextFont latin = minorFont.getLatin();
...
不幸的是,没有
org.openxmlformats.schemas.*
的API
留档可用。因此,要获得这样的留档,我们需要下载ooxml-schemas
的源代码(例如从https://repo1.maven.org/maven2/org/apache/poi/ooxml-schemas/1.4/),然后使用javadoc
从源代码创建API
留档。
完整示例:
import java.io.FileInputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.openxml4j.opc.*;
import org.openxmlformats.schemas.drawingml.x2006.main.*;
public class WordGetThemeDocument {
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument(new FileInputStream("./WordExample.docx"));
OPCPackage oPCPackage = document.getPackage();
PackagePartName partName = PackagingURIHelper.createPartName("/word/theme/theme1.xml");
PackagePart themePart = oPCPackage.getPart(partName);
System.out.println(themePart);
ThemeDocument themeDocument = ThemeDocument.Factory.parse(themePart.getInputStream());
CTOfficeStyleSheet theme = themeDocument.getTheme();
CTBaseStyles themeElements = theme.getThemeElements();
CTFontScheme fontScheme = themeElements.getFontScheme();
CTFontCollection minorFont = fontScheme.getMinorFont();
CTTextFont latin = minorFont.getLatin();
System.out.println(latin);
String typeFace = latin.getTypeface();
System.out.println(typeFace);
document.close();
}
}
假设一个特定的样式应用于一个段落。我想知道这种风格的字体系列是什么。我试着打开文件。我找不到许多样式的属性集。例如,考虑样式<代码>标题1>代码>。与此样式对应的OOXML是 在标记中,没有属性来提取字体系列。该样式的字体系列详细信息存储在哪里?如何将其提取出来,以便在java应用程序中使用?我正在使用ApachePOI解析文档。
我使用Apache pdfbox来提取文本。我可以从pdf中提取文本,但我不知道如何知道这个词是否加粗???(代码建议很好!!!)下面是从pdf中提取纯文本的代码,效果很好。
问题内容: 我正在使用Apache pdfbox提取文本。我可以从pdf中提取文本,但我不知道该单词是否为粗体?(代码建议会很好!!!)这是从pdf提取纯文本的代码,可以正常工作。 问题答案: 的结果是纯文本。因此,将其提取后为时已晚。但是,您可以覆盖某些方法,只允许根据您的意愿格式化的文本通过。 在这种情况下,您必须覆盖 在您的替代中,您检查所讨论的文本是否满足您的要求(包含有关所讨论文本的很多
问题内容: 我有一个网页,可以用来上传文件。 现在,我需要检查文件类型是否正确(zip,jpg,pdf,…)。 我可以使用请求随附的mimeType,但我不信任用户,并且说我想确保没有人能够上传在.jpg中重命名的.gif文件。 我认为在这种情况下,我应该检查魔术号码。我发现 这是一个Java库,似乎可以实现“从魔术数字中提取模仿类型”的功能。 这是正确的解决方案还是您建议什么? 更新: 我已经找
现在我有一个docx文件,我加载到 我可以看到存储在style中的不同样式的当前字体大小。通过做xml 我想用poi更新字体大小,所以我试了一下 但是,在完成上述代码后,如果我使用第一段代码检查文档的字体大小(object),字体大小仍然是原始值,而不是我想要设置的12。 对于如何解决这个问题,有什么建议吗?
问题内容: 例如: 如何提取“ http://www.google.com”? (每个链接的格式都相同,即“ http://”) 问题答案: 可能有几种方法可以做到这一点,但最干净的方法是使用正则表达式 如果可以有多个链接,则可以使用类似于以下内容的链接