Apache Tika:在 Kotlin 中将 Excel 转换为 HTML

问题描述 投票:0回答:1

我想编写一个应用程序,将 Excel 电子表格转换为 HTML 并保留样式。 Apache Tika 是迄今为止我发现的最好的免费解决方案。我在命令行中测试了一些转换,例如:

java -jar tika-app-2.9.2.jar --html spreadsheet.xlsx > output.html

输出看起来很棒。我得到一个包含大量样式的 HTML 文件(即 table 标签、tr 标签等)。

我在使用 Kotlin 和 Tika 包在代码中复制此行为时遇到一些问题。我得到的最接近的是下面的代码,它解析电子表格并将内容输出为字符串。

import org.apache.tika.metadata.Metadata
import org.apache.tika.parser.ParseContext
import org.apache.tika.parser.microsoft.ooxml.OOXMLParser
import org.apache.tika.sax.BodyContentHandler
import java.io.File
import java.io.FileInputStream


fun tikaHelper(inputFilePath: String) {
    //detecting the file type
    val handler = BodyContentHandler()
    val metadata = Metadata()
    val inputstream = FileInputStream(File(inputFilePath))
    val pcontext = ParseContext()


    //OOXml parser
    val msofficeparser = OOXMLParser()
    msofficeparser.parse(inputstream, handler, metadata, pcontext)
    println("Contents of the document:$handler")
}

fun main() {
    val inputFilePath = "./spreadsheet.xlsx"
    tikaHelper(inputFilePath)
}

这只是将数据输出为字符串。我如何模仿

--html
CLI 参数的行为?

我尝试遵循各种在线文档,例如https://www.tutorialspoint.com/tika/tika_extracting_ms_office_files.htm,但这只能让我了解电子表格-->字符串。我需要从电子表格-->html。

html kotlin spreadsheet apache-tika
1个回答
0
投票

使用

ToXMLContentHandler
代替
BodyContentHandler

这是一个例子:

val inputFilePath = "input.xlsx"
val handler = ToXMLContentHandler()
val metadata = Metadata()
val pcontext = ParseContext()

val msofficeparser = OOXMLParser()

val html = FileInputStream(File(inputFilePath)).use {
    msofficeparser.parse(it, handler, metadata, pcontext)
    handler.toString()
}
Files.writeString(Paths.get("output.html"), html)
© www.soinside.com 2019 - 2024. All rights reserved.