как вытащить текст из .doc или .docx на Java?

256
01 марта 2017, 19:21

Я хочу вытащить текст из .doc или .docx с таким же шрифтом , размером на Джаве. Но пока что у меня не получается даже просто вытащить текст. Я попробовала множество вариантов, но везде ответ выходит с кубиками.

Используется следующий код:

package myconverter;
import com.itextpdf.text.Anchor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.CMYKColor;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
public class Myconverter {
    public static void main(String[] args) throws FileNotFoundException, DocumentException, IOException {
        String result = "";
        String line;
        String doc = "C:\\samples\\HelloWorld.doc";
        String pdf = doc.substring(0, doc.lastIndexOf('.') + 1) + "pdf";
        Document document = new Document(PageSize.A4, 50, 50, 50, 50);
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(pdf));
        document.open();
        Anchor anchorTarget = new Anchor("");
        anchorTarget.setName("BackToTop");
        Paragraph paragraph1 = new Paragraph();
        //  paragraph1.setSpacingBefore(50);
        paragraph1.add(anchorTarget);
        document.add(paragraph1);
        File file = new File(doc);
        try (FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr)) {
            while((line = br.readLine()) != null){
                result = line;
               // System.out.println(result);  
                //document.add(new Paragraph(result, FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD,new CMYKColor(0, 255, 0, 0))));
                document.add(new Paragraph(result));
            }
        }
        //  System.out.println(result);
        document.close();
    }
}
Answer 1

Ну FileReader для этого точно не предназначен, он предназначен для простых текстовых форматов, Word таковым не является.

Можно это сделать с помощью POI, но там много ручками таскать придется. Готовый код для этого я вам не дам, но предложу легкий вариант (правда он не со всеми форматами ворда дружит): вот есть такая библиотека, которая кроме всего прочего может docx (xml версию) конвертировать в pdf.

Вот пример использования:

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import fr.opensagres.xdocreport.samples.docx.converters.Data;
public class ConvertDocxBigToPDF
{
    public static void main( String[] args )
    {
        long startTime = System.currentTimeMillis();
        try
        {
            // 1) Load docx with POI XWPFDocument
            XWPFDocument document = new XWPFDocument( Data.class.getResourceAsStream( "DocxBig.docx" ) );
            // 2) Convert POI XWPFDocument 2 PDF with iText
            File outFile = new File( "target/DocxBig.pdf" );
            outFile.getParentFile().mkdirs();
            OutputStream out = new FileOutputStream( outFile );
            PdfOptions options = PdfOptions.create().fontEncoding( "windows-1251" );
            PdfConverter.getInstance().convert( document, out, options );
        }
        catch ( Throwable e )
        {
            e.printStackTrace();
        }
        System.out.println( "Generate DocxBig.pdf with " + ( System.currentTimeMillis() - startTime ) + " ms." );
    }
}
READ ALSO
could not execute query. Программа не видит таблицы

could not execute query. Программа не видит таблицы

Я проблему свою уже описывал но сейчас сделаю это более конкретноПрограмма стоит на сервере, работает день, каждую ночь программа падает

198
Чат Java (по аналогии чата World Of Tanks) [требует правки]

Чат Java (по аналогии чата World Of Tanks) [требует правки]

Кто может дать качественную документацию по созданию чата с хабров и тд

204
Разделение приложения на сервисы

Разделение приложения на сервисы

Услышал, что современные веб-приложения строятся из независимых сервисовУ меня есть сервер tomcat, java ee и сервер Mysql

214
Не передаются значения из метода в массив

Не передаются значения из метода в массив

Не могу понять почему метод createArrayOfXValues не заполняет массив значениями y, которые были получены в методе TabulЕсли y статическая переменная,...

205