Có một API Java nào có thể tạo các tài liệu Word phong phú không? [đóng cửa]


111

Tôi có một ứng dụng mới. Tôi sẽ làm việc để tạo tài liệu Word có chứa bảng, biểu đồ, mục lục và văn bản. API tốt để sử dụng cho việc này là gì? Bạn có chắc rằng nó hỗ trợ đồ thị, ToC và bảng? Một số gotcha ẩn trong việc sử dụng chúng là gì?

Một số làm rõ:

  • Tôi không thể xuất ra một tệp PDF, họ muốn một tài liệu Word.
  • Họ đang sử dụng MS Word 2003 (hoặc 2007), không phải OpenOffice
  • Ứng dụng đang chạy trên máy chủ ứng dụng * nix

Sẽ thật tuyệt nếu tôi có thể bắt đầu với một tài liệu mẫu và chỉ cần điền vào một số khoảng trống bằng bảng, đồ thị, v.v.

Chỉnh sửa: Một số câu trả lời hay dưới đây, mỗi câu trả lời đều có lỗi riêng tùy theo tình hình hiện tại của tôi. Thật khó để chọn ra câu trả lời cuối cùng từ họ. Hãy nghĩ rằng tôi sẽ để nó mở và hy vọng sẽ có những giải pháp tốt hơn được tạo ra.

Chỉnh sửa: Dự án OpenOffice UNO dường như gần nhất với những gì tôi yêu cầu. Mặc dù POI chắc chắn là phổ biến hơn, nhưng nó còn quá non nớt so với những gì tôi muốn.


26
Không chắc làm thế nào để kết thúc câu hỏi này sau 30 tháng kể từ khi nó được chỉnh sửa lần cuối và hơn 3 năm sau khi nó được hỏi ban đầu sẽ rất hiệu quả. Nếu tôi thay đổi tiêu đề thành "Làm cách nào để tạo tài liệu Word phong phú bằng Java API?" điều đó sẽ sửa chữa điều này?
billjamesdev

1
trong trường hợp một số người cần đánh giá đầy đủ về java api esupu.com/open-source-office-document-java-api-review
Sameera,

Bạn có thể có một cái nhìn tại docxtemplater, https://github.com/edi9999/docxtemplater/ mà là một thư viện tôi tạo ra để tạo ra docx từ các mẫu docx
edi9999

1
Câu hỏi nên được mở lại. Câu hỏi đã được sửa lại để phù hợp với các quy tắc, do đó, tôi muốn kêu gọi bất kỳ ai có quyền mở lại câu hỏi này. Trước câu hỏi là: Java API tốt để tạo tài liệu Word là gì? Bây giờ câu hỏi là: Có một API Java nào có thể tạo ra các tài liệu Word phong phú không? Câu hỏi giờ đây chỉ rõ ràng những gì người hỏi muốn: tạo tài liệu Word với đồ thị, ToC và bảng. Câu hỏi cũng không còn yêu cầu một API Java "tốt". Tốt là khác nhau cho tất cả mọi người.
Sjoerd Pottuit,

Câu trả lời:


56

Vào năm 2007, dự án của tôi đã sử dụng thành công giao diện Đối tượng Mạng Đa năng (UNO) của OpenOffice.org để tạo lập trình các tài liệu tương thích MS-Word (* .doc), cũng như các tài liệu PDF tương ứng, từ một ứng dụng Web Java (một khuôn khổ Struts / JSP).

OpenOffice UNO cũng cho phép bạn xây dựng các biểu đồ, bảng tính, bản trình bày tương thích với MS-Office, v.v. Chúng tôi có thể xây dựng động các tài liệu Word phức tạp, bao gồm biểu đồ và bảng.

Chúng tôi đã đơn giản hóa quy trình bằng cách sử dụng các tài liệu MS-Word mẫu có chèn dấu trang mà phần mềm chèn nội dung, tuy nhiên, bạn có thể xây dựng tài liệu hoàn toàn từ đầu. Mục đích là để phần mềm tạo ra các tài liệu báo cáo có thể được người dùng cuối chia sẻ và điều chỉnh thêm trước khi chuyển đổi chúng sang PDF để phân phối và lưu trữ lần cuối.

Bạn có thể tùy chọn tạo tài liệu ở định dạng OpenOffice nếu bạn muốn người dùng sử dụng OpenOffice thay vì MS-Office. Trong trường hợp của chúng tôi, người dùng muốn sử dụng các công cụ MS-Office.

