我正在寻找一个 Java API 来将 ICS(又名 iCal)附件转换为格式良好的 HTML 或纯文本以供显示。理想情况下,它将能够处理:
- 将日期转换为指定的时区。
- 将重复模式扩展为人类可读的句子。
- 单个文件中的多个 VCALENDAR 记录。
我在看 iCal4j,它有一个很好的 DOM 解析器,但除了 iCal 之外没有其他方法可以序列化。
我没有找到 ical4j 的更好替代品。我使用它相当成功。不幸的是,正如您所指出的,它所做的只是绑定到 XML,没有其他方法可以将其输出到其他东西。您可以在创建后遍历 DOM 并输出相关文本 - 虽然这看起来有点奇怪,因为您想要的只是文本/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,你必须自己做。
您可以在https://github.com/JFXtras/jfxtras/tree/8.0/jfxtras-icalendarfx下载它