4

我正在使用以下库在 android 中将 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;

我已经删除了我的 android-support-v4.jar。从 lib 文件夹 a/c 到这个关于错误的答案的答案,但我仍然遇到同样的错误:(

请帮我解决这个问题任何做过文档到pdf转换的人,请分享您的代码。

我将非常感谢:)

问候

4

1 回答 1

1

问题是你包含了两次或更多的东西:

Multiple dex files define Lorg/apache/poi/generator/FieldIterator

查看重复库的构建路径。

此外,一旦解决了这个问题,您可能必须在 project.properties 文件中添加这一行:dex.force.jumbo=true

这将允许您在一段时间内解决 65535 方法限制问题。

于 2013-07-31T21:33:30.543 回答