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からこの回答へのエラーに関する回答ですが、それでも同じエラーが発生します:(

この問題を解決するのを手伝ってください doc から pdf への変換を行ったことがある人は、コードを共有してください。

私は非常に感謝します:)

よろしく

4

1 に答える 1

1

問題は、何かを2回以上含めていることです:

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

重複したライブラリのビルド パスを確認します。

さらに、これが解決されたら、おそらく project.properties ファイルに次の行を追加する必要があります: dex.force.jumbo=true

これにより、しばらくの間、65535 メソッド制限の問題を解決できます。

于 2013-07-31T21:33:30.543 に答える