มี Java API ที่สามารถสร้างเอกสาร Word ที่หลากหลายได้หรือไม่ [ปิด]


111

ฉันมีแอปพลิเคชันใหม่ที่ฉันจะใช้ในการสร้างเอกสาร Word ที่มีตารางกราฟสารบัญและข้อความ API ที่ดีที่จะใช้สำหรับสิ่งนี้คืออะไร? คุณแน่ใจแค่ไหนว่ารองรับกราฟ ToCs และตาราง Gotcha ที่ซ่อนอยู่ในการใช้มันคืออะไร?

คำชี้แจงบางประการ:

  • ฉันไม่สามารถส่งออกเป็น PDF พวกเขาต้องการเอกสาร Word
  • พวกเขาใช้ MS Word 2003 (หรือ 2007) ไม่ใช่ OpenOffice
  • แอปพลิเคชันกำลังทำงานบน * nix app-server

คงจะดีไม่น้อยถ้าฉันสามารถเริ่มต้นด้วยเอกสารเทมเพลตและเติมช่องว่างบางส่วนด้วยตารางกราฟและอื่น ๆ

แก้ไข: คำตอบที่ดีหลายคำตอบด้านล่างแต่ละคำตอบมีข้อบกพร่องของตนเองเท่าที่สถานการณ์ปัจจุบัน ยากที่จะเลือก "คำตอบสุดท้าย" จากพวกเขา คิดว่าฉันจะเปิดทิ้งไว้และหวังว่าจะมีการสร้างโซลูชันที่ดีขึ้น

แก้ไข: โครงการ OpenOffice UNO ดูเหมือนจะใกล้เคียงกับที่ฉันขอมากที่สุด แม้ว่า POI จะเป็นกระแสหลัก แต่ก็ยังไม่บรรลุนิติภาวะเกินไปสำหรับสิ่งที่ฉันต้องการ


26
ไม่แน่ใจว่าการปิดคำถาม 30 เดือนนี้หลังจากแก้ไขครั้งสุดท้ายเป็นอย่างไรและในช่วง 3 ปีหลังจากที่ถามครั้งแรกจะได้ผลดีมาก หากฉันเปลี่ยนชื่อเป็น "ฉันจะสร้างเอกสาร Rich Word ด้วย Java API ได้อย่างไร" จะแก้ไขได้ไหม
billjamesdev

1
ในกรณีที่บางคนต้องการรีวิวฉบับเต็มของ api java ที่มีอยู่esupu.com/open-source-office-document-java-api-review
Supun Sameera

คุณอาจดูdocxtemplater https://github.com/edi9999/docxtemplater/ซึ่งเป็นไลบรารีที่ฉันสร้างขึ้นเพื่อสร้าง docx จากเทมเพลต docx
edi9999

1
คำถามควรจะเปิดใหม่ คำถามได้รับการแก้ไขใหม่เพื่อให้เหมาะสมกับกฎดังนั้นฉันจึงอยากโทรหาใครก็ตามที่มีอำนาจในการเปิดคำถามนี้อีกครั้ง ก่อนหน้าคำถามคือ Java API ที่ดีสำหรับการสร้างเอกสาร Word คืออะไร? ตอนนี้คำถามคือมี Java API ที่สามารถสร้างเอกสาร Word ที่หลากหลายได้หรือไม่? ตอนนี้คำถามชี้ให้เห็นอย่างชัดเจนว่าผู้ถามต้องการอะไร: การสร้างเอกสาร Word ด้วยกราฟ ToCs และตาราง คำถามนี้ไม่ได้ขอ Java API ที่ "ดี" อีกต่อไป ดีแตกต่างกันสำหรับทุกคน
Sjoerd Pottuit

คำตอบ:


56

ในปี 2550 โครงการของฉันประสบความสำเร็จในการใช้อินเทอร์เฟซUniversal Network Objects (UNO) ของ OpenOffice.org เพื่อสร้างเอกสารที่เข้ากันได้กับ MS-Word (* .doc) ทางโปรแกรมรวมถึงเอกสาร PDF ที่เกี่ยวข้องจากเว็บแอปพลิเคชัน Java (กรอบงาน Struts / JSP)

