2009-06-17 11 views
7

Poszukuję interfejsu API języka Java, aby przekonwertować załączniki ICS (aka iCal) na ładnie sformatowany kod HTML lub tekst jawny w celach wyświetlania. Idealnie byłoby obsłużyć:Konwertuj iCal na HTML lub jawny tekst w Javie

  • Konwertowanie dat na określoną strefę czasową.
  • Poszerzenie schematów powtarzania w postaci czytelnej dla człowieka.
  • Wiele rekordów VCALENDAR w jednym pliku.

Patrzę na iCal4j, który ma ładny parser DOM, ale nie ma możliwości serializowania do niczego innego niż iCal.

Odpowiedz

2

Przykro mi, kolego, jeśli przeglądałeś i nic nie znalazłeś, to jest to pewny zestaw unikalnych wymagań, które masz, czas na innowacje.

Weź to, co masz, wymyśl kilka pomysłów i wypróbuj je, dołącz do pracy!

+0

Tak, napisałem własne. –

+1

@ChaseSeibert Czy istnieje szansa, że ​​możesz zwolnić swój kod, czy też jest to część zastrzeżonego produktu? –

2

Nie znalazłem lepszej alternatywy dla ical4j. Użyłem tego dość pomyślnie. Niestety, jak podkreślasz, wszystko, co trzeba zrobić, to związać się z XML-em, bez żadnego innego sposobu na wyprowadzenie go do czegoś innego. Po utworzeniu można chodzić w DOM i wyprowadzać odpowiedni tekst - chociaż wydaje się to trochę dziwne, ponieważ wszystko czego potrzebujesz to text/html, miałem ten sam problem i właśnie skończyłem analizować XML.

Interfejs API iCal4j jest nieco dziwny i warto rozluźnić przetwarzanie i włączyć kompatybilność z programem Outlook/Notatki, aby pomóc Ci po drodze. Możesz napisać własny Parser, który implementuje net.fortuna.ical4j.data.CalendarParser i w ten sposób wyciąga niezbędne informacje w postaci zwykłego tekstu. Domyślam się, że domyślna net.fortuna.ical4j.data.CalendarParserImpl to około 500 linii kodu, możesz alternatywnie zhackować to.

+2

Brzmi jak zadanie dla XSLT! –

0

Zrobiłem interfejs API iCalendar, który generuje zwykły tekst. Wszystkie elementy kalendarza (VCALENDAR, VEVENT itp.) Mają metodę toContent(), która będzie generować zwykły tekst. Naprawdę łatwo przekonwertować wiele obiektów VCalendar na jeden długi ciąg. Na przykład:

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())); 

importowania wielu VCalendars wystarczy użyć metody processITIPMethod importować je metodą opublikować. Może obsłużyć listę obiektów VCalendar objects.String.

Jeśli chcesz HTML, musisz to zrobić sam.

Można to sprawdzić w http://jfxtras.org/

Można go pobrać w https://github.com/JFXtras/jfxtras/tree/8.0/jfxtras-icalendarfx