Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApachePDFBox.doc到.pdf的转换_Java_Pdf_Itext_Pdfbox_Doc - Fatal编程技术网

Java ApachePDFBox.doc到.pdf的转换

Java ApachePDFBox.doc到.pdf的转换,java,pdf,itext,pdfbox,doc,Java,Pdf,Itext,Pdfbox,Doc,我正在尝试将.doc转换为.pdf,但我遇到了这个异常,我不知道如何修复它 java.io.IOException: Missing root object specification in trailer at org.apache.pdfbox.pdfparser.COSParser.parseTrailerValuesDynamically(COSParser.java:2042) 这是引发异常的地方: PDDocument pdfDocument = PDDocument.load

我正在尝试将
.doc
转换为
.pdf
,但我遇到了这个异常,我不知道如何修复它

java.io.IOException: Missing root object specification in trailer
at   org.apache.pdfbox.pdfparser.COSParser.parseTrailerValuesDynamically(COSParser.java:2042)
这是引发异常的地方:

PDDocument pdfDocument = PDDocument.load(convertDocToPdf(documentInputStream));
以下是我的转换方法:

private byte[] convertDocToPdf(InputStream documentInputStream) throws Exception {
    Document document = null;
    WordExtractor we = null;
    ByteArrayOutputStream out = null;
    byte[] documentByteArray = null;
    try {
        document = new Document();
        POIFSFileSystem fs = new POIFSFileSystem(documentInputStream);

        HWPFDocument doc = new HWPFDocument(fs);
        we = new WordExtractor(doc);
        out = new ByteArrayOutputStream();
        PdfWriter writer = PdfWriter.getInstance(document, out);

        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);
            paragraphs[i] = paragraphs[i].replaceAll("\\cM?\r?\n", "");
            document.add(new Paragraph(paragraphs[i]));
        }
        documentByteArray = out.toByteArray();
    } catch (Exception ex) {
        ex.printStackTrace(System.out);
        throw new Exception(STATE.FAILED_CONVERSION.name());
    } finally {
        document.close();
        try {
            we.close();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return documentByteArray;
}
private byte[]convertDocToPdf(InputStream文档InputStream)引发异常{
单据=空;
WordExtractor we=null;
ByteArrayOutputStream out=null;
字节[]documentByteArray=null;
试一试{
文件=新文件();
POIFSFISTEM fs=新的POIFSFISTEM(documentInputStream);
HWPF文件文件=新的HWPF文件(fs);
we=新单词提取器(doc);
out=新的ByteArrayOutputStream();
PdfWriter writer=PdfWriter.getInstance(文档,输出);
Range Range=doc.getRange();
document.open();
writer.setPageEmpty(true);
document.newPage();
writer.setPageEmpty(true);
String[]段落=we.getParagraphText();
对于(int i=0;i
您使用iText类

documentByteArray = out.toByteArray();
在你完成文件之前

document.close();

因此,
documentByteArray
只包含一个PDFBox抱怨的不完整的PDF。

PdfWriter-这不是文本吗?您使用的是什么版本的PDFBox?你能上传你的PDF吗?为什么从未调用“writer.close()”?您的问题是关于iText还是关于Pdfbox?它们是相互竞争的产品。@Amadee仍然可以同时使用这两种产品。不过,我们必须了解不同的体系结构。