Java 如何读取PDF中的表格并以HTML格式或控制台打印表格?

Java 如何读取PDF中的表格并以HTML格式或控制台打印表格?,java,pdf,Java,Pdf,我需要阅读pdf文件中的表格,并以HTML格式或控制台以pdf格式打印表格。我有一个示例代码,可以读取表中的文本,但我需要按列和行读取表,并按图中所示进行打印。请参考此示例图像 导入org.pdfbox.cos.COSDocument; 导入org.pdfbox.pdfparser.pdfparser; 导入org.pdfbox.pdmodel.PDDocument; 导入org.pdfbox.pdmodel.PDDocumentInformation; 导入org.pdfbox.util.PD

我需要阅读pdf文件中的表格,并以HTML格式控制台以pdf格式打印表格。我有一个示例代码,可以读取表中的文本,但我需要按列和行读取表,并按图中所示进行打印。请参考此示例图像

导入org.pdfbox.cos.COSDocument;
导入org.pdfbox.pdfparser.pdfparser;
导入org.pdfbox.pdmodel.PDDocument;
导入org.pdfbox.pdmodel.PDDocumentInformation;
导入org.pdfbox.util.PDFTextStripper;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.PrintWriter;
公共类PDF阅读器{
PDFParser解析器;
字符串解析文本;
PDFText脱扣器pdfStripper;
pdDoc文件;
cosDoc文件;
PDDocumentInformation pdDocInfo;
//PDFTextParser构造函数
公共PDFTextParser(){
}
//从PDF文档中提取文本
字符串pdftoText(字符串文件名){
System.out.println(“解析来自PDF文件的文本”+fileName+“…”);
文件f=新文件(文件名);
如果(!f.isFile()){
System.out.println(“文件”+fileName+“不存在”);
返回null;
}
试一试{
parser=newpdfparser(newfileinputstream(f));
}捕获(例外e){
System.out.println(“无法打开PDF解析器”);
返回null;
}
试一试{
parser.parse();
cosDoc=parser.getDocument();
pdfStripper=新的PDFTextStripper();
pdDoc=新的pdDoc文件(cosDoc);
parsedText=pdfStripper.getText(pdDoc);
}捕获(例外e){
System.out.println(“解析PDF文档时发生异常”);
e、 printStackTrace();
试一试{
如果(cosDoc!=null)cosDoc.close();
如果(pdDoc!=null)pdDoc.close();
}捕获(异常e1){
e、 printStackTrace();
}
返回null;
}      
System.out.println(“完成”);
返回解析文本;
}
//将解析后的文本从PDF写入文件
无效writeTexttoFile(字符串pdfText,字符串文件名){
System.out.println(“\n将PDF文本写入输出文本文件”+fileName+“…”);
试一试{
PrintWriter pw=新的PrintWriter(文件名);
打印(pdfText);
关闭();
}捕获(例外e){
System.out.println(“将pdf文本写入文件时发生异常”);
e、 printStackTrace();
}
System.out.println(“完成”);
}
公共静态void main(字符串参数[]){
字符串文件列表[]={“SO115638.pdf”,“New_Document.txt”};
如果(fileList.length!=2){
println(“用法:javapdftextparser”);
系统出口(1);
}
PDFTextParser pdfTextParserObj=新的PDFTextParser();
字符串pdfToText=pdfTextParserObj.pdfToText(文件列表[0]);
if(pdfToText==null){
System.out.println(“PDF到文本转换失败”);
}
否则{
System.out.println(“\n从PDF文档解析的文本…\n”+pdfToText);
writeTexttoFile(pdfToText,文件列表[1]);
}
}  }

只需对代码进行简单编辑。 您应该给出该文件名的绝对路径,而不是文件名。 例如:

String fileList[] = {"E:\\JavaApplication14\\src\\javaapplication14\\p10071.pdf", "E:\\JavaApplication14\\src\\javaapplication14\\newTextDocument.txt"};
将jar包含到项目类路径中

commons-logging-1.1.1.jar
fontbox-1.4.0.jar
pdfbox-1.2.0.jar
完整的代码如下(运行前更改类名和构造函数):

