מבוא ל- Docx4J

1. סקירה כללית

במאמר זה נתמקד ביצירת.docx מסמך באמצעות ספריית docx4j.

Docx4j היא ספריית ג'אווה המשמשת ליצירה וטיפול במשרד OpenXML קבצים - מה שאומר שזה יכול לעבוד רק עם .docx סוג הקובץ, בעוד שגירסאות ישנות יותר של Microsoft Word משתמשות ב- .doc סיומת (קבצים בינאריים).

שים לב שה- OpenXML פורמט נתמך על ידי Microsoft Office החל מגרסת 2007.

2. הגדרת Maven

כדי להתחיל לעבוד עם docx4j, עלינו להוסיף את התלות הנדרשת לתוך שלנו pom.xml:

 org.docx4j docx4j 3.3.5 javax.xml.bind jaxb-api 2.1 

שים לב שאנחנו תמיד יכולים לחפש את גרסאות התלות האחרונות במאגר המרכזי של Maven.

ה JAXB יש צורך בתלות, מכיוון ש docx4j משתמש בספרייה זו מתחת למכסה המנוע כדי למרס / לבטל חלקים של XML ב- a docx קוֹבֶץ.

3. צור מסמך קובץ Docx

3.1. אלמנטים וטקסטיל טקסט

בואו נראה תחילה כיצד ליצור פשוט docx קובץ - עם פיסקת טקסט:

WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage (); MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart (); mainDocumentPart.addStyledParagraphOfText ("כותרת", "שלום עולם!"); mainDocumentPart.addParagraphOfText ("ברוך הבא לבלדונג"); קובץ exportFile = קובץ חדש ("welcome.docx"); wordPackage.save (exportFile); 

הנה התוצאה המתקבלת ברוך הבא.docx קוֹבֶץ:

כדי ליצור מסמך חדש, עלינו לעשות שימוש ב- עיבוד תמלילים MLPackage, המייצג א docx קובץ OpenXML פורמט, ואילו ה- MainDocumentPart בכיתה יש ייצוג של העיקרי document.xml חֵלֶק.

כדי לנקות את הדברים, בואו נפתח את ה- zip ברוך הבא.docx הקובץ, ופתח את word / document.xml קובץ כדי לראות כיצד נראה ייצוג ה- XML:

      שלום עולם! ברוך הבא לבלדונג! 