OpenOffice UNO ยังช่วยให้คุณสามารถสร้างแผนภูมิสเปรดชีตงานนำเสนอและอื่น ๆ ที่เข้ากันได้กับ MS-Office เราสามารถสร้างเอกสาร Word ที่ซับซ้อนแบบไดนามิกรวมถึงแผนภูมิและตาราง

เราทำให้กระบวนการง่ายขึ้นโดยใช้เอกสาร MS-Word แม่แบบที่มีการแทรกบุ๊กมาร์กที่ซอฟต์แวร์แทรกเนื้อหาอย่างไรก็ตามคุณสามารถสร้างเอกสารได้อย่างสมบูรณ์ตั้งแต่เริ่มต้น เป้าหมายคือเพื่อให้ซอฟต์แวร์สร้างเอกสารรายงานที่สามารถแชร์และปรับแต่งเพิ่มเติมโดยผู้ใช้ปลายทางก่อนที่จะแปลงเป็น PDF สำหรับการจัดส่งขั้นสุดท้ายและการเก็บถาวร

คุณสามารถเลือกที่จะสร้างเอกสารในรูปแบบ OpenOffice ได้หากคุณต้องการให้ผู้ใช้ใช้ OpenOffice แทน MS-Office ในกรณีของเราผู้ใช้ต้องการใช้เครื่องมือ MS-Office

UNO รวมอยู่ในชุด OpenOffice เราเพียงแค่เชื่อมโยงแอป Java ของเรากับไลบรารีที่เกี่ยวข้องกับ UNO ภายในชุด OpenOffice Software Development Kit (SDK) มีให้บริการที่มีการใช้งานตัวอย่างและคู่มือ UNO นักพัฒนา

ฉันยังไม่ได้ตรวจสอบว่า OpenOffice UNO ล่าสุดสามารถสร้างรูปแบบเอกสาร MS-Office 2007 Open XML ได้หรือไม่

สิ่งสำคัญเกี่ยวกับ OpenOffice UNO ได้แก่ :

  1. เป็นฟรีแวร์
  2. รองรับหลายภาษา (เช่น Visual Basic, Java, C ++ และอื่น ๆ )
  3. ไม่ขึ้นกับแพลตฟอร์ม (Windows, Linux, Unix และอื่น ๆ )

นี่คือเว็บไซต์ที่มีประโยชน์บางส่วน:


1
จนถึงตอนนี้นี่เข้ากันได้กับชุดเครื่องมือที่ฉันขอมากที่สุด ฉันจะทำเครื่องหมายว่า "ยอมรับ" แม้ว่าฉันจะตระหนักดีว่า POI เป็นกระแสหลัก แต่ก็ยังไม่มีฟังก์ชันที่ฉันต้องการ
billjamesdev

30

ฉันคิดว่าApache POIสามารถทำงานได้ ปัญหาที่เป็นไปได้ขึ้นอยู่กับการใช้งานที่คุณตั้งเป้าหมายไว้อาจเกิดจากข้อเท็จจริงที่ว่า HWPF ยังอยู่ในช่วงเริ่มต้นการพัฒนา

HWPF คือชุดของ API สำหรับการอ่านและเขียนเอกสาร Microsoft Word 97 (-XP) โดยใช้ (เท่านั้น) Java


มีความรู้เกี่ยวกับความเป็นไปได้ของกราฟและตารางหรือไม่? แล้วสารบัญล่ะ ใครมีประสบการณ์จริงในการทำสิ่งเหล่านั้นใน POI?
billjamesdev

1
เมื่อดูเอกสารสำหรับ POI ดูเหมือนว่า HWPF นี้ยังอยู่ในช่วงเริ่มต้นของการพัฒนาโดยส่วนใหญ่อนุญาตให้อ่านข้อความจาก. doc ไม่ใช่สำหรับการสร้างเอกสาร "ซับซ้อน" แบบไดนามิก
billjamesdev

ฉันไม่เชื่อว่ามันจัดการกับกราฟ / ตารางที่ซับซ้อนกว่านี้ได้
Brian Agnew


9

คุณสามารถใช้สิ่งนี้: http://code.google.com/p/java2word

ฉันใช้ API นี้ชื่อ Java2Word ด้วยโค้ดไม่กี่บรรทัดคุณสามารถสร้างเอกสาร Microsoft Word ได้หนึ่งชุด

เช่น.:

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

