当前位置: 首页> 教育> 就业 > b2b电子商务网站有_网络公司名称大全_seo网络推广是什么意思_上海关键词优化方法

b2b电子商务网站有_网络公司名称大全_seo网络推广是什么意思_上海关键词优化方法

时间:2025/7/12 5:52:48来源:https://blog.csdn.net/qq_51108920/article/details/147072735 浏览次数:0次
b2b电子商务网站有_网络公司名称大全_seo网络推广是什么意思_上海关键词优化方法

文章目录

  • 1、POI依赖
  • 2、iText的依赖
  • 3、将excel文件转为PDF文件
    • 3.1 判断是否为xls和xlsx文件
    • 3.2 将excel文件转为pdf文件
  • 尾声

前言:
在Android中,对于excel文件无法进行直接展示,只能通过其他方式进行间接展示,免费的相对来说比较复杂,如果只是个人使用的话或者可支持付费商用使用的话,推荐使用 Aspose.Cells进行实现,如果是简单的表格可以使用 POI+itext的形式进行实现

1、POI依赖

导入完整的POI库的依赖:

implementation 'org.apache.poi:poi:5.2.3'
implementation 'org.apache.poi:poi-ooxml:5.2.3'

POI库中数据过于多,所以我用的是简化版的
下载 android5xlsx 项目中两个jar包放在自己文件的libs路径下,比添加依赖

 implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar', '*.so'])

在这里插入图片描述

2、iText的依赖

implementation "com.itextpdf:itextpdf:5.5.13"

字体大合集

3、将excel文件转为PDF文件

3.1 判断是否为xls和xlsx文件

 /*** 根据类型后缀名简单判断是否Excel文件* @param file 文件* @return 是否Excel文件*/private fun checkIfExcelFile(file: File?): Boolean {if (file == null) {return false}val name = file.name//”.“ 需要转义字符val list = name.split("\\.".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()//划分后的小于2个元素说明不可获取类型名if (list.size < 2) {return false}val typeName = list[list.size - 1]//满足xls或者xlsx才可以return "xls" == typeName || "xlsx" == typeName}

3.2 将excel文件转为pdf文件

将excel文件中的单元格中字符进行循环遍历,写入到生成的pdf文件中,并对其展示效果进行处理。

 /*** 将excel文件转为Pdf文件* @param excelName 文件名称(带文件后缀)* @param path 文件存放路径* @param pdfName 转换后的文件名称*/fun convertExcelToPdf(context: Context, excelName: String, path: String, pdfName: String) {if (!checkIfExcelFile(File("$path/$excelName"))) returnvar document: Document? = nullvar  writer: PdfWriter? = nullvar workbook: Workbook? = nullvar fontStream: InputStream? = nullval pdfFile = File(path, pdfName)try {// ==================== 1. 文件路径有效性校验 ====================val excelFile = File("$path/$excelName")if (!excelFile.exists()) {throw FileNotFoundException("Excel文件不存在: ${excelFile.absolutePath}")}// ==================== 2. 安全初始化PDF文档 ====================document = Document(PageSize.A4.rotate()) // 改用A4横向以适应表格writer = PdfWriter.getInstance(document, FileOutputStream(pdfFile))document.open()// ==================== 3. 字体加载优化 ====================fontStream = try {context.assets.open("fonts/$ttfName")} catch (e: Exception) {throw IOException("字体文件加载失败: ${e.message}")}val fontBytes = fontStream.use { it?.readBytes() }val chineseFont = BaseFont.createFont(ttfName, // 必须包含文件后缀BaseFont.IDENTITY_H,BaseFont.EMBEDDED,true,fontBytes,null)// ==================== 4. 表格样式优化 ====================workbook = WorkbookFactory.create(excelFile)val sheet = workbook.getSheetAt(0)// 添加标题(带错误处理)val titleFont = Font(chineseFont, 14f, Font.BOLD)val title = Paragraph(sheet.sheetName, titleFont).apply {alignment = Element.ALIGN_CENTERspacingAfter = 20f // 添加标题与表格间距}document.add(title)// 动态计算列宽(首行作为表头)val headerRow = sheet.getRow(0)val columnWidths = FloatArray(headerRow.lastCellNum.toInt()) { 1f }val table = PdfPTable(columnWidths).apply {headerRows = 1widthPercentage = 100fsetWidths(columnWidths)}// ==================== 5. 数据填充优化 ====================for (row in sheet) {for (cell in row) {val cellContent = getCellValue(cell)val cellFont = if (cell.rowIndex == 0) {Font(chineseFont, 12f, Font.BOLD, BaseColor.WHITE)} else {Font(chineseFont, 10f)}PdfPCell(Phrase(cellContent, cellFont)).apply {borderWidth = 0.1fborderColor = BaseColor.DARK_GRAYpaddingRight = 15fpaddingTop = 15fpaddingLeft = 15fpaddingBottom = 15fhorizontalAlignment = Element.ALIGN_CENTERverticalAlignment = Element.ALIGN_MIDDLEif (cell.rowIndex == 0) {backgroundColor = BaseColor(79, 129, 189) // 专业蓝色表头}}.also { table.addCell(it) }}}// ==================== 6. 强制刷新缓冲区 ====================document.add(table)document.close()document = null // 防止重复关闭// 验证PDF文件生成结果if (!pdfFile.exists() || pdfFile.length() == 0L) {throw IOException("PDF文件生成失败")}} catch (e: Exception) {// ==================== 7. 增强错误处理 ====================Log.e("PDF生成", "错误信息: ${e.message}", e)pdfFile.delete() // 删除无效文件throw e} finally {// ==================== 8. 安全释放资源 ====================val resourseList =   mutableListOf(  document to { document?.close() },writer to { writer?.close() },workbook to { workbook?.close() },fontStream to { fontStream?.close() })resourseList.forEach { (resource, closer) ->try {closer} catch (e: Exception) {Log.w("ResourceClose", "资源释放失败", e)}}}}/***  辅助函数:获取单元格值(处理空单元格)**/private fun getCellValue(cell: Cell): String {Logd.t("获取单元格中的数值 ${cell}")return when {cell.cellType == Cell.CELL_TYPE_STRING -> cell.stringCellValuecell.cellType == Cell.CELL_TYPE_NUMERIC -> DataFormatter().formatCellValue(cell)else -> cell.toString()}}

尾声

上述方法只能用于简单的表格转换,对于复杂的表格转换会出现格式错乱的效果

关键字:b2b电子商务网站有_网络公司名称大全_seo网络推广是什么意思_上海关键词优化方法

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: