我正在制作一个Java程序来查找文档中出现的特定关键字。我想阅读多种类型的文件格式,包括所有Microsoft Office文档。
我已经用除了PowerPoint之外的所有程序做好了,我用的是在StackOverflow或其他资源上找到的Apache POI代码片段。我发现所有的幻灯片都是由形状组成的(XSLFTextShape ),但其中许多是XSLFGraphicFrame或XSLFTable类的对象,我不能简单地使用toString()方法。我如何使用Java提取其中包含的所有文本。这是一段代码\伪代码:
File f = new File("C:\\Users\\Windows\\Desktop\\Modulo 9.pptx");
PrintStream out = System.out;
FileInputStream is = new FileInputStream(f);
XMLSlideShow ppt = new XMLSlideShow(is);
for (XSLFSlide slide : ppt.getSlides()) {
for (XSLFShape shape : slide) {
if (shape instanceof XSLFTextShape) {
XSLFTextShape txShape = (XSLFTextShape) shape;
out.println(txShape.getText());
} else if (shape instanceof XSLFPictureShape) {
//do nothing
} else if (shape instanceof XSLFGraphicFrame or XSLFTable ) {
//print all text in it or in its children
}
}
}
如果您的需求“在文档中查找特定关键字的出现”需要简单地在< code>SlideShows的所有文本内容中搜索,那么简单地使用SlideShowExtractor可能是一种方法。这也可以作为POITextExtractor的入口点,用于获取文档元数据/属性的文本内容,如作者和标题。
例:
import java.io.FileInputStream;
import org.apache.poi.xslf.usermodel.*;
import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.sl.extractor.SlideShowExtractor;
import org.apache.poi.extractor.POITextExtractor;
public class SlideShowExtractorExample {
public static void main(String[] args) throws Exception {
SlideShow<XSLFShape,XSLFTextParagraph> slideshow
= new XMLSlideShow(new FileInputStream("Performance_Out.pptx"));
SlideShowExtractor<XSLFShape,XSLFTextParagraph> slideShowExtractor
= new SlideShowExtractor<XSLFShape,XSLFTextParagraph>(slideshow);
slideShowExtractor.setCommentsByDefault(true);
slideShowExtractor.setMasterByDefault(true);
slideShowExtractor.setNotesByDefault(true);
String allTextContentInSlideShow = slideShowExtractor.getText();
System.out.println(allTextContentInSlideShow);
System.out.println("===========================================================================");
POITextExtractor textExtractor = slideShowExtractor.getMetadataTextExtractor();
String metaData = textExtractor.getText();
System.out.println(metaData);
}
}
当然,有一些<code>XSLFGraphicFrame</code>不被<code>SlideShowExtractor</code>读取,因为直到现在,<code>apache poi</code>都不支持它们。例如,各种SmartArt图形。它们的文本内容存储在/ppt/diagrams/data*中。xml
记录幻灯片中引用的部分。由于apachepoi
目前还不支持此功能,因此只能使用底层底层方法读取。
例如,要从< code>SmartArt图形中的所有/ppt/diagrams/data文本中获取所有文本,我们可以:
...
System.out.println("===========================================================================");
//additionally get all text out of all /ppt/diagrams/data which are texts in SmartArt graphics:
StringBuilder sb = new StringBuilder();
for (XSLFSlide slide : ((XMLSlideShow)slideshow).getSlides()) {
for (org.apache.poi.ooxml.POIXMLDocumentPart part : slide.getRelations()) {
if (part.getPackagePart().getPartName().getName().startsWith("/ppt/diagrams/data")) {
org.apache.xmlbeans.XmlObject xmlObject = org.apache.xmlbeans.XmlObject.Factory.parse(part.getPackagePart().getInputStream());
org.apache.xmlbeans.XmlCursor cursor = xmlObject.newCursor();
while(cursor.hasNextToken()) {
if (cursor.isText()) {
sb.append(cursor.getTextValue() + "\r\n");
}
cursor.toNextToken();
}
sb.append(slide.getSlideNumber() + "\r\n\r\n");
}
}
}
String allTextContentInDiagrams = sb.toString();
System.out.println(allTextContentInDiagrams);
...
问题内容: 我试图将文本文件加载到我的JavaScript文件中,然后从该文件中读取行以获取信息,我尝试使用FileReader,但它似乎无法正常工作。有人可以帮忙吗? 问题答案: 是的,可以使用FileReader,我已经做了一个示例,这是代码: 最后,我只是读了其他一些吸引我的答案,但正如他们所建议的那样,您可能正在寻找使您能够从JavaScript文件所在的服务器(或设备)加载文本文件的代码
我想从文本文件中读取文本。在下面的代码中,会发生异常(这意味着它会转到catch块)。我将文本文件放在应用程序文件夹中。我应该把这个文本文件(mani.txt)放在哪里才能正确阅读?
本文向大家介绍如何使用python读取Selenium中的文本文件?,包括了如何使用python读取Selenium中的文本文件?的使用技巧和注意事项,需要的朋友参考一下 我们可以通过先创建一个txt文件并在其中包含内容,来使用python阅读Selenium中的文本文件。 首先,我们需要打开文件并提及文本文件位置的路径作为参数。有多种读取方法可以执行这些操作。 read() –读取文件的全部内容
问题内容: 如何将a转换为a ? 问题答案: 这取决于最适合您的方式。明智地提高生产力,不要重蹈覆辙,而是使用Apache Commons。在哪。
问题内容: 是否可以在AngularJS中读取文件?我想将文件放入HTML5画布进行裁剪。 我在考虑使用指令吗?这是我要放入指令中的javascript代码: 问题答案: 是的,指令是正确的方法,但看起来有些不同: 工作示例:http : //plnkr.co/edit/y5n16v?p=preview 感谢lalalalalmbda提供此链接。
问题内容: 我正在使用javax.mail开发客户端邮件以读取邮箱中的邮件: 我知道该方法返回一个对象,因为内容可能是a ,a ,a 和其他(我认为)…是否有一种方法可以使消息始终位于消息正文中?谢谢!! 问题答案: 这个答案扩展了尤林的答案]。他提出的问题是a的内容本身可能是另一内容。在这种情况下,下面的方法将在内容上重复进行,直到完全解析了邮件正文为止。