【发布时间】:2010-11-03 18:09:03
【问题描述】:
我正在寻找一个 Java API 来将 ICS(又名 iCal)附件转换为格式良好的 HTML 或纯文本以供显示。理想情况下,它能够处理:
- 将日期转换为指定时区。
- 将重复模式扩展到人类可读的句子中。
- 单个文件中有多个 VCALENDAR 记录。
我在看 iCal4j,它有一个不错的 DOM 解析器,但除了 iCal 之外没有其他方法可以序列化。
【问题讨论】:
我正在寻找一个 Java API 来将 ICS(又名 iCal)附件转换为格式良好的 HTML 或纯文本以供显示。理想情况下,它能够处理:
我在看 iCal4j,它有一个不错的 DOM 解析器,但除了 iCal 之外没有其他方法可以序列化。
【问题讨论】:
抱歉,伙计,如果您在 Google 上四处搜索却一无所获,那么您肯定有一套独特的要求,是时候创新了。
拿走你所拥有的,想出一些想法,然后尝试一下,这份工作伴随着你!
【讨论】:
我没有找到 ical4j 的更好替代品。我使用它相当成功。不幸的是,正如您所指出的,它所做的只是绑定到 XML,没有其他方法可以将其输出到其他东西。您可以在创建后遍历 DOM 并输出相关文本 - 虽然这看起来有点奇怪,因为您想要的只是 text/html,但我遇到了同样的问题,最后只是解析了 XML。
iCal4j API 有点奇怪,您可能希望放松解析并启用 Outlook/Notes 兼容性以帮助您一路走来。您可以编写自己的 Parser 并实现 net.fortuna.ical4j.data.CalendarParser 并以这种方式将必要的信息提取为纯文本。我认为默认的net.fortuna.ical4j.data.CalendarParserImpl 大约有 500 行代码,您也可以修改它。
【讨论】:
我制作了一个输出纯文本的 iCalendar API。所有日历元素(VCALENDAR、VEVENT 等)都有一个 toContent() 方法,可以生成纯文本。将多个 VCalendar 对象转换为一个长字符串真的很容易。例如:
List<VCalendar> calendars = new ArrayList<VCalendar>();
// add VCalendars here
// then concated the text of each into one long string
String allContent = calendars.stream()
.map(v -> v.toContent())
.collect(Collectors.joining(System.lineSeparator()));
要导入多个 VCalendar,您只需使用 processITIPMethod 方法通过 PUBLISH 方法导入它们。它可以处理 VCalendar objects.String 的列表。
如果你想要 HTML,你必须自己做。
您可以在http://jfxtras.org/查看它
您可以在https://github.com/JFXtras/jfxtras/tree/8.0/jfxtras-icalendarfx下载它
【讨论】: