6

如何使用 Java 将 pdf 文件转换为 word 文件?

而且,它真的像看起来那么简单吗?

4

2 回答 2

10

试试PDFBOX

public class PDFTextReader
{
   static String pdftoText(String fileName) {
        PDFParser parser;
        String parsedText = null;
        PDFTextStripper pdfStripper = null;
        PDDocument pdDoc = null;
        COSDocument cosDoc = null;
        File file = new File(fileName);
        if (!file.isFile()) {
            System.err.println("File " + fileName + " does not exist.");
            return null;
        }
        try {
            parser = new PDFParser(new FileInputStream(file));
        } catch (IOException e) {
            System.err.println("Unable to open PDF Parser. " + e.getMessage());
            return null;
        }
        try {
            parser.parse();
            cosDoc = parser.getDocument();
            pdfStripper = new PDFTextStripper();
            pdDoc = new PDDocument(cosDoc);
            parsedText = pdfStripper.getText(pdDoc);
        } catch (Exception e) {
            System.err
                    .println("An exception occured in parsing the PDF Document."
                            + e.getMessage());
        } finally {
            try {
                if (cosDoc != null)
                    cosDoc.close();
                if (pdDoc != null)
                    pdDoc.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return parsedText;
    }
    public static void main(String args[]){

         try {

            String content = pdftoText(PDF_FILE_PATH);

            File file = new File("/sample/filename.txt");

            // if file doesnt exists, then create it
            if (!file.exists()) {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(content);
            bw.close();

            System.out.println("Done");

        } catch (IOException e) {
            e.printStackTrace();
        }
    } 
}
于 2013-08-01T06:15:44.383 回答
5

我已经深入研究了这个问题,我发现为了获得正确的结果,你不能避免使用 MS Word。即使是像 LibreOffice 这样的受资助项目也难以正确转换,因为 Word 格式相当复杂并且版本会发生变化。只有 MS Word 会对此进行跟踪。

出于这个原因,我实现了documents4j,它使用Java API 将转换委托给MS Word。此外,它允许您将转换移动到可以使用 REST API 联系的不同机器。您可以在其 GitHub 页面上找到详细信息。

于 2014-08-27T20:42:39.270 回答