UNO được bao gồm trong bộ OpenOffice. Chúng tôi chỉ liên kết ứng dụng Java của mình với các thư viện liên quan đến UNO trong bộ phần mềm. Có sẵn Bộ phát triển phần mềm OpenOffice (SDK) chứa các ứng dụng mẫu và Hướng dẫn dành cho nhà phát triển UNO.

Tôi chưa tìm hiểu xem liệu UNO OpenOffice mới nhất có thể tạo các định dạng tài liệu MS-Office 2007 Open XML hay không.

Những điều quan trọng về OpenOffice UNO là:

  1. Nó là phần mềm miễn phí
  2. Nó hỗ trợ nhiều ngôn ngữ (ví dụ: Visual Basic, Java, C ++ và các ngôn ngữ khác).
  3. Nó độc lập với nền tảng (Windows, Linux, Unix, v.v.).

Dưới đây là một số trang web hữu ích:


1
Cho đến nay, đây là bộ công cụ tương thích nhất với bộ công cụ mà tôi yêu cầu. Tôi sẽ đánh dấu nó là "được chấp nhận". Mặc dù tôi hoàn toàn nhận ra rằng POI là phổ biến hơn, nhưng nó vẫn chưa có chức năng mà tôi muốn.
billjamesdev

30

Tôi nghĩ Apache POI có thể làm được việc. Một vấn đề có thể xảy ra tùy thuộc vào cách sử dụng mà bạn nhắm đến có thể do thực tế là HWPF vẫn đang trong giai đoạn phát triển ban đầu.

HWPF là bộ API để đọc và viết tài liệu Microsoft Word 97 (-XP) sử dụng (chỉ) Java.


Bất kỳ kiến ​​thức nào về các khả năng của đồ thị và bảng? Làm thế nào về mục lục? Bất cứ ai có kinh nghiệm thực sự làm những điều đó trong POI?
billjamesdev 15/10/08

1
Nhìn vào tài liệu cho POI, có vẻ như HWPF này được phát triển rất sớm, chủ yếu cho phép đọc văn bản từ .doc, không thực sự để tạo động các tài liệu "phức tạp".
billjamesdev 15/10/08

Tôi không tin nó xử lý các đồ thị phức tạp hơn / bảng, vv
Brian Agnew


9

Bạn có thể sử dụng cái này: http://code.google.com/p/java2word

Tôi đã triển khai API này có tên là Java2Word. với một vài dòng mã, bạn có thể tạo một Tài liệu Microsoft Word.

Ví dụ.:

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

Có một số ví dụ về cách sử dụng. Về cơ bản, bạn sẽ cần một tệp jar. Hãy cho tôi biết nếu bạn cần thêm bất kỳ thông tin nào về cách thiết lập.

* Tôi viết điều này vì chúng tôi có một điều thực sự cần thiết trong một dự án. Thêm trong blog của tôi:

http: //leonardo-pinho.blogspot.com/2010/07/java2word-word-document-generator-from.html *

cổ vũ Leonardo

Chỉnh sửa : Dự án trong liên kết được chuyển đến https://github.com/leonardoanalista/java2word


1
Bạn đã thử nghiệm nó bằng MS Word thực tế chưa? Tôi đã quản lý để tạo các tệp mà OpenOffice và LibreOffice có thể đọc nhưng không phải MSWord trên windows. (Tôi đã báo cáo vấn đề này tại code.google.com/p/java2word/issues/detail?id=16 )
Stein G. Strindhaug

2
Tôi không thể mở các tệp được tạo bằng java2word bằng OpenOffice? Hoạt động tốt với Office 2010
Ashika Umanga Umagiliya

Nó có hỗ trợ tạo tệp .docx không? @Leonardo
MaheshVarma


4

Hãy thử Aspose.Words dành cho Java, nó chạy trên bất kỳ hệ điều hành nào có cài đặt Java.

Nó sẽ xuất tài liệu sang DOC, DOCX hoặc RTF nếu bạn cần định dạng đầu ra MS Word. Tất cả đều được hỗ trợ tốt như nhau.

