2012-02-13 42 views
6

Tôi đang đánh giá apache poi là tùy chọn để viết các tệp docx. Điều cụ thể mà tôi đang tìm kiếm là tạo nội dung trong tệp docx bằng các ngôn ngữ khác nhau (tiếng Hindi/marathi phải cụ thể). Tôi đang đối mặt với sự cố sau:Apache POI - Vấn đề đầu ra Docx

Khi tệp docx được viết, văn bản "Hindi/Marathi" hiển thị dưới dạng ô vuông mặc dù phông chữ "Arial Unicode MS" hỗ trợ. Vấn đề là khi chúng tôi kiểm tra các hộp MS Word hiển thị phông chữ là "Cailbri", mặc dù tôi đã đặt phông chữ thành "Arial Unicode MS". Nếu tôi chọn các hộp trong MS Word và sau đó thay đổi phông chữ thành "Arial Unicode MS", các từ tiếng Hindi/marathi được hiển thị chính xác. Bất kỳ ý tưởng tại sao điều này xảy ra? Xin lưu ý rằng tôi đang sử dụng phiên bản phát triển của POI vì phiên bản ổn định trước đó không hỗ trợ cài đặt các họ phông chữ. Đây là nguồn:

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import org.apache.poi.xwpf.usermodel.XWPFDocument; 
import org.apache.poi.xwpf.usermodel.XWPFParagraph; 
import org.apache.poi.xwpf.usermodel.XWPFRun; 

public class CreateDocumentFromScratch 
{ 

    public static void main(String[] args) 
    { 
     XWPFDocument document = new XWPFDocument(); 

     XWPFParagraph paragraphTwo = document.createParagraph(); 
     XWPFRun paragraphTwoRunOne = paragraphTwo.createRun();  
     paragraphTwoRunOne.setFontFamily("Arial Unicode MS"); 
     paragraphTwoRunOne.setText("नसल्यास"); 


     XWPFParagraph paragraphThree = document.createParagraph(); 
     XWPFRun paragraphThreeRunOne = paragraphThree.createRun(); 
     paragraphThreeRunOne.setFontFamily("Arial Unicode MS"); 
     paragraphThreeRunOne.setText("This is nice"); 

     FileOutputStream outStream = null; 
     try { 
      outStream = new FileOutputStream("c:/will/First.doc"); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 

     try { 
      document.write(outStream); 
      outStream.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

Mọi trợ giúp sẽ được đánh giá cao.

+0

Vui lòng cung cấp phiên bản chính xác của POI và MS Word - có vẻ như vấn đề không xảy ra với các phiên bản POI gần đây. –

+1

Tôi đã thử mã của bạn với POI API 3.11 và nó hoạt động tốt. Tôi đã sử dụng MS Word 2013 để mở tệp .doc – esprittn

Trả lời

1

Để hồi sinh bài đăng cũ; OP có thể xác nhận phiên bản MS Office đang được sử dụng không? Vấn đề có vẻ như với MS Office 2003 đang chạy trên Windows XP. Nhưng sau đó nó có thể được trên một phiên bản hệ điều hành cao hơn, quá.

Có vẻ như MS Word áp dụng phông chữ Mangal cho chữ Hindi [Tiêu chuẩn mã hóa: Chỉ thị: Tiếng Hindi ISCII 57002 (Devanagari)]. Liên kết sau giải thích điều này:

https://support.office.com/en-ca/article/Choose-text-encoding-when-you-open-and-save-files-60d59c21-88b5-4006-831c-d536d42fd861

đề nghị cách giải quyết: Từ Windows XP Control Panel, chọn Regional and Language Options. Chọn Ngôn ngữ. Đánh dấu vào ô "Install files cho kịch bản phức tạp và ngôn ngữ từ phải sang trái (bao gồm cả tiếng Thái).

Khởi động lại máy tính.

Tuy nhiên, không có vấn đề như vậy đã được quan sát thấy khi mở tập tin sử dụng phiên bản LibreOffice 4.3.5.2 trên . windows, và LibreOffice 4.2.7.2 trên Linux (Ubuntu)

sử dụng các thư viện sau: poi-3.10-CUỐI CÙNG-20140208.jar, poi-OOXML-3.10-CUỐI CÙNG-20140208.jar,
poi-OOXML -schemas-3.10-FINAL-20140208.jar, xmlbeans-2.3.0.jar, dom4j-1.6.1.jar, stax-api-1.0.1.jar

Các vấn đề liên quan