java - XWPFTableCell(docx) में तालिका की स्तंभ चौड़ाई सेट करें




ms-word apache-poi (3)

प्रश्न से उत्तर निकाला गया:

यह हाल ही में मुझे बताया गया था कि लिब्रे ऑफिस डॉक्स को बचाने में सक्षम है। जनरेटेड फ़ाइल को बदलकर और इसे वापस सहेजकर और परिणाम को कम करने के द्वारा, मैं इस मुद्दे को हल करने में सक्षम हूं।

चाबी मेज पर खुद को स्पष्ट चौड़ाई डालनी है शब्द इसकी उपस्थिति के बारे में ध्यान नहीं देता, और OpenOffice / LibreOffice तालिका को सही ढंग से प्रस्तुत करने में सक्षम हैं

इसलिए, तालिका के निर्माण के बाद, मैंने निम्नानुसार किया:

CTTblWidth width = table.getCTTbl().addNewTblPr().addNewTblW();
width.setType(STTblWidth.DXA);
width.setW(BigInteger.valueOf(9072));

मैं apache-poi के साथ एक docx फ़ाइल उत्पन्न कर रहा हूँ शब्द फाईल में, मैं तालिकाओं को जोड़ता हूं, जिनके कॉलम में एक चौड़ाई है, मैं तय करना चाहता हूं।

वर्तमान में, मैं यहाँ वर्णित तकनीक का उपयोग करता हूं: http://apache-poi.1045710.n5.nabble.com/Is-there-a-way-to-set-the-width-of-a-column-in-XWPFTableCell -td5711491.html

असल में, यह सेटिंग पर जोर देता है

cell.getCTTc().addNewTcPr().addNewTcW().setW(BigInteger.valueOf(cols[j])); 

उस कॉलम के प्रत्येक कक्ष पर

समस्या ये है कि जब भी फ़ाइल एमएस वर्ड में पूरी तरह से खुलती है, ओपन ऑफिस में मैं उन स्तंभों की व्याख्या करता हूं जो मैंने स्तंभविड्थ पर अलग सेट की थी। जबकि एमएस वर्ड औपचारिक रूप से 20 वें बिंदु को यूनिट के रूप में मानता है, ओपन ऑफ़िस के बजाय अंक का उपयोग करने लगता है और इसलिए ओ ओ में जेनरेटेड डॉक्यूमेंट खोलने पर सभी कॉलम 20 गुना व्यापक होते हैं।

आम तौर पर जब मुझे उत्पन्न उत्पादन में कुछ अजीब दिखाई देता है, तो मैं डॉक फाइल को खोलता हूं, देखें कि मूल्य क्या होना चाहिए और मेरे कोड को बदलना चाहिए। लेकिन ओपन ऑफ़िस डॉक्स को बचाने में सक्षम नहीं प्रतीत होता है, इसलिए मैं ओ ओ ओ में इसे परिवर्तित नहीं कर सकता, इसे वापस सहेज कर देखें और देखें कि क्या क्रॉस-एप्लीकेशन सॉल्यूशन को खोजने के लिए शब्द अभी भी दस्तावेज की व्याख्या करता है।

किसी भी विचार से मैं तालिका स्तंभ की चौड़ाई कैसे निर्धारित करता हूँ ताकि ओ ओ और एमएस वर्ड दोनों यह उसी की व्याख्या करे?


एकल कोशिकाओं को स्पर्श न करें। एक GRID जोड़ें:

XWPFDocument doc = new XWPFDocument();
XWPFTable table = doc.createTable(1,2);
table.getCTTbl().addNewTblGrid().addNewGridCol().setW(BigInteger.valueOf(6000));
table.getCTTbl().getTblGrid().addNewGridCol().setW(BigInteger.valueOf(2000));
table.getRow(0).getCell(0).setText("1A");
table.getRow(0).getCell(1).setText("1B");
XWPFTableRow newrow = table.createRow();
newrow.getCell(0).setText("2A");
newrow.getCell(1).setText("2B");

ग्रिड पूरे कॉलम के लिए चौड़ाई सेट करता है। प्रत्येक सेल के लिए चौड़ाई निर्धारित करने के लिए आपको किसी भी चक्र की आवश्यकता नहीं है। यह लिब्रे ऑफिस और Google डॉक्स में काम करता है

एमएस वर्ड में सेट की गई चौड़ाई भी देखने के लिए, आप पहली पंक्ति में कक्षों की चौड़ाई निर्धारित कर सकते हैं:

 widthCellsAcrossRow(table, 0, 0, 4000);
 widthCellsAcrossRow(table, 0, 0, 5000);

private static void widthCellsAcrossRow (XWPFTable table, int rowNum, int colNum, int width) {
        XWPFTableCell cell = table.getRow(rowNum).getCell(colNum);
        if (cell.getCTTc().getTcPr() == null)
            cell.getCTTc().addNewTcPr();
        if (cell.getCTTc().getTcPr().getTcW()==null)
            cell.getCTTc().getTcPr().addNewTcW();
        cell.getCTTc().getTcPr().getTcW().setW(BigInteger.valueOf((long) width));
}

यह एक बड़ा और बहुत मुश्किल तत्व है मैंने इसे एक मेज सेल की चौड़ाई को स्थापित करने की अपनी सामान्य विधि का उपयोग कर हल किया

private static void setTableColumnWidths(XWPFTable table) {
    table.getCTTbl().addNewTblGrid().addNewGridCol().setW(BigInteger.valueOf(2000));
    table.getCTTbl().getTblGrid().addNewGridCol().setW(BigInteger.valueOf(3200));
    table.getCTTbl().getTblGrid().addNewGridCol().setW(BigInteger.valueOf(1000));
    table.getCTTbl().getTblGrid().addNewGridCol().setW(BigInteger.valueOf(1000));
    table.getCTTbl().getTblGrid().addNewGridCol().setW(BigInteger.valueOf(1105));
    table.getCTTbl().getTblGrid().addNewGridCol().setW(BigInteger.valueOf(1105));
}






xwpf