Czy istnieje interfejs API Java, który umożliwia tworzenie bogatych dokumentów programu Word? [Zamknięte]

111

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ę.

billjamesdev
źródło
26
Nie jestem pewien, jak zamknięcie tego pytania 30 miesięcy po ostatniej redakcji i ponad 3 lata po pierwotnym zadaniu będzie bardzo produktywne. Jeśli zmieniłem tytuł na „Jak tworzyć dokumenty w formacie Rich Word za pomocą Java API?” czy to naprawi to?
billjamesdev
1
na wypadek, gdyby ktoś potrzebował pełnej recenzji dostępnego interfejsu API java esupu.com/open-source-office-document-java-api-review
Supun Sameera
Możesz rzucić okiem na docxtemplater, https://github.com/edi9999/docxtemplater/, która jest biblioteką, którą stworzyłem do generowania docx z szablonów docx
edi9999
1
Pytanie powinno zostać ponownie otwarte. Pytanie zostało przeformułowane, aby pasowało do przepisów, dlatego chciałbym zwrócić się do każdego, kto ma uprawnienia, do ponownego otwarcia tego pytania. Zanim pojawiło się pytanie: Jakie jest dobre API Java do tworzenia dokumentów Word? Teraz pytanie brzmi: czy istnieje API Java, które może tworzyć bogate dokumenty Word? Pytanie wyraźnie wskazuje teraz, czego chce osoba pytająca: tworzenia dokumentów Word z wykresami, ToC i tabelami. Pytanie nie dotyczy już również „dobrego” interfejsu API języka Java. Dla każdego dobro jest inne.
Sjoerd Pottuit,

Odpowiedzi:

56

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:

  1. To jest darmowe
  2. Obsługuje wiele języków (np. Visual Basic, Java, C ++ i inne).
  3. Jest niezależny od platformy (Windows, Linux, Unix itp.).

Oto kilka przydatnych witryn internetowych:

Szczęściarz
źródło
1
Jak dotąd jest to najbardziej zgodne z zestawem narzędzi, o który prosiłem. Oznaczę to jako „zaakceptowane”. Chociaż w pełni zdaję sobie sprawę, że POI są bardziej popularne, po prostu nie mają jeszcze funkcji, których potrzebuję.
billjamesdev
30

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.

HWPF to zestaw interfejsów API do czytania i pisania dokumentów Microsoft Word 97 (-XP) przy użyciu (tylko) języka Java.

Jorge Ferreira
źródło
Masz jakąś wiedzę na temat możliwości wykresów i tabel? A co ze spisami treści? Czy ktoś ma prawdziwe doświadczenie w robieniu tych rzeczy w POI?
billjamesdev
1
Patrząc na dokumentację dla POI, wydaje się, że ten HWPF jest na bardzo wczesnym etapie rozwoju, umożliwiając głównie odczytywanie tekstu z pliku .doc, a nie do dynamicznego tworzenia „złożonych” dokumentów.
billjamesdev
Nie wierzę, że radzi sobie z bardziej złożonymi wykresami / tabelami itp.
Brian Agnew,
POI czy docx4j? stackoverflow.com/questions/15013837/…
JasonPlutext
9

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.:

IDocument myDoc = new Document2004();
myDoc.getBody().addEle(new Heading1("Heading01"));
myDoc.getBody().addEle(new Paragraph("This is a paragraph...")

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

Leonardo
źródło
1
Czy przetestowałeś to używając rzeczywistego MS Word? Udało mi się stworzyć pliki, które OpenOffice i LibreOffice mogą czytać, ale nie MSWord w systemie Windows. (Zgłosiłem ten problem na code.google.com/p/java2word/issues/detail?id=16 )
Stein G. Strindhaug,
2
Nie mogę otworzyć plików wygenerowanych przez java2word przy użyciu OpenOffice? Działa dobrze z Office 2010
Ashika Umanga Umagiliya
Czy obsługuje tworzenie plików .docx? @Leonardo
MaheshVarma
Ne wproject home: github.com/leonardoanalista/java2word
vhunsicker
4

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.

romeok
źródło
4

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.

Joshua Born
źródło
3

Wypróbuj Aspose.Words dla języka Java.

Aspose.Words for Java to zaawansowana (komercyjna) biblioteka klas dla języka Java, która umożliwia wykonywanie szerokiego zakresu zadań przetwarzania dokumentów bezpośrednio w aplikacjach Java.

Aspose.Words dla Java obsługuje formaty DOC, OOXML, RTF, HTML i OpenDocument. Dzięki Aspose.Words możesz generować, modyfikować i konwertować dokumenty bez korzystania z programu Microsoft Word.

Seki
źródło
2

Możesz użyć mostka Java COM, takiego jak JACOB . Jeśli jest od strony klienta, inną opcją byłoby użycie Javascript.

Gulzar Nazim
źródło
Dzięki, ale wygląda na to, że wymagałoby to uruchomienia na komputerze z systemem Windows, nie? Po przeczytaniu tego wyjaśniłem system operacyjny komputera hosta, ale dzięki za informację.
billjamesdev
Używanie JACOB na serwerze WWW wymagałoby zainstalowania na nim samego programu Microsoft Word, ponieważ tworzenie i manipulowanie dokumentami Worda przez interfejs COM wymaga wywołania rzeczywistych wystąpień aplikacji Word. Ogólnie rzecz biorąc, takie użycie Word + COM na serwerze wielu użytkowników jest dość problematyczne, ponieważ Word nie jest przeznaczony do takiego użytku - na przykład powielanie części dokumentu odbywa się tradycyjnie za pomocą obiektu Selection i schowka Windows, co jest nie do pomyślenia w sieci ustawienie serwera. bardzo mnie to spaliło (chociaż znalazłem kilka poprawek)
hello_earth
2

Użyłem Aspose.Words do tworzenia korespondencji seryjnej w .NET. Uważam, że mają również wersję Java.

tvanfosson
źródło
2

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/

Andrew Hancox
źródło
2

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.

cam2574
źródło
1

docx4j lub poi, z których oba są ASL v2

@wondersofcomputing: iText jest w rzeczywistości darmowy i open source

JasonPlutext
źródło
1

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?

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 .

James McMahon
źródło
1

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).

schmoopy
źródło
0

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?

billjamesdev
źródło
Użyłem iText do eksportu do RTF i jest trochę niestabilny: na przykład TOC nie działa tak dobrze i naprawdę nie jest bardzo łatwy w użyciu (brak dokumentów)
AlfaTeK
0

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. :)

billjamesdev
źródło
0

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.

Paul Jowett
źródło