我正在尝试从odt文件(用LibreOffice创建)读取数据。需求是获取绑定到文档中包含的XForm的xml。我目前正在使用odfdom-java库读取该文件。到目前为止,我已经设法通过使用jdom解析文档来读取表单字段的值,但我实际想要的是使用表单数据获得整个xml。或者,我可以将文件加载为
ODFTextDocument.LoadDocument(“c://myfile.odt”);
。
PDDocument pdDoc = PDDocument.loadNonSeq( new File("C://myFile.odt"), null);
PDDocumentCatalog pdCatalog = pdDoc.getDocumentCatalog();
PDAcroForm pdAcroForm = pdCatalog.getAcroForm();
我通过jdom(odfdom-java)设法做到了这一点。绑定的xml本身就存在于表示ODT的xml中。您所需要的只是知道表单的id或标记的名称,以便获得适当的节点。然后,构造一个字符串,其中包含带表单数据的xml。我的代码如下:
import org.apache.xerces.dom.DeepNodeListImpl;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class TestXFormData {
private static StringBuilder nodeContent;
public static void main(String[] args) throws Exception {
//Unzip the openOffice Document
ZipFile zipFile = new ZipFile("C://myFile.odt");
Enumeration entries = zipFile.entries();
ZipEntry entry;
while(entries.hasMoreElements()) {
entry = (ZipEntry) entries.nextElement();
if (entry.getName().equals("content.xml")) {
// construct document
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder docBuilder = domFactory.newDocumentBuilder();
Document doc = docBuilder.parse(zipFile.getInputStream(entry));
// print the document
printDocument(doc);
// get the node
NodeList list = doc.getElementsByTagName("myTagName");
Node node = ((DeepNodeListImpl) list).item(0);
nodeContent = new StringBuilder();
// print the xml with the form data
prettyPrint(node);
System.out.println(nodeContent.toString());
}
}
}
private static void prettyPrint(Node node) {
if (node.getNodeType() == Node.TEXT_NODE) {
nodeContent.append(node.getNodeValue());
} else if (node.getNodeType() == Node.ELEMENT_NODE) {
nodeContent.append("<" + node.getNodeName() + ">");
NodeList kids = node.getChildNodes();
for (int i = 0; i < kids.getLength(); i++) {
prettyPrint(kids.item(i));
}
nodeContent.append("</" + node.getNodeName() + ">");
}
}
private static void printDocument(Document doc) throws IOException {
OutputFormat format = new OutputFormat(doc);
format.setIndenting(true);
XMLSerializer serializer = new XMLSerializer(System.out, format);
serializer.serialize(doc);
}
}
在我的应用程序中,我想读取一个文档文件(.doc或.odt或.docx)并将该文本存储在字符串中。为此,我使用下面的代码:
问题内容: 我开发了一个应用程序,可以从用户选择的文件夹中读取文件。它显示每个文件中有多少行代码。我只希望Java文件显示在文件选择器(扩展名为.java的文件)中。下面是我的代码: 我也进行了编辑,但是仍然无法正常工作,请告知请告知如何仅读取扩展名为.java的文件,换句话说,请仅从文件夹中读取java文件,请告知 问题答案: 您需要一个FilenameFilter。这应该为您工作:
我正在做一个项目,我需要从文件中读取文本,然后将特定部分存储为变量。 假设我有文本文件示例。txt 我想将第一行指定为: 等等 到目前为止,我有这个。 这段代码将打印文件的内容,这是朝着正确方向迈出的一步,但是如何读取每行内容呢? 因为我真的不想养成在内存中存储整个文件的习惯。 我知道你可以用 和类似的方法,但我只是想了解提取值的方法。
我的项目中有这样一段代码: 没有错误,应用程序运行正常,但是变量中从来没有任何文本,我确信txt文件中有文本! 我已经尝试过不同的方法来读取文本文件(使用BufferedReader、Scanner、FileInputStream和FileReader),但都不起作用。 另外,我几乎可以肯定问题不在变量中,因为我尝试通过代码(使用运行时)打开文件,它正常打开了正确的文件。 好的,我尝试添加,但是仍
问题内容: 我有以下格式的文本文件: Details.txt 该文件是.txt文件。我想从该文件中读取课程标题,并打印相应的教科书和教师信息。但是我不确定该遵循什么程序?将信息存储在数组中效率不高!我应该如何进行?注意:我无法更改文件中的信息,因此不应更改!显然,文件将通过以下代码读取: 但是我应该如何根据课程名称,教科书和讲师的标签从该文件中提取数据! 问题答案: 首先正确地逐行阅读文件,然后搜
问题内容: 我正在尝试创建一个简单的Java程序,该程序从zip文件中的文件读取和提取内容。压缩文件包含3个文件(txt,pdf,docx)。我需要阅读所有这些文件的内容,并且为此使用了Apache Tika。 有人可以帮我实现此功能。到目前为止,我已经尝试过了,但是没有成功 代码段 问题答案: 如果你想知道如何从每个文件中获取文件内容,ZipEntry那实际上很简单。这是一个示例代码: 一旦拥有