มีตัวอย่างวิธีการใช้งาน โดยทั่วไปคุณจะต้องมีไฟล์ jar หนึ่งไฟล์ โปรดแจ้งให้เราทราบหากคุณต้องการข้อมูลเพิ่มเติมในการตั้งค่า

* ฉันเขียนสิ่งนี้เพราะเรามีความจำเป็นอย่างแท้จริงอย่างหนึ่งในโครงการ เพิ่มเติมในบล็อกของฉัน:

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

เชียร์ลีโอนาร์โด

แก้ไข : โครงการในลิงก์ย้ายไปที่https://github.com/leonardoanalista/java2word


1
คุณได้ทดสอบโดยใช้ MS Word จริงหรือไม่? ฉันจัดการสร้างไฟล์ที่ OpenOffice และ LibreOffice สามารถอ่านได้ แต่ไม่ใช่ MSWord บน windows (ฉันได้รายงานปัญหานี้ที่code.google.com/p/java2word/issues/detail?id=16 )
Stein G. Strindhaug

2
ฉันไม่สามารถเปิดไฟล์ที่สร้าง java2word โดยใช้ OpenOffice ได้? ทำงานได้ดีกับ Office 2010
Ashika Umanga Umagiliya

รองรับการสร้างไฟล์. docx หรือไม่ @Leonardo
MaheshVarma


4

ลอง Aspose.Words สำหรับ Java มันทำงานบนระบบปฏิบัติการใด ๆ ที่ติดตั้ง Java

เอกสารจะส่งออกเป็น DOC, DOCX หรือ RTF หากคุณต้องการรูปแบบผลลัพธ์ MS Word ทั้งหมดได้รับการสนับสนุนอย่างเท่าเทียมกัน

การใช้ API นี้คุณสามารถสร้างเอกสารตั้งแต่เริ่มต้นจากโหนดและตั้งค่าคุณสมบัติการจัดรูปแบบได้ คุณยังสามารถใช้ DocumentBuilder ซึ่งมีวิธีการระดับที่สูงกว่าเช่นสร้างแถวตารางแทรกเขตข้อมูลเป็นต้นหรือคุณสามารถคัดลอก / เข้าร่วม / ย้ายส่วนระหว่างเอกสารที่สร้างไว้ล่วงหน้าที่มีอยู่กล่าวว่าคุณต้องการรวบรวมสัญญาเพียงแค่คว้าและคัดลอก ชิ้นส่วนจากเอกสารหลายชุดและ Aspose คำต่างๆจะผสานสไตล์การจัดรูปแบบรายการ ฯลฯ อย่างถูกต้องในเอกสารผลลัพธ์

คุณจะสามารถแทรกฟิลด์ TOC ได้โดยใช้ Aspose.Words แต่ ณ วันนี้ฟิลด์ TOC จะต้องมีการอัปเดตฟิลด์เมื่อเปิดเอกสารใน Microsoft Word อย่างไรก็ตามเรากำลังจะออกการสนับสนุนเต็มรูปแบบสำหรับฟิลด์ TOC ในช่วงต้นปี 2010 เช่นจะสร้าง TOC ที่สมบูรณ์เหมือนที่ MS Word ทำ

ฉันอยู่ในทีม Aspose.Words


4

มีการพูดถึงสั้น ๆ เพียงครั้งเดียวดังนั้นฉันต้องการเรียกไลบรารี docx4j เนื่องจากฉันประสบความสำเร็จกับ docx4j มากกว่าสิ่งอื่นใด การรองรับเอกสาร Word ของ Apache POI นั้นไม่ค่อยดีนัก นอกจากนี้ไม่เหมือน Aspose.Words docx4j เป็นไลบรารีโอเพ่นซอร์ส

ข้อเสียเปรียบเพียงอย่างเดียวคือ docx4j คุณต้องสร้างเอกสารรูปแบบ Office Open XML (docx) แทนที่จะเป็นเอกสารรูปแบบ OLE2 (doc) นี่เป็นรูปแบบเริ่มต้นสำหรับ Word 2007 แต่ผู้ใช้ Word 2003 และรุ่นก่อนหน้าจะต้องติดตั้งชุดความเข้ากันได้


3

ลองใช้Aspose.Wordsสำหรับ java

