Mam nową aplikację, nad którą będę pracować, w której muszę wygenerować dokument Word zawierający tabele, wykresy, spis treści i tekst. Jaki jest dobry interfejs API do tego celu? Jak masz pewność, że obsługuje on wykresy, ToC i tabele? Jakie są ukryte problemy w ich używaniu?
Kilka wyjaśnień:
- Nie mogę wydrukować pliku PDF, chcą dokumentu Word.
- Używają MS Word 2003 (lub 2007), a nie OpenOffice
- Aplikacja działa na * nix app-server
Byłoby miło, gdybym mógł zacząć od dokumentu szablonu i po prostu wypełnić kilka miejsc tabelami, wykresami itp.
Edycja: Kilka dobrych odpowiedzi poniżej, każda z własnymi wadami, jeśli chodzi o moją obecną sytuację. Trudno wybrać od nich „ostateczną odpowiedź”. Myślę, że zostawię to otwarte i liczę na lepsze rozwiązania.
Edycja: Projekt OpenOffice UNO wydaje się być najbliższy temu, o co prosiłem. Chociaż POI jest z pewnością bardziej popularne, jest zbyt niedojrzałe na to, czego chcę.
Odpowiedzi:
W 2007 roku mój projekt z powodzeniem wykorzystywał interfejs OpenOffice.org Universal Network Objects (UNO) do programowego generowania dokumentów kompatybilnych z MS-Word (* .doc), a także odpowiadających im dokumentów PDF z aplikacji internetowej Java (framework Struts / JSP).
OpenOffice UNO pozwala także na tworzenie wykresów, arkuszy kalkulacyjnych, prezentacji itp. Kompatybilnych z MS Office. Mogliśmy dynamicznie budować zaawansowane dokumenty Word, w tym wykresy i tabele.
Uprościliśmy ten proces, używając szablonów dokumentów MS-Word ze wstawkami zakładek, do których oprogramowanie wstawiało treść, jednak możesz budować dokumenty całkowicie od podstaw. Celem było, aby oprogramowanie generowało dokumenty raportów, które użytkownicy końcowi mogliby udostępniać i dalej modyfikować przed konwersją do formatu PDF w celu ostatecznego dostarczenia i zarchiwizowania.
Opcjonalnie możesz tworzyć dokumenty w formatach OpenOffice, jeśli chcesz, aby użytkownicy używali OpenOffice zamiast MS-Office. W naszym przypadku użytkownicy chcą korzystać z narzędzi MS-Office.
UNO jest zawarte w pakiecie OpenOffice. Po prostu połączyliśmy naszą aplikację Java z bibliotekami związanymi z UNO w pakiecie. Dostępny jest zestaw narzędzi programistycznych OpenOffice (SDK) zawierający przykładowe aplikacje i Podręcznik programisty UNO.
Nie badałem, czy najnowszy OpenOffice UNO może generować formaty dokumentów MS-Office 2007 Open XML.
Ważne rzeczy dotyczące OpenOffice UNO to:
Oto kilka przydatnych witryn internetowych:
źródło
Myślę, że Apache POI może wykonać zadanie. Ewentualny problem w zależności od celu, do jakiego dążysz, może wynikać z faktu, że HWPF jest wciąż na wczesnym etapie rozwoju.
źródło
Możesz użyć tego: http://code.google.com/p/java2word
Zaimplementowałem to API o nazwie Java2Word. za pomocą kilku wierszy kodu można wygenerować jeden dokument programu Microsoft Word.
Na przykład.:
Jest kilka przykładów użycia. Zasadniczo potrzebujesz jednego pliku jar. Daj mi znać, jeśli potrzebujesz dodatkowych informacji, jak to skonfigurować.
* Napisałem to, ponieważ mieliśmy jedną prawdziwą potrzebę w projekcie. Więcej na moim blogu:
http: //leonardo-pinho.blogspot.com/2010/07/java2word-word-document-generator-from.html *
pozdrawiam Leonardo
Edycja : link do projektu przeniesiono na https://github.com/leonardoanalista/java2word
źródło
Wypróbuj Aspose.Words dla Javy, działa na każdym systemie operacyjnym, w którym jest zainstalowana Java.
Wyprowadzi dokument do DOC, DOCX lub RTF, jeśli potrzebujesz formatu wyjściowego MS Word. Wszystkie są obsługiwane równie dobrze.
Korzystając z tego interfejsu API, możesz utworzyć dokument od podstaw, dosłownie z węzłów i ustawić ich właściwości formatowania. Możesz również użyć DocumentBuilder, który zapewnia metody wyższego poziomu, takie jak tworzenie wiersza tabeli, wstawianie pola itp. Lub możesz kopiować / łączyć / przenosić części między istniejącym wstępnie utworzonym dokumentem, powiedzmy, że chcesz złożyć kontrakt, po prostu chwyć i skopiuj fragmenty z kilku dokumentów i Aspose.Words będą prawidłowo scalać style, formatowanie list itp. w wynikowym dokumencie.
Będziesz mógł wstawić pole TOC za pomocą Aspose.Words, ale od dzisiaj pole TOC będzie wymagało aktualizacji pola, gdy dokument zostanie otwarty w programie Microsoft Word. Jednakże zamierzamy udostępnić pełne wsparcie dla pól TOC na początku 2010 roku. Np. Zbuduje kompletny TOC tak, jak robi to MS Word.
Jestem w zespole Aspose.Words.
źródło
Wspomniano o tym tylko krótko, więc chciałbym odwołać się do biblioteki docx4j, ponieważ odniosłem większy sukces z docx4j niż cokolwiek innego. Wsparcie Apache POI dla dokumentów Word nie jest zbyt dobre. Ponadto, w przeciwieństwie do Aspose.Words, docx4j jest biblioteką typu open source.
Jedyną wadą jest to, że docx4j wymaga tworzenia dokumentów w formacie Office Open XML (docx) zamiast dokumentów w formacie OLE2 (doc). Jest to domyślny format programu Word 2007, ale użytkownicy programu Word 2003 i wcześniejszych będą musieli zainstalować pakiet zgodności.
źródło
Wypróbuj Aspose.Words dla języka Java.
źródło
Możesz użyć mostka Java COM, takiego jak JACOB . Jeśli jest od strony klienta, inną opcją byłoby użycie Javascript.
źródło
Użyłem Aspose.Words do tworzenia korespondencji seryjnej w .NET. Uważam, że mają również wersję Java.
źródło
Istnieje narzędzie o nazwie JODConverter, które podłącza się do otwartego biura, aby ujawnić konwertery formatu plików, dostępne są wersje jako aplikacja internetowa (umieszczona w tomcat), do której wysyłasz, i narzędzie wiersza poleceń. Odpaliłem na to html i przekonwertowałem na .doc i pdf, z powodzeniem, jest to dość duży projekt, jeszcze nie został opublikowany, ale myślę, że będę go używać. http://sourceforge.net/projects/jodconverter/
źródło
iText jest naprawdę łatwy w użyciu.
Jeśli potrzebujesz plików doc, możesz wywołać abiword (darmowy procesor tekstowy dla wielu systemów operacyjnych ) z linii poleceń, ma on kilka opcji konwersji formatu.
źródło
docx4j lub poi, z których oba są ASL v2
@wondersofcomputing: iText jest w rzeczywistości darmowy i open source
źródło
Bill, POI i iText API są bardzo podobne z punktu widzenia programowania. Pracowałem z oboma w przeszłości i stwierdziłem, że są łatwe w użyciu i dobrze udokumentowane.
Dzięki iText zyskujesz możliwość przełączania się między formatami (RTF i PDF) przy niewielkich zmianach w kodzie. Jeśli dobrze pamiętam, treść jest układana za pomocą tych samych wywołań, a następnie ustawiana jako PDF lub RTF za pomocą kilku wierszy kodu.
Uważam jednak, że formatowanie w formacie RTF jest ograniczone w porównaniu do formatu DOC. Nie wiem, czy będziesz w stanie wdrożyć zaawansowane funkcje, których szukasz (tabele, obrazy w wierszu) bez przyzwoitej ilości kłopotów, jeśli w ogóle.
Biorąc pod uwagę to, co powiedziałeś, że HWPF nie ma wystarczającej funkcjonalności dla twoich potrzeb (zajmowałem się tylko stroną Excela POI), najlepszym rozwiązaniem może być przekonanie mocarstw, że PDF jest najlepszą technologią do tego zadania .
źródło
W przeszłości opracowałem pliki tekstowe w czystym formacie XML. Użyłem .NET, ale język nie powinien mieć znaczenia, ponieważ jest to naprawdę XML. Nie było to najłatwiejsze do zrobienia (miałem projekt, który wymagał tego kilka lat temu). Działają one tylko w programie Word 2007 lub nowszym - ale wszystko, czego potrzebujesz, to biała księga firmy Microsoft, która opisuje, co robi każdy znacznik. Możesz osiągnąć wszystko, co chcesz, za pomocą tagów w taki sam sposób, jak w przypadku używania programu Word (oczywiście na początku trochę bardziej bolesne).
źródło
Po dokładniejszych badaniach natknąłem się na iText , API do tworzenia plików PDF i RTF. Myślę, że mogę użyć generacji RTF, aby utworzyć plik w formacie czytelnym dla dokumentu, który można następnie edytować za pomocą Doc i ponownie zapisać.
Czy ktoś ma jakieś doświadczenia z iText, używanymi w ten sposób?
źródło
Jeszcze inna możliwość, ponieważ jest to aplikacja internetowa.
Udało mi się wyrenderować stronę HTML z typem MIME ustawionym na „application / msword”, co spowodowało, że przeglądarka odrodziła program Word, który zaimportował html bez problemu, umożliwiając edycję i zapisywanie tak, jakbym wyświetlał prawdziwy dokument Word.
Tabele działają dobrze, ale obrazy, które jeszcze nie działały. Może to być tak proste, jak zwykły tag w HTML, lub może będę musiał przesyłać strumieniowo oddzielną część odpowiedzi zawierającą dane obrazu w formacie binarnym lub inną metodą, której jeszcze nie wymyśliłem. :)
źródło
Mimo że jest to znacznie później niż prośba, może pomóc innym. Docmosis zapewnia Java API do tworzenia dokumentów w formacie doc, pdf, odt przy użyciu dokumentów jako szablonów. Używa OpenOffice jako silnika do wykonywania konwersji formatu. Manipulowanie dokumentami i ich wypełnianie jest wykonywane przez samą Docmosis.
źródło