2010-07-28 37 views
6

Tôi hiện đang làm việc với dự án Java bằng cách sử dụng apache poi. Bây giờ trong dự án của tôi, tôi muốn chuyển đổi tệp doc thành tệp pdf. Việc chuyển đổi được thực hiện thành công nhưng tôi chỉ nhận được văn bản trong pdf không phải bất kỳ kiểu văn bản hoặc màu văn bản nào. Tệp pdf của tôi trông giống như màu đen & màu trắng. Trong khi tệp tài liệu của tôi được tô màu và có kiểu văn bản khác nhau.Apache POI HWPF - sự cố khi chuyển đổi tệp doc sang pdf

Đây là mã của tôi,

POIFSFileSystem fs = null; 
Document document = new Document(); 

try { 
    System.out.println("Starting the test"); 
    fs = new POIFSFileSystem(new FileInputStream("/document/test2.doc")); 

    HWPFDocument doc = new HWPFDocument(fs); 
    WordExtractor we = new WordExtractor(doc); 

    OutputStream file = new FileOutputStream(new File("/document/test.pdf")); 

    PdfWriter writer = PdfWriter.getInstance(document, file); 

    Range range = doc.getRange(); 
    document.open(); 
    writer.setPageEmpty(true); 
    document.newPage(); 
    writer.setPageEmpty(true); 

    String[] paragraphs = we.getParagraphText(); 
    for (int i = 0; i < paragraphs.length; i++) { 

     org.apache.poi.hwpf.usermodel.Paragraph pr = range.getParagraph(i); 
     // CharacterRun run = pr.getCharacterRun(i); 
     // run.setBold(true); 
     // run.setCapitalized(true); 
     // run.setItalic(true); 
     paragraphs[i] = paragraphs[i].replaceAll("\\cM?\r?\n", ""); 
    System.out.println("Length:" + paragraphs[i].length()); 
    System.out.println("Paragraph" + i + ": " + paragraphs[i].toString()); 

    // add the paragraph to the document 
    document.add(new Paragraph(paragraphs[i])); 
    } 

    System.out.println("Document testing completed"); 
} catch (Exception e) { 
    System.out.println("Exception during test"); 
    e.printStackTrace(); 
} finally { 
       // close the document 
    document.close(); 
      } 
} 

hãy giúp tôi.

Thnx trước.

Trả lời

4

Nếu bạn nhìn vào Apache Tika, có một ví dụ tốt về việc đọc một số thông tin kiểu từ tài liệu HWPF. Mã trong Tika tạo ra HTML dựa trên các nội dung HWPF, nhưng bạn sẽ thấy rằng một cái gì đó rất giống các tác phẩm cho trường hợp của bạn.

Lớp Tika là https://svn.apache.org/repos/asf/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java

Một điều cần lưu ý về tài liệu word là tất cả mọi thứ trong bất kỳ một nhân vật Run có cùng định dạng áp dụng cho nó. Do đó, một đoạn được tạo thành từ một hoặc nhiều ký tự chạy. Một số kiểu dáng được áp dụng cho một Đoạn và các phần khác được thực hiện khi chạy. Tùy thuộc vào định dạng bạn quan tâm, nó có thể do đó trên đoạn văn hoặc chạy.

3

Nếu bạn sử dụng WordExtractor, bạn sẽ chỉ nhận được văn bản. Thử sử dụng lớp CharacterRun. Bạn sẽ có được phong cách cùng với văn bản. Vui lòng tham khảo mã mẫu sau.

Range range = doc.getRange(); 
for (int i = 0; i < range.numParagraphs(); i++) { 
    org.apache.poi.hwpf.usermodel.Paragraph poiPara = range.getParagraph(i); 
    int j = 0; 
    while (true) { 
     CharacterRun run = poiPara.getCharacterRun(j++); 
     System.out.println("Color "+run.getColor()); 
     System.out.println("Font size "+run.getFontSize()); 
     System.out.println("Font Name "+run.getFontName()); 
     System.out.println(run.isBold()+" "+run.isItalic()+" "+run.getUnderlineCode()); 
     System.out.println("Text is "+run.text()); 
     if (run.getEndOffset() == poiPara.getEndOffset()) { 
      break; 
     } 
    } 
} 
Các vấn đề liên quan