package com.caac.utils; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import org.apache.pdfbox.pdfparser.PDFParser; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.util.PDFTextStripper; import org.apache.poi.POIXMLTextExtractor; import org.apache.poi.hwpf.extractor.WordExtractor; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; /** * 获取附件内容公共类 */ public class FjUtils { public FjUtils() { super(); } /** * 读取附件的内容,返回字符串 * @param path 附件路径 * @return */ public static String getFjToStr(String fjPath) { String fjStr = ""; String prefix = ""; if (!"".equals(fjPath)) { prefix = fjPath.substring(fjPath.lastIndexOf(".") + 1); //后缀名 try { if ("doc".equals(prefix) || "docx".equals(prefix)) { //word fjStr = getDocContent(fjPath, fjStr, prefix); } else if ("xls".equals(prefix) || "xlsx".equals(prefix)) { //excel fjStr = getExcelContent(fjPath); } else if ("txt".equals(prefix)) { //txt fjStr = getTxtContent(fjPath, fjStr); } else if ("pdf".equals(prefix)) { //pdf fjStr = getPdfContent(fjPath); } } catch (FileNotFoundException fnfe) { fnfe.printStackTrace(); } catch (IOException ioe) { ioe.printStackTrace(); } } return fjStr; } /** * 获取word内容 * @param fjPath * @param fjStr * @param lx * @return * @throws IOException * @throws FileNotFoundException */ private static String getDocContent(String fjPath, String fjStr, String lx) throws java.io.IOException, java.io.FileNotFoundException { if ("doc".equals(lx)) { //word 2003 InputStream is = new FileInputStream(new File(fjPath)); WordExtractor ex = new WordExtractor(is); fjStr = ex.getText(); } else if ("docx".equals(lx)) { //word 2007 InputStream is2 = new FileInputStream(new File(fjPath)); XWPFDocument document = new XWPFDocument(is2); POIXMLTextExtractor extractor = new XWPFWordExtractor(document); fjStr = extractor.getText(); } return fjStr; } /** * 获取excel内容 * @param fjPath * @return */ private static String getExcelContent(String fjPath) { StringBuilder result = new StringBuilder(); try { // Excel获得文件 InputStream inp = new FileInputStream(new File(fjPath)); Workbook wb = WorkbookFactory.create(inp); // 获得第一个工作表对象 Sheet sheet = wb.getSheetAt(0); //读取Excel中第一个sheet的数据 int maxRowNum = sheet.getLastRowNum() + 1; //最大行数 int maxCellNum = sheet.getRow(0).getLastCellNum(); //最大列数 // 得到第一列第一行的单元格 for (int i = 0; i < maxRowNum; i++) { for (int j = 0; j < maxCellNum; j++) { if (isBlankRow(sheet.getRow(i), maxCellNum)) { //空行则跳过 continue; } result.append(getCellToStr(sheet.getRow(i).getCell(j)) + ","); } } } catch (Exception e) { e.printStackTrace(); } return result.toString(); } /** * 获取EXCEL单元格的值,一律转为String返回 * @param cell * @return */ private static String getCellToStr(Cell cell) { String value = ""; if (cell != null) { switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: String v = "" + cell.getNumericCellValue() + ""; value += v; break; case Cell.CELL_TYPE_STRING: value += cell.getStringCellValue(); break; case Cell.CELL_TYPE_FORMULA: break; case Cell.CELL_TYPE_BOOLEAN: value += cell.getBooleanCellValue() + ""; break; default: break; } } return value; } /** * 功能:判断是否是空行 * */ private static boolean isBlankRow(org.apache.poi.ss.usermodel.Row columnRow, int excelLastcell) { String value = ""; for (int i = 0; i < excelLastcell; i++) { Cell cell = columnRow.getCell(i); if (cell != null) { switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: value += cell.getNumericCellValue() + ""; break; case Cell.CELL_TYPE_STRING: value += cell.getStringCellValue(); break; case Cell.CELL_TYPE_FORMULA: break; case Cell.CELL_TYPE_BOOLEAN: value += cell.getBooleanCellValue() + ""; break; default: break; } } } if (value == null || "".equals(value)) { return true; } else { return false; } } /** * 获取pdf内容 * @param fjPath * @return */ private static String getPdfContent(String fjPath) { String str = ""; FileInputStream fis; try { fis = new FileInputStream(new File(fjPath)); PDFParser p = new PDFParser(fis); p.parse(); PDDocument pdd = p.getPDDocument(); PDFTextStripper ts = new PDFTextStripper(); str = ts.getText(pdd); pdd.close(); fis.close(); } catch (Exception e) { } return str; } /** * 获取txt内容 * @param fjPath * @param fjStr * @return * @throws IOException * @throws FileNotFoundException */ private static String getTxtContent(String fjPath, String fjStr) throws java.io.IOException, java.io.FileNotFoundException { StringBuilder result = new StringBuilder(); String bm = getCharset(fjPath); //编码 System.out.println("bm:" + bm); BufferedReader br = null; if ("UTF-8".equals(bm)) { br = new BufferedReader(new InputStreamReader(new FileInputStream(fjPath), "UTF-8")); } else { br = new BufferedReader(new FileReader(new File(fjPath))); //构造一个BufferedReader类来读取文件 } String s = null; while ((s = br.readLine()) != null) { //使用readLine方法,一次读一行 result.append(System.lineSeparator() + s); } br.close(); fjStr = result.toString(); if (!"UTF-8".equals(bm)) { writeFile(fjPath, fjStr); } return fjStr; } /** * 获取txt编码格式 * @param fileName * @return * @throws IOException */ private static String getCharset(String fileName) throws IOException { BufferedInputStream bin = new BufferedInputStream(new FileInputStream(fileName)); int p = (bin.read() << 8) + bin.read(); String code = null; switch (p) { case 0xefbb: code = "UTF-8"; break; case 0xfffe: code = "Unicode"; break; case 0xfeff: code = "UTF-16BE"; break; default: code = "GBK"; } return code; } /** * 把utf-8编码的内容写回原文件 * @param filePathAndName 含路径文件名 * @param fileContent 写入文件的字符串 */ public static void writeFile(String filePathAndName, String fileContent) { try { File f = new File(filePathAndName); if (!f.exists()) { f.createNewFile(); } //定义编码 OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f), "UTF-8"); BufferedWriter writer = new BufferedWriter(write); writer.write(fileContent); writer.close(); } catch (Exception e) { System.out.println("写文件内容操作出错"); e.printStackTrace(); } } }
pdfbox和fontbox的版本要一致
--可参考测试例子 testFjContent
相关推荐
在这个场景中,我们需要关注的是如何从泛微E9系统中获取附件内容,然后将这些附件下载并发送到指定的邮箱。由于标签中提到了"C#",我们可以推断这个示例是用C#编程语言实现的。 首先,我们要理解泛微E9和Ecology9...
Domino XPages 开发获取附件 在 Domino XPages 开发中,获取附件是一个常见的需求。本文将介绍如何使用 XPages 获取附件,并提供相应的代码实例。 获取附件的必要性 在 Domino 应用程序中,附件是指在富文本字段...
接着,我们要讨论“获取附件”。在论坛中,用户可能会上传文件作为帖子的一部分,这些文件就是附件。附件的获取通常比帖子内容更复杂,因为它们可能存储在不同的服务器或者需要特定的URL参数。易语言中,我们可能...
本示例将深入探讨如何利用C#语言实现一个Pop3客户端应用来获取邮件内容及其附件。 首先,理解Pop3协议的基本工作原理至关重要。Pop3允许用户从邮件服务器下载邮件,通常在读取后会将其从服务器删除。在C#中,我们...
本主题聚焦于利用C#从QQ邮箱和网易邮箱获取邮件及其附件,这一过程通常涉及邮件协议POP3(Post Office Protocol version 3)。 POP3是Internet上接收电子邮件的一种标准协议,它允许用户从邮件服务器下载邮件。C#...
IMAP是一种存储和转发协议,它允许用户在不下载整个邮件的情况下查看邮件内容,特别是对于大型邮件或带有附件的邮件,这种特性非常实用。IMAP还支持离线模式,可以缓存邮件以供日后查看。 C#是.NET框架下的主要编程...
本节将重点介绍如何自动获取Outlook中的附件,并基于邮件的某些属性(如收件时间或标题内容)进行过滤。 #### 三、操作步骤详解 ##### 3.1 准备工作 1. **安装UIPath Studio X**:确保已经安装了最新版本的UIPath ...
"获取邮件附件.zip"这个压缩包文件提供了用于获取邮件内容及附件的工具类,这对于处理自动化邮件处理或数据提取场景非常有用。 邮件协议方面,我们主要关注POP3(Post Office Protocol version 3)服务器,它是...
- 后端通过API接口获取表单的历史记录数据。 - 对这些数据进行处理,识别出哪些字段和明细项被修改过。 - 将处理结果通过API接口返回给前端。 - 前端根据后端返回的信息,动态地对相应内容应用高亮效果。 3. **...
发现附件后,可以使用`Part.get_payload(decode=True)`获取附件的二进制数据,并保存到本地文件。例如,如果附件名为`MailExcel.xlsx`,可以使用以下代码: ```python with open('MailExcel.xlsx', 'wb') as f: ...
“获取易语言论坛帖子和附件.e”很可能是一个用易语言编写的程序,其功能可能是为了自动化地从易语言论坛抓取帖子内容和相关的附件。在易语言中,你可以通过网络编程模块来实现HTTP请求,从而获取网页数据。这个程序...
在Java编程中,连接到IBM Lotus Domino(也称为Lotes)邮件服务器并读取邮件内容和附件是一项常见的任务。Lotus Domino是IBM提供的一款企业级的协作软件,它集成了电子邮件、日历、任务和文档管理等功能。这篇教程将...
在本文中,我们将深入探讨如何使用C#编程语言和OpenPOP库来实现POP3协议,以便从邮件服务器接收和处理电子邮件,特别是关注如何获取邮件中的附件。OpenPOP是一个开源的.NET库,它提供了简单易用的接口来处理POP3协议...
3. **处理附件**:使用`imap_fetchstructure`来分析邮件结构,找出包含附件的部分,然后用`imap_fetchbody`获取附件内容。通常,附件会以octet-stream或其他MIME类型出现。可以使用`fsockopen`或`file_put_contents`...
在"javamail附件从流中获取"这个主题中,我们将深入探讨如何使用JavaMail库从输入流中读取数据并作为邮件附件发送。 首先,我们需要导入JavaMail的相关库,主要包含`javax.mail`和`com.sun.mail`两个包。这两个包...
如果有附件,使用`imap_fetchbody()`获取附件内容,根据MIME类型决定如何处理(如存储、转换或直接处理)。 4. **处理附件**: 如果附件是Excel或CSV文件,使用Maatwebsite/Laravel-Excel包进行导入。定义一个处理器...
- 如果是附件,则使用`get_payload(decode=True)`获取附件内容,并保存到本地。 ```python for part in message.walk(): fileName = part.get_filename() if fileName: data = part.get_payload(decode=True) ...
此外,文档中还讨论了如何使用REST资源操作Salesforce中的对象和记录,包括列出可用的REST API版本、获取对象列表、检索对象元数据、获取对象的字段和其他元数据、从记录中获取字段值、从记录中获取附件内容、执行...
在IT领域,邮件读取和附件获取是常见的需求,尤其对于开发者来说,这涉及到与电子邮件服务器的交互和解析邮件内容。本DEMO提供了一个全面的解决方案,覆盖了各种格式附件的处理,确保了代码的稳定性和效率。接下来,...
阅读邮件时,用户可以从收件夹中选择邮件进行查看,如果邮件包含附件,可以通过下载按钮安全地获取附件内容。对于不安全的邮件或附件,应谨慎处理或直接忽略。回复邮件时,可以使用“回复”功能。 维护联系人列表是...