Sử dụng API này, bạn có thể tạo tài liệu từ đầu, theo nghĩa đen từ các nút và thiết lập các thuộc tính định dạng của chúng. Bạn cũng có thể sử dụng DocumentBuilder cung cấp các phương thức cấp cao hơn như tạo hàng trong bảng, chèn trường, v.v. Hoặc bạn có thể sao chép / nối / di chuyển các phần giữa tài liệu được tạo trước hiện có, chẳng hạn như bạn muốn tập hợp một hợp đồng, chỉ cần lấy và sao chép các phần từ một số tài liệu và Aspose. AdWords sẽ hợp nhất các kiểu, định dạng danh sách, v.v. một cách chính xác trong tài liệu kết quả.

Bạn sẽ có thể chèn trường TOC bằng cách sử dụng Aspose.Words, nhưng kể từ hôm nay, trường TOC sẽ yêu cầu cập nhật trường khi tài liệu được mở trong Microsoft Word. Tuy nhiên, chúng tôi sẽ phát hành hỗ trợ đầy đủ cho các trường TOC vào đầu năm 2010. Ví dụ: nó sẽ xây dựng TOC hoàn chỉnh như MS Word đã làm.

Tôi thuộc nhóm Aspose. AdWords.


4

Nó chỉ được đề cập ngắn gọn một lần, vì vậy tôi muốn gọi tên thư viện docx4j, vì tôi đã thành công với docx4j hơn bất cứ thứ gì khác. Hỗ trợ của Apache POI cho các tài liệu Word không tốt lắm. Ngoài ra, không giống như Aspose.Words, docx4j là một thư viện mã nguồn mở.

Hạn chế duy nhất là với docx4j, bạn phải tạo tài liệu định dạng Office Open XML (docx) hơn là tài liệu định dạng dựa trên OLE2 (doc). Đây là định dạng mặc định cho Word 2007, nhưng người dùng Word 2003 trở về trước sẽ cần cài đặt gói tương thích.


3

Hãy thử Aspose.Words dành cho java.

Aspose. AdWords for Java là một thư viện lớp (thương mại) nâng cao dành cho Java cho phép bạn thực hiện một loạt các tác vụ xử lý tài liệu trực tiếp trong các ứng dụng Java của mình.

Aspose. AdWords dành cho Java hỗ trợ các định dạng DOC, OOXML, RTF, HTML và OpenDocument. Với Aspose.Words, bạn có thể tạo, sửa đổi và chuyển đổi tài liệu mà không cần sử dụng Microsoft Word.


2

Bạn có thể sử dụng một cầu nối Java COM như JACOB . Nếu đó là từ phía máy khách, một tùy chọn khác sẽ là sử dụng Javascript.


Cảm ơn, nhưng có vẻ như điều này sẽ yêu cầu chạy trên máy windows, phải không? Tôi đã làm rõ hệ điều hành máy chủ sau khi đọc điều này, nhưng cảm ơn vì thông tin.
billjamesdev 15/10/08

Việc sử dụng JACOB trên máy chủ web sẽ yêu cầu phải cài đặt chính Microsoft Word trên đó, bởi vì việc tạo và thao tác tài liệu Word thông qua giao diện COM yêu cầu đưa ra các phiên bản thực tế của ứng dụng Word. Nói chung, việc sử dụng Word + COM như vậy trên máy chủ nhiều người dùng là khá khó khăn vì Word không được thiết kế để sử dụng như vậy - ví dụ: sao chép các phần của tài liệu theo truyền thống được thực hiện bằng cách sử dụng đối tượng Selection và khay nhớ tạm của Windows, điều này không thể tưởng tượng được trong web- cài đặt máy chủ. tôi đã được khá đốt của thành viên này (mặc dù đã tìm thấy một số tweaks)
hello_earth

2

Tôi đã sử dụng Aspose.Words để thực hiện phối thư trong .NET. Tôi tin rằng họ cũng có phiên bản Java.


2

Có một công cụ gọi là JODConverter kết nối với văn phòng mở để hiển thị các trình chuyển đổi định dạng tệp của nó, có các phiên bản có sẵn dưới dạng ứng dụng web (nằm trong tomcat) mà bạn đăng lên và công cụ dòng lệnh. Tôi đã bắn html vào nó và chuyển đổi thành .doc và pdf thành công, nó nằm trong một dự án khá lớn, chưa hoạt động nhưng tôi nghĩ tôi sẽ sử dụng nó. http://sourceforge.net/projects/jodconverter/


2

iText thực sự dễ sử dụng.

Nếu bạn yêu cầu các tệp doc, bạn có thể gọi abiword (trình duyệt văn bản đa hệ điều hành lightweigh miễn phí) từ dòng lệnh, nó có một số tùy chọn chuyển đổi định dạng chuyển đổi.


