在安卓系统中将doc文档转换为PDF格式,无法执行dex。

4

我正在使用以下库将doc文件转换为pdf格式的安卓应用程序中:

  • itext-1.4.8.jar
  • poi-3.0-FINAL.jar
  • poi-scratchpad-3.2-FINAL.jar

以下是我的示例代码:

package com.example.converter;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import android.content.Context;
import android.os.Environment;
import android.widget.LinearLayout;

import com.lowagie.text.Document;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

    public class TestCon extends LinearLayout {

   FileInputStream infile;
   private static String FILE = Environment.getExternalStorageDirectory()
        + "/MyReport.pdf";

   public TestCon(Context context) {
    super(context);
    my_method(context);
  }

  public void my_method(Context context) {
    POIFSFileSystem fs = null;
    Document document = new Document();

    try {
        infile = (FileInputStream) context.getApplicationContext().getAssets().open("test.doc");
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    try {
        System.out.println("Starting the test");
        fs = new POIFSFileSystem(infile);

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

        OutputStream file = new FileOutputStream(FILE);

        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();
    }
}

但是我遇到了这个错误

但我遇到了这个错误。

[2013-05-10 12:39:12 - Dex Loader] Unable to execute dex: Multiple dex files define Lorg/apache/poi/generator/FieldIterator;
[2013-05-10 12:39:12 - converter] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/apache/poi/generator/FieldIterator;

根据这个错误的解答,我已经从lib文件夹中删除了android-support-v4.jar。但是我仍然遇到相同的错误 :(

请帮助我解决这个问题。如果有任何做过文档转换为PDF的人,请分享你的代码。

我将非常感激 :)

此致


您似乎将 Apache POI 的存储库搞混了 - 如果您要同时包含 Core 和 Scratchpad,那么必须使用同一版本的 jars 包! - Gagravarr
@Droid GEEK:你解决了这个问题吗?我也遇到了同样的问题。 - SKK
1个回答

1
问题在于您重复包含了某些内容:
Multiple dex files define Lorg/apache/poi/generator/FieldIterator

检查您的构建路径是否存在重复的库。

此外,解决这个问题后,您可能需要在project.properties文件中添加以下行: dex.force.jumbo=true

这将允许您暂时解决某些情况下出现的65535方法限制问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接