כמו שאנו יכולים לראות, כל משפט מיוצג על ידי ריצה (ר) של טקסט (t) בתוך פיסקה (עמ ')וזה מה ש addParagraphOfText () השיטה היא עבור.

ה addStyledParagraphOfText () לעשות קצת יותר מזה; זה יוצר מאפייני פסקה (pPr) המחזיק בסגנון החלים על הפסקה.

במילים פשוטות, פסקאות מכריזות על ריצות נפרדות, וכל ריצה מכילה כמה רכיבי טקסט:

כדי ליצור מסמך נאה למראה, עלינו להיות בעלי שליטה מלאה באלמנטים אלה (פיסקה, ריצה, ו טֶקסט).

אז בואו נגלה כיצד לסגנן את התוכן שלנו באמצעות ה- runProperties (RPr) אובייקט:

מפעל ObjectFactory = Context.getWmlObjectFactory (); P p = factory.createP (); R r = factory.createR (); טקסט t = factory.createText (); t.setValue ("ברוכים הבאים לבאלדונג"); r.getContent (). הוסף (t); p.getContent (). הוסף (r); RPr rpr = factory.createRPr (); BooleanDefaultTrue b = BooleanDefaultTrue חדש (); rpr.setB (ב); rpr.setI (ב); rpr.setCaps (ב); צבע ירוק = factory.createColor (); green.setVal ("ירוק"); rpr.setColor (ירוק); r.setRPr (rpr); mainDocumentPart.getContent (). הוסף (p); קובץ exportFile = קובץ חדש ("welcome.docx"); wordPackage.save (exportFile);

כך נראית התוצאה:

לאחר שיצרנו פיסקה, הפעלה ואלמנט טקסט באמצעות createP (), createR () ו createText () בהתאמה, הכרזנו על חדש runProperties אובייקט (RPr) כדי להוסיף קצת סגנון לאלמנט הטקסט.

ה rpr האובייקט משמש להגדרת מאפייני עיצוב, מודגש (ב), נטוי (אני), והוון (כובעים), מאפיינים אלה מוחלים על הטקסט המופעל באמצעות setRPr () שיטה.

3.2. עבודה עם תמונות

Docx4j מציע דרך קלה להוסיף תמונות למסמך Word שלנו:

תמונת קובץ = קובץ חדש ("image.jpg"); בתים [] fileContent = Files.readAllBytes (image.toPath ()); BinaryPartAbstractImage imagePart = BinaryPartAbstractImage .createImagePart (wordPackage, fileContent); מוטבע מוטבע = imagePart.createImageInline ("תמונת Baeldung (רמז לשם קובץ)", "טקסט Alt", 1, 2, שקר); P Imageparagraph = addImageToParagraph (מוטבע); mainDocumentPart.getContent (). הוסף (Imageparagraph);

והנה יישום ה- addImageToParagraph () השיטה נראית כמו:

פרטי סטטי P addImageToParagraph (מוטבע מוטבע) {ObjectFactory מפעל = ObjectFactory חדש (); P p = factory.createP (); R r = factory.createR (); p.getContent (). הוסף (r); ציור רישום = factory.createDrawing (); r.getContent (). הוסף (ציור); drawing.getAnchorOrInline (). להוסיף (מוטבע); החזר p; }

ראשית, יצרנו את הקובץ שמכיל את התמונה שאנו רוצים להוסיף לחלק המסמך הראשי שלנו, ואז קישרנו את מערך בתים המייצג את התמונה עם wordMLPackage לְהִתְנַגֵד.

ברגע שנוצר חלק התמונה, עלינו ליצור בשורה אובייקט באמצעות createImageInline () שיטה.

ה addImageToParagraph () שיטה להטביע את בשורה חפץ לתוך צִיוּר כך שניתן להוסיף אותו לא לָרוּץ.

לבסוף, כמו פיסקת טקסט, הפיסקה המכילה את התמונה מתווספת אל ה- mainDocumentPart.

והנה המסמך שהתקבל:

3.3. יצירת שולחנות

Docx4j מקל גם על די מניפולציות על טבלאות (Tbl), שורות (Tr) ועמודות (Tc).

בואו נראה איך ליצור טבלה 3 × 3 ולהוסיף לה קצת תוכן:

int writableWidthTwips = wordPackage.getDocumentModel () .getSections (). get (0) .getPageDimensions (). getWritableWidthTwips (); int columnNumber = 3; Tbl tbl = TblFactory.createTable (3, 3, writableWidthTwips / columnNumber); שורות רשימה = tbl.getContent (); עבור (שורה אובייקט: שורות) {Tr tr = (Tr) שורה; רשימת תאים = tr.getContent (); עבור (תא תא אובייקט: תאים) תא {Tc td = (Tc); td.getContent (). הוסף (p); }}

בהתחשב בכמה שורות ועמודות, createTable () שיטה יוצרת חדש Tbl האובייקט, הטיעון השלישי מתייחס לרוחב העמודה בקצוות (שהוא מדידת מרחק - 1/1440 סנטימטר).

לאחר שנוצר, אנו יכולים לחזור על תוכן ה- tbl חפץ, והוסף פסקה חפצים לכל תא.

בואו נראה איך נראית התוצאה הסופית:

4. קריאת מסמך קובץ Docx

כעת, לאחר שגילינו כיצד להשתמש ב- docx4j ליצירת מסמכים, בואו נראה כיצד לקרוא קובץ docx קיים ולהדפיס את תוכנו:

קובץ doc = קובץ חדש ("helloWorld.docx"); WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage .load (doc); MainDocumentPart mainDocumentPart = wordMLPackage .getMainDocumentPart (); מחרוזת textNodesXPath = "// w: t"; רשימת textNodes = mainDocumentPart .getJAXBNodesViaXPath (textNodesXPath, נכון); עבור (Object obj: textNodes) {Text text = (Text) ((JAXBElement) obj) .getValue (); מחרוזת textValue = text.getValue (); System.out.println (textValue); }

בדוגמה זו, יצרנו a עיבוד תמלילים MLPackage אובייקט המבוסס על קיים helloWorld.docx באמצעות הקובץ לִטעוֹן() שיטה.

אחרי זה השתמשנו ב- XPath ביטוי (// w: t) כדי לקבל את כל צמתי הטקסט מחלק המסמך הראשי.

ה getJAXBNodesViaXPath () השיטה מחזירה רשימה של JAXBElement חפצים.

כתוצאה מכך, כל רכיבי הטקסט בתוך ה- mainDocumentPart האובייקט מודפס במסוף.

שים לב שאנחנו תמיד יכולים לפתוח את קבצי docx שלנו כדי להבין טוב יותר את מבנה ה- XML, המסייע בניתוח בעיות, ונותן תובנה טובה יותר כיצד להתמודד איתם.

5. מסקנה

במאמר זה גילינו כיצד docx4j מקל על ביצוע פעולות מורכבות במסמך MSWord, כגון יצירת פסקאות, טבלאות, חלקי מסמך והוספת תמונות.

את קטעי הקוד ניתן למצוא כמו תמיד ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found