驻马店做网站优化,网络推广的方法,个人微信小程序开发,seo外包方案如何精准地提取PDF格式中嵌入的表格数据#xff0c;并将其无缝转换为更加易于分析和操作的形式#xff0c;如纯文本、CSV文件或Excel工作表#xff0c;是一项重要的文档处理技巧。使用Java#xff0c;我们可以简单地实现这一过程。本文将介绍如何利用Java从PDF文档提取表格…如何精准地提取PDF格式中嵌入的表格数据并将其无缝转换为更加易于分析和操作的形式如纯文本、CSV文件或Excel工作表是一项重要的文档处理技巧。使用Java我们可以简单地实现这一过程。本文将介绍如何利用Java从PDF文档提取表格数据并写入文本文件、CSV文件以及Excel工作表。 文章目录 提取PDF表格数据写入文本文件提取PDF表格数据写入CSV文件提取PDF表格数据写入Excel文件 本文所使用的方法提取PDF表格主要需要免费的Free Spire.PDF for Java库可下载导入或通过Maven导入
dependencygroupIde-iceblue/groupIdartifactIdspire.pdf.free/artifactIdversion9.13.0/version
/dependency提取PDF表格需要用到库中的PdfTableExtractor类。我们可以为载入的PDF文件创建PdfTableExtractor对象然后使用PdfTableExtractor.extractTable()方法根据页面在文档中的参数提取指定PDF页面上所有表格最后再使用PdfTable.getText()方法即可获取表格中的数据。以下是一般操作步骤示例
创建PdfDocument对象并使用PdfDocument.loadFromFile()方法载入PDF文档。使用载入的PDF文档创建PdfTableExtractor对象。使用PdfTableExtractor.extractTable()方法提取每个页面上的表格。使用PdfTable.getText()方法获取PDF表格的单元格数据。
使用上述方法获取表格数据后我们就可以将其写入文本文件或搭配其他工具制作CSV或Excel文件了。
提取PDF表格数据写入文本文件
使用PdfTableExtractor.extractTable()方法提取表格并使用PdfTable.getText()方法获取单元格数据后我们可以通过构建字符串并写入文本文件来实现提取表格并保存为文本文件的目的。以下是详细操作步骤
导入所需模块。创建PdfDocument对象并使用PdfDocument.loadFromFile()方法载入PDF文档。使用载入的PDF文档创建PdfTableExtractor对象。遍历页面使用PdfTableExtractor.extractTable()方法提取每个页面上的所有表格。遍历提取到的表格为每个表格创建一个StringBuilder对象。遍历表格中的行和列使用PdfTable.getText()方法获取每个单元格的数据并去除换行符。然后将单元格数据添加到StringBuilder对象。将StringBuilder对象写入文本文件。释放资源。
代码示例
import com.spire.pdf.PdfDocument;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;import java.io.FileWriter;
import java.io.IOException;public class 从PDF中提取文本 {public static void main(String[] args) throws IOException {// 创建一个PdfDocument对象PdfDocument pdf new PdfDocument();// 加载一个PDF文档pdf.loadFromFile(Sample.pdf);// 创建一个PdfTableExtractor对象PdfTableExtractor extractor new PdfTableExtractor(pdf);// 从每一页中提取表格for (int pageIndex 0; pageIndex pdf.getPages().getCount(); pageIndex) {PdfTable[] tables extractor.extractTable(pageIndex);// 如果表格不为空则遍历表格if (tables ! null) {for (int tableIndex 0; tableIndex tables.length; tableIndex) {PdfTable table tables[tableIndex];// 创建一个StringBuilder对象StringBuilder tableText new StringBuilder();// 遍历行和列for (int rowIndex 0; rowIndex table.getRowCount(); rowIndex) {for (int colIndex 0; colIndex table.getColumnCount(); colIndex) {// 获取单元格文本并移除换行符String cellText table.getText(rowIndex, colIndex);cellText cellText.replaceAll(\\r|\\n, );if (colIndex table.getColumnCount() - 1) {tableText.append(cellText).append(\t);} else {tableText.append(cellText).append(\n);}}}// 将表格写入文本文件try (FileWriter writer new FileWriter(output/Tables/Page (pageIndex1) -Table (tableIndex1) .txt)) {writer.write(tableText.toString());}}}}}
}提取结果
提取PDF表格数据写入CSV文件
我们也可以用同样的方法提取表格数据然后搭配其他模块如opencsv将提取到的数据写入CSV文件。也可以使用下面的提取PDF表格写入Excel文件最后保存时保存为CSV文件。 opencsv
dependencygroupIdcom.opencsv/groupIdartifactIdopencsv/artifactIdversion5.9/version
/dependency以下是搭配opencsv提取PDF表格数据并写入CSV文件的操作步骤
导入所需模块。创建PdfDocument对象并使用PdfDocument.loadFromFile()方法载入PDF文档。使用载入的PDF文档创建PdfTableExtractor对象。历页面面使用PdfTableExtractor.extractTable()方法提取每个页面上的所有表格。遍历提取的表格并构建CSV文件名。创建CSVWriter对象遍历表格行以及行中的列使用PdfTable.getText()方法获取每个单元格的数据并去除换行符将提取的每行表格数据构建为字符串列表。最后将字符串列表写入为CSV数据行。释放资源。
代码示例
import com.opencsv.CSVWriter;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;import java.io.FileWriter;
import java.io.IOException;public class 从PDF表格提取到CSV {public static void main(String[] args) throws IOException {// 创建一个PdfDocument对象PdfDocument pdf new PdfDocument();// 加载一个PDF文档pdf.loadFromFile(Sample.pdf);// 创建一个PdfTableExtractor对象PdfTableExtractor extractor new PdfTableExtractor(pdf);// 从每一页中提取表格for (int pageIndex 0; pageIndex pdf.getPages().getCount(); pageIndex) {PdfTable[] tables extractor.extractTable(pageIndex);// 如果表格不为空则遍历表格if (tables ! null) {for (int tableIndex 0; tableIndex tables.length; tableIndex) {PdfTable table tables[tableIndex];// 创建CSV文件名String csvFileName output/Tables/Page (pageIndex 1) -Table (tableIndex 1) .csv;// 创建一个CSVWriter对象try (CSVWriter writer new CSVWriter(new FileWriter(csvFileName))) {// 遍历行和列for (int rowIndex 0; rowIndex table.getRowCount(); rowIndex) {String[] row new String[table.getColumnCount()];for (int colIndex 0; colIndex table.getColumnCount(); colIndex) {// 获取单元格文本并移除换行符String cellText table.getText(rowIndex, colIndex).replaceAll(\\r?\\n, );row[colIndex] cellText;}// 将行写入CSV文件writer.writeNext(row);}}}}}// 关闭PDF文档pdf.close();}
}提取结果
提取PDF表格数据写入Excel文件
保存PDF表格到表格需要用到Free Spire.XLS for Java。我们可以提取到PDF文档表格单元格数据后使用Worksheet.getRange().setText()方法将数据写入到创建的Excel工作表的相应单元格并保存从而实现PDF表格数据到Excel文件的提取。同时我们还可以在保存文件时将格式参数设置为CSV实现PDF表格数据到CSV文件的提取。 Free Spire.XLS for Java:
dependencygroupIde-iceblue/groupIdartifactIdspire.xls.free/artifactIdversion5.3.0/version
/dependency以下是详细操作步骤
导入所需模块。创建PdfDocument对象并使用PdfDocument.loadFromFile()方法载入PDF文档。创建Workbook对象并使用Workbook.getWorksheets().clear()方法清除默认工作表。使用载入的PDF文档创建PdfTableExtractor对象。历页面面使用PdfTableExtractor.extractTable()方法提取每个页面上的所有表格。遍历提取的表格使用Workbook.getWorksheets().add()方法为每个表格创建一个指定名称的工作表。遍历表格行和列使用PdfTable.getText()方法获取每个单元格的数据并去除换行符然后使用Worksheet.getRange().setText()方法将单元格数据写入到工作表的相应单元格。设置工作表单元格的格式。使用Worksheet.autoFitRow()和Worksheet.autoFitColumn()方法自动调整行高和列宽。可以使用Worksheet.saveToFile()方法将工作表保存为CSV文件。使用Workbook.saveToFile()方法保存工作簿为Excel文件。释放资源。
代码示例
import com.spire.pdf.PdfDocument;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;
import com.spire.xls.*;public class 从PDF表格提取到Excel {public static void main(String[] args) {// 创建一个PdfDocument对象PdfDocument pdf new PdfDocument();// 加载一个PDF文档pdf.loadFromFile(G:/Documents/Sample73.pdf);// 创建一个Workbook对象Workbook workbook new Workbook();workbook.getWorksheets().clear();// 创建一个PdfTableExtractor对象PdfTableExtractor extractor new PdfTableExtractor(pdf);// 从每一页中提取表格for (int pageIndex 0; pageIndex pdf.getPages().getCount(); pageIndex) {PdfTable[] tables extractor.extractTable(pageIndex);// 如果表格不为空则遍历表格if (tables ! null) {for (int tableIndex 0; tableIndex tables.length; tableIndex) {// 向工作簿中添加一个工作表Worksheet sheet workbook.getWorksheets().add(Page (pageIndex 1) -Table (tableIndex 1));// 遍历表格中的行和列for (int rowIndex 0; rowIndex tables[tableIndex].getRowCount(); rowIndex) {for (int colIndex 0; colIndex tables[tableIndex].getColumnCount(); colIndex) {// 获取单元格文本并移除换行符String cellText tables[tableIndex].getText(rowIndex, colIndex).replaceAll(\\r|\\n, );// 将单元格文本写入工作表sheet.getCellRange(rowIndex1, colIndex1).setText(cellText);}}// 设置单元格样式CellRange[] rows sheet.getRows();rows[0].getStyle().getFont().setFontName(HarmonyOS Sans SC);rows[0].getStyle().getFont().setSize(12);rows[0].getStyle().getFont().isBold(true);rows[0].getStyle().setHorizontalAlignment(HorizontalAlignType.Center);for (int i 1; i rows.length; i) {rows[i].getStyle().getFont().setFontName(HarmonyOS Sans SC);rows[i].getStyle().getFont().setSize(12);rows[i].getStyle().setHorizontalAlignment(HorizontalAlignType.Left);}// 自动调整行和列for (int i 0; i rows.length; i) {sheet.autoFitRow(i1);}for (int i 0; i sheet.getColumns().length; i) {sheet.autoFitColumn(i1);}// 保存工作表为CSV文件// sheet.saveToFile(output/Tables/PDFTableToCSV-Page (pageIndex 1) -Table (tableIndex 1) .csv, ,);}}}// 保存工作簿workbook.saveToFile(output/PDFTableToExcel.xlsx);// 关闭PDF文档pdf.close();// 释放工作簿资源workbook.dispose();}
}提取结果
本文演示了如何使用Java提取PDF表格数据写入文本、CSV以及Excel文件。
更多PDF文档操作技巧请前往Spire.PDF for Java教程查看。