我对Java编程是新手。我当前的项目要求我读取excel表中的嵌入式(ole)文件并获取其中的文本内容。阅读嵌入式word文件的例子很好,但是我无法找到阅读嵌入式pdf文件的帮助。通过看类似的例子尝试了很少的事情....但没成功。
public class ReadExcel1 {
public static void main(String[] args) {
try {
FileInputStream file = new FileInputStream(new File("C:\\test.xls"));
POIFSFileSystem fs = new POIFSFileSystem(file);
HSSFWorkbook workbook = new HSSFWorkbook(fs);
for (HSSFObjectData obj : workbook.getAllEmbeddedObjects()) {
String oleName = obj.getOLE2ClassName();
if(oleName.equals("Acrobat Document")){
System.out.println("Acrobat reader document");
try{
DirectoryNode dn = (DirectoryNode) obj.getDirectory();
for (Iterator<Entry> entries = dn.getEntries(); entries.hasNext();) {
DocumentEntry nativeEntry = (DocumentEntry) dn.getEntry("CONTENTS");
byte[] data = new byte[nativeEntry.getSize()];
ByteArrayInputStream bao= new ByteArrayInputStream(data);
PDFParser pdfparser = new PDFParser(bao);
pdfparser.parse();
COSDocument cosDoc = pdfparser.getDocument();
PDFTextStripper pdfStripper = new PDFTextStripper();
PDDocument pdDoc = new PDDocument(cosDoc);
pdfStripper.setStartPage(1);
pdfStripper.setEndPage(2);
System.out.println("Text from the pdf "+pdfStripper.getText(pdDoc));
}
}catch(Exception e){
System.out.println("Error reading "+ e.getMessage());
}finally{
System.out.println("Finally ");
}
}else{
System.out.println("nothing ");
}
}
file.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
Acrobat reader document
PDF不是OLE 1.0打包的,而是以不同的方式嵌入的--至少提取对我来说是有效的。这不是一个通用的解决方案,因为它取决于嵌入应用程序如何命名条目...当然,对于PDF,您可以检查所有documentnode
-s中的神奇数字“%pdf”--对于OLE 1.0打包的元素,这需要不同的方法...
我认为,pdf的真正文件名隐藏在\1ole
或compobj
条目中,但对于示例,显然对于您的用例,没有必要确定。
import java.io.*;
import java.net.URL;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.*;
import org.apache.poi.util.IOUtils;
public class EmbeddedPdfInExcel {
public static void main(String[] args) throws Exception {
NPOIFSFileSystem fs = new NPOIFSFileSystem(new URL("http://jamesshaji.com/sample.xls").openStream());
HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true);
for (HSSFObjectData obj : wb.getAllEmbeddedObjects()) {
String oleName = obj.getOLE2ClassName();
DirectoryNode dn = (DirectoryNode)obj.getDirectory();
if(oleName.contains("Acro") && dn.hasEntry("CONTENTS")){
InputStream is = dn.createDocumentInputStream("CONTENTS");
FileOutputStream fos = new FileOutputStream(obj.getDirectory().getName()+".pdf");
IOUtils.copy(is, fos);
fos.close();
is.close();
}
}
fs.close();
}
}
问题内容: 请问如何通过cucumber读取excel、word、pdf文件? 问题答案: 反对法的f
问题内容: 我正在尝试使用Jackson 2.0-RC3读取旧版JSON代码,但是我陷入了“嵌入式”对象的困境。 给定以下JSON: 如何将其映射到以下结构: 我试图这样做,但似乎我必须以这种方式映射整个对象。 问题答案: 要处理“嵌入式”对象,您应该使用它-等同于Hibernate的/ 。
我正在写一个程序,它需要从excel文件中读取和写入数据,而不考虑格式(xls或xlsx)。 我知道ApachePOI,但它似乎有不同的类来处理xls文件(HSSF)和xlsx(XSSF)文件。 任何人都知道我将如何实现我在这里的目标。(也欢迎使用POI以外的API的想法)。
我正在编写一个java代码,它利用Apache-poi读取ms-office.doc文件,利用itext jar API创建并写入pdf文件。我已经阅读了.doc文件中打印的文本和表格。现在我正在寻找一个读取文档中写入的图像的解决方案。我已经编写了如下代码来读取文档文件中的图像。为什么这段代码不起作用。 存在的问题是:1。条件if(Picture.HasPicture(run))不满足,但文档具有
问题内容: 我正在尝试读取Excel文件(Office 2003)。有一个Excel文件需要上载并对其内容进行解析。 通过Google,我只能找到以下相关(且主题不足)的答案:生成Excel文件,读取Excel XML文件,读取Excel CSV文件或不完整的废弃项目。我拥有Office 2003,因此如果我需要那里的任何文件,都可以使用它们。它已安装在我的盒子上,但尚未安装,也无法安装在我的共享
OOXML包含以下代码: 我看到里面嵌着OLEObject。但不确定如何阅读它的内容。非常感谢任何帮助。