公共类PDFTextParser{
PDFParser解析器;
字符串解析文本;
PDFText脱扣器pdfStripper;
pdDoc文件;
cosDoc文件;
//PDDocumentInformation pdDocInfo;
//PDFTextParser构造函数
公共PDFTextParser(){
}
//从PDF文档中提取文本
字符串pdftoText(字符串文件名){
System.out.println(“解析来自PDF文件的文本”+fileName+“…”);
文件f=新文件(文件名);
如果(!f.isFile()){
System.out.println(“文件”+fileName+“不存在”);
返回null;
}
试一试{
parser=newpdfparser(newfileinputstream(f));
}捕获(例外e){
System.out.println(“无法打开PDF解析器”);
返回null;
}
试一试{
parser.parse();
cosDoc=parser.getDocument();
pdfStripper=新的PDFTextStripper();
pdDoc=新的pdDoc文件(cosDoc);
parsedText=pdfStripper.getText(pdDoc);
}捕获(例外e){
System.out.println(“解析PDF文档时发生异常”);
e、 printStackTrace();
试一试{
如果(cosDoc!=null){
cosDoc.close();
}
如果(pdDoc!=null){
pdDoc.close();
}
}捕获(异常e1){
e、 printStackTrace();
}
返回null;
}
System.out.println(“完成”);
返回解析文本;
}
//将解析后的文本从PDF写入文件
无效writeTexttoFile(字符串pdfText,字符串文件名){
System.out.println(“\n将PDF文本写入输出文本文件”+fileName+“…”);
试一试{
PrintWriter pw=新的PrintWriter(文件名);
打印(pdfText);
关闭();
}捕获(例外e){
System.out.println(“将pdf文本写入文件时发生异常”);
e、 printStackTrace();
}
System.out.println(“完成”);
}
公共静态void main(字符串参数[]){
字符串文件列表[]={“E:\\JavaApplication14\\src\\JavaApplication14\\p10071.pdf”,“E:\\JavaApplication14\\src\\JavaApplication14\\newTextDocument.txt”};
如果(fileList.length!=2){
println(“用法:javapdftextparser”);
系统出口(1);
}
PDFTextParser pdfTextParserObj=新的PDFTextParser();
字符串pdfToText=pdfTextParserObj.pdfToText(文件列表[0]
commons-logging-1.1.1.jar
fontbox-1.4.0.jar
pdfbox-1.2.0.jar
public class PDFTextParser {

    PDFParser parser;
    String parsedText;
    PDFTextStripper pdfStripper;
    PDDocument pdDoc;
    COSDocument cosDoc;
//    PDDocumentInformation pdDocInfo;
// PDFTextParser Constructor 
    public PDFTextParser() {
    }
// Extract text from PDF Document
    String pdftoText(String fileName) {
        System.out.println("Parsing text from PDF file " + fileName + "....");
        File f = new File(fileName);
        if (!f.isFile()) {
            System.out.println("File " + fileName + " does not exist.");
            return null;
        }
        try {
            parser = new PDFParser(new FileInputStream(f));
        } catch (Exception e) {
            System.out.println("Unable to open PDF Parser.");
            return null;
        }
        try {
            parser.parse();
            cosDoc = parser.getDocument();
            pdfStripper = new PDFTextStripper();
            pdDoc = new PDDocument(cosDoc);
            parsedText = pdfStripper.getText(pdDoc);
        } catch (Exception e) {
            System.out.println("An exception occured in parsing the PDF Document.");
            e.printStackTrace();
            try {
                if (cosDoc != null) {
                    cosDoc.close();
                }
                if (pdDoc != null) {
                    pdDoc.close();
                }
            } catch (Exception e1) {
                e.printStackTrace();
            }
            return null;
        }
        System.out.println("Done.");
        return parsedText;
    }
// Write the parsed text from PDF to a file
    void writeTexttoFile(String pdfText, String fileName) {
        System.out.println("\nWriting PDF text to output text file " + fileName + "....");
        try {
            PrintWriter pw = new PrintWriter(fileName);
            pw.print(pdfText);
            pw.close();
        } catch (Exception e) {
            System.out.println("An exception occured in writing the pdf text to file.");
            e.printStackTrace();
        }
        System.out.println("Done.");
    }

    public static void main(String args[]) {
        String fileList[] = {"E:\\JavaApplication14\\src\\javaapplication14\\p10071.pdf", "E:\\JavaApplication14\\src\\javaapplication14\\newTextDocument.txt"};
        if (fileList.length != 2) {
            System.out.println("Usage: java PDFTextParser <InputPDFFilename> <OutputTextFile>");
            System.exit(1);
        }
        PDFTextParser pdfTextParserObj = new PDFTextParser();
        String pdfToText = pdfTextParserObj.pdftoText(fileList[0]);
        if (pdfToText == null) {
            System.out.println("PDF to Text Conversion failed.");
        } else {
            System.out.println("\nThe text parsed from the PDF Document....\n" + pdfToText);
            pdfTextParserObj.writeTexttoFile(pdfToText, fileList[1]);
        }
    }
}