Aspose.Words สำหรับ Java เป็นไลบรารีคลาสขั้นสูง (เชิงพาณิชย์) สำหรับ Java ที่ช่วยให้คุณสามารถดำเนินงานการประมวลผลเอกสารจำนวนมากได้โดยตรงภายในแอปพลิเคชัน Java ของคุณ

Aspose.Words สำหรับ Java รองรับรูปแบบ DOC, OOXML, RTF, HTML และ OpenDocument ด้วย Aspose.Words คุณสามารถสร้างแก้ไขและแปลงเอกสารโดยไม่ต้องใช้ Microsoft Word


2

คุณสามารถใช้สะพาน Java COM เช่นยาโคบ หากมาจากฝั่งไคลเอ็นต์ตัวเลือกอื่นคือใช้ Javascript


ขอบคุณ แต่ดูเหมือนว่าจะต้องใช้งานบนเครื่อง windows ไม่ใช่เหรอ? ฉันชี้แจงระบบปฏิบัติการของเครื่องโฮสต์หลังจากอ่านสิ่งนี้แล้ว แต่ขอบคุณสำหรับข้อมูล
billjamesdev

การใช้ JACOB บนเครื่องเว็บเซิร์ฟเวอร์จะต้องติดตั้ง Microsoft Word เองเนื่องจากการสร้างและจัดการเอกสาร Word ผ่านอินเทอร์เฟซ COM จำเป็นต้องใช้อินสแตนซ์จริงของแอปพลิเคชัน Word โดยทั่วไปการใช้ Word + COM ดังกล่าวบนเซิร์ฟเวอร์ที่มีผู้ใช้หลายคนนั้นค่อนข้างมีปัญหาเนื่องจาก Word ไม่ได้ออกแบบมาสำหรับการใช้งานดังกล่าวเช่นการทำสำเนาส่วนต่างๆของเอกสารจะทำตามแบบเดิมโดยใช้วัตถุการเลือกและคลิปบอร์ดของ Windows ซึ่งไม่สามารถคิดได้ในเว็บ การตั้งค่าเครื่องเซิร์ฟเวอร์ ฉันถูกไฟไหม้ไปพอสมควร (แม้ว่าจะพบการปรับแต่งบางอย่าง)
hello_earth


2

มีเครื่องมือที่เรียกว่า JODConverter ซึ่งเชื่อมต่อกับโอเพนออฟฟิศเพื่อแสดงตัวแปลงรูปแบบไฟล์มีเวอร์ชันที่พร้อมใช้งานในรูปแบบเว็บแอป (อยู่ใน Tomcat) ที่คุณโพสต์ไปและเครื่องมือบรรทัดคำสั่ง ฉันใช้ html ที่มันและแปลงเป็น. doc และ pdf สำเร็จแล้วมันอยู่ในโปรเจ็กต์ที่ใหญ่พอสมควรยังไม่ได้เผยแพร่ แต่ฉันคิดว่าฉันจะใช้มัน http://sourceforge.net/projects/jodconverter/


2

iTextใช้งานง่ายมาก

หากคุณต้องการไฟล์ doc คุณสามารถเรียกabiword (ตัวประมวลผลข้อความหลายระบบแบบ lightweigh ฟรี) จากบรรทัดคำสั่งมันมีตัวเลือกการแปลงรูปแบบการแปลงหลายแบบ



1

หลังจากค้นคว้าเพิ่มเติมเล็กน้อยฉันได้พบกับ iText ซึ่งเป็น API การสร้างไฟล์ PDF และ RTF ฉันคิดว่าฉันสามารถใช้การสร้าง RTF เพื่อสร้างไฟล์ที่อ่านได้ของเอกสารซึ่งสามารถแก้ไขได้โดยใช้ Doc และบันทึกใหม่

ใครมีประสบการณ์ iText ใช้แบบนี้บ้างครับ?

Bill, POI และ iText API มีความคล้ายคลึงกันมากจากมุมมองของการเขียนโปรแกรม ฉันเคยทำงานกับทั้งสองอย่างมาแล้วและพบว่าทั้งสองใช้งานง่ายและมีเอกสารที่ดี

ด้วย iText คุณจะได้รับประโยชน์จากความสามารถในการสลับระหว่างรูปแบบ (RTF และ PDF) ด้วยการเปลี่ยนแปลงเล็กน้อยกับโค้ด ถ้าจำไม่ผิดเนื้อหาถูกจัดวางโดยใช้การเรียกเดียวกันแล้วตั้งค่าเป็น PDF หรือ RTF โดยใช้โค้ดสองสามบรรทัด

อย่างไรก็ตามฉันเชื่อว่าการจัดรูปแบบใน RTF มีข้อ จำกัด เมื่อเทียบกับ DOC ฉันไม่รู้ว่าคุณจะสามารถใช้คุณสมบัติขั้นสูงที่คุณกำลังมองหาได้หรือไม่ (ตารางภาพแบบอินไลน์) โดยไม่ต้องยุ่งยากอีกด้วย

ได้รับสิ่งที่คุณกล่าวว่าประมาณ HWPF ไม่ได้มีฟังก์ชันการทำงานที่เพียงพอสำหรับความต้องการของคุณ (ผมได้กระทำเฉพาะกับด้าน Excel ของ POI) ของคุณทางออกที่ดีที่สุดอาจจะเป็นที่จะโน้มน้าวให้อำนาจที่จะ PDF ที่เป็นเทคโนโลยีที่ดีที่สุดสำหรับงาน


1

ฉันได้พัฒนาไฟล์คำที่ใช้ XML แบบเพียว ๆ ในอดีต ฉันใช้. NET แต่ภาษาไม่ควรสำคัญเนื่องจากเป็น XML จริง ไม่ใช่สิ่งที่ง่ายที่สุดที่จะทำ (มีโครงการที่ต้องใช้เมื่อสองสามปีก่อน) สิ่งเหล่านี้ใช้ได้เฉพาะใน Word 2007 ขึ้นไป แต่สิ่งที่คุณต้องมีคือเอกสารไวท์เปเปอร์ของ Microsoft ที่อธิบายถึงสิ่งที่แต่ละแท็กทำ คุณสามารถทำทุกสิ่งที่คุณต้องการให้สำเร็จด้วยแท็กในลักษณะเดียวกับที่คุณใช้ Word (แน่นอนว่าตอนแรกเจ็บปวดกว่าเล็กน้อย)


0

หลังจากค้นคว้าเพิ่มเติมเล็กน้อยฉันได้พบกับiTextซึ่งเป็น API การสร้างไฟล์ PDF และ RTF ฉันคิดว่าฉันสามารถใช้การสร้าง RTF เพื่อสร้างไฟล์ที่อ่านได้ของเอกสารซึ่งสามารถแก้ไขได้โดยใช้ Doc และบันทึกใหม่

ใครมีประสบการณ์ iText ใช้แบบนี้บ้างครับ?


ฉันใช้ iText เพื่อส่งออกไปยัง RTF แล้วและมันค่อนข้างไม่สม่ำเสมอ: ตัวอย่างเช่น TOC ทำงานได้ไม่ดีนักและใช้งานไม่ได้ง่ายมาก (ไม่มีเอกสาร)
AlfaTeK

0

ยังเป็นไปได้อีกเนื่องจากนี่คือเว็บแอป

ฉันสามารถแสดงผลหน้า HTML โดยตั้งค่าประเภท MIME เป็น "application / msword" ซึ่งทำให้เบราว์เซอร์สร้าง Word ซึ่งนำเข้า html ได้ดีทำให้สามารถแก้ไขและบันทึกได้ราวกับว่าฉันส่งออกเอกสาร Word จริง

ตารางใช้งานได้ดี แต่ภาพฉันยังใช้งานไม่ได้ มันอาจจะง่ายเหมือนแค่แท็กใน HTML หรือฉันอาจต้องสตรีมส่วนหนึ่งของการตอบกลับที่มีข้อมูลรูปภาพในรูปแบบไบนารีหรือวิธีอื่นที่ฉันยังไม่เคยคิด :)


0

แม้ว่าจะช้ากว่าคำขอมาก แต่ก็อาจช่วยคนอื่นได้ Docmosisจัดเตรียม Java API สำหรับการสร้างเอกสารในรูปแบบ doc, pdf, odt โดยใช้เอกสารเป็นเทมเพลต ใช้ OpenOffice เป็นเครื่องมือในการแปลงรูปแบบ การจัดการเอกสารและประชากรดำเนินการโดย Docmosis เอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.