1

docx4j hoặc poi, cả hai đều là ASL v2

@wondersofcomputing: iText thực sự là mã nguồn mở và miễn phí


1

Sau khi nghiên cứu thêm một chút, tôi đã tìm thấy iText, một API tạo tệp PDF và RTF. Tôi nghĩ rằng tôi có thể sử dụng thế hệ RTF để tạo tệp Doc có thể đọc được, sau đó có thể chỉnh sửa bằng Doc và lưu lại.

Bất cứ ai có bất kỳ kinh nghiệm với iText, được sử dụng trong thời trang này?

Bill, POI và API iText rất giống nhau từ góc độ lập trình. Tôi đã làm việc với cả hai trong quá khứ và thấy cả hai đều dễ sử dụng và được ghi chép tốt.

Với iText, bạn có được lợi thế khi có thể chuyển đổi giữa các định dạng (RTF và PDF) với một chút thay đổi đối với mã. Nếu tôi nhớ không nhầm thì nội dung được trình bày bằng cách sử dụng các lệnh gọi giống nhau và sau đó được đặt dưới dạng PDF hoặc RTF bằng cách sử dụng một vài dòng mã.

Tuy nhiên, tôi tin rằng định dạng trong RTF bị hạn chế so với DOC. Tôi không biết liệu bạn có thể triển khai các tính năng nâng cao mà bạn đang tìm kiếm hay không (bảng, hình ảnh nội tuyến) mà không gặp phải một chút rắc rối nào.

Với những gì bạn đã nói về việc HWPF không có đủ chức năng cho nhu cầu của bạn (tôi chỉ xử lý về phía Excel của POI) đặt cược tốt nhất của bạn có thể là thuyết phục các quyền lực rằng PDF là công nghệ tốt nhất cho công việc .


1

Tôi đã phát triển các tệp từ dựa trên XML thuần túy trước đây. Tôi đã sử dụng .NET, nhưng ngôn ngữ này không thành vấn đề vì nó thực sự là XML. Đó không phải là điều dễ dàng nhất để làm (đã có một dự án yêu cầu nó vài năm trước.) Những thứ này chỉ hoạt động trong Word 2007 trở lên - nhưng tất cả những gì bạn cần là sách trắng của Microsoft mô tả chức năng của mỗi thẻ. Bạn có thể thực hiện tất cả những gì bạn muốn với các thẻ giống như khi bạn đang sử dụng Word (tất nhiên ban đầu sẽ khó hơn một chút).


0

Sau khi nghiên cứu thêm một chút, tôi bắt gặp iText , một API tạo tệp PDF và RTF. Tôi nghĩ rằng tôi có thể sử dụng thế hệ RTF để tạo tệp Doc có thể đọc được, sau đó có thể chỉnh sửa bằng Doc và lưu lại.

Bất cứ ai có bất kỳ kinh nghiệm với iText, được sử dụng trong thời trang này?


Tôi đã sử dụng iText để xuất khẩu sang RTF và đó là một chút flaky: TOC ví dụ không làm việc đó tốt và nó thực sự không phải là rất dễ dàng để sử dụng (tài liệu thiếu)
AlfaTeK

0

Tuy nhiên, một khả năng khác, vì đây là một ứng dụng web.

Tôi đã có thể hiển thị một trang HTML với kiểu MIME được đặt thành "application / msword", điều này khiến trình duyệt tạo ra Word đã nhập html tốt, cho phép chỉnh sửa và lưu giống như thể tôi xuất một tài liệu Word thực.

Bảng hoạt động tốt, nhưng hình ảnh tôi chưa hoạt động. Nó có thể dễ dàng như một thẻ trong HTML, hoặc tôi có thể phải truyền một phần riêng biệt của phản hồi chứa dữ liệu hình ảnh ở dạng nhị phân hoặc một số phương pháp khác mà tôi chưa nghĩ ra. :)


0

Mặc dù điều này muộn hơn nhiều so với yêu cầu, nhưng nó có thể giúp ích cho những người khác. Docmosis cung cấp một API Java để tạo tài liệu ở định dạng doc, pdf, odt bằng cách sử dụng tài liệu làm mẫu. Nó sử dụng OpenOffice làm công cụ để thực hiện chuyển đổi định dạng. Thao tác và tập hợp tài liệu được thực hiện bởi chính Docmosis.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.