2

Android アプリケーションで画像ファイル (jpeg) を pdf ファイルに変換しようとしています。itextpdf jar とdroidtext jarを使用しました。どちらも私にはうまくいきません。以下は、itextpdfを使用している間のコードです。

Document document = new Document();

String directoryPath = Environment.getExternalStorageDirectory().toString();

File newPdfFile = new File(directoryPath, "textview8.pdf");

FileOutputStream fileOutputStream = null;

try {
    fileOutputStream = new FileOutputStream(newPdfFile);
} catch (FileNotFoundException fnfe) {
    Log.w(TAG, "# Exception caz of fileOutputStream : " + fnfe);
}

BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);

try {
    PdfWriter.getInstance(document, bufferedOutputStream);
} catch (DocumentException de) {
    Log.w(TAG, "# Exception caz of PdfWriter.getInstance : " + de);
}

document.open(); 

Image image = null;

try {
    image = Image.getInstance(directoryPath + File.separator + "textview1.JPEG");
} catch (BadElementException bee) {
    Log.w(TAG, "# First exception caz of image : " + bee);
} catch (MalformedURLException mue) {
    Log.w(TAG, "# Second exception caz of image : " + mue);
} catch (IOException ioe) {
    Log.w(TAG, "# Third exception caz of image : " + ioe);
}

try {
    document.add(image);
} catch (DocumentException de) {
    Log.w(TAG, "# Exception caz of document.add : " + de);
}

try {
    bufferedOutputStream.flush();
    bufferedOutputStream.close();

    fileOutputStream.flush();
    fileOutputStream.close();

} catch (IOException ioe) {
    Log.w(TAG, "# Exception caz of bufferedOutputStream.flush : " + ioe);
}

document.close();

NullPointerExceptionこれにより、コード行が原因でエラーが発生しますdocument.close();

その行にコメントを付けてプログラムを実行すると、次のエラーが表示されます。

Could not find class 'com.itextpdf.awt.PdfPrinterGraphics2D', referenced from method com.itextpdf.text.pdf.PdfContentByte.createPrinterGraphicsShapes

しかし、彼らが見つけられないと言っているクラスは既にjarファイルにあります。これは、com.itextpdf.awt.PdfPrinterGraphics2Dがプロジェクトに存在することを意味します。

itextpdf-5.1.3.jarもビルド パスに追加しました。エミュレータだけでなく実機でも試してみました。

私が間違ったことを理解できません。助けてください...

4

3 に答える 3

3

このようにするだけでうまくいきます

Document document=new Document();
String dirpath=android.os.Environment.getExternalStorageDirectory().toString();
PdfWriter.getInstance(document,new FileOutputStream(dirpath+"/imagedemo.pdf"));
document.open();
Image im=Image.getInstance(dirpath+"/"+"logo.png");  // Replace logo.png with your image name with extension 
document.add(im);
document.close();
于 2012-09-07T10:12:27.117 に答える
0

この問題に取り組む方法を見つけました。コードに 2 つの変更を加える必要があります。

  1. DocListener私の中にインターフェースを実装するActivity
  2. ドキュメントを閉じた後にストリームを閉じる

2点目の変更点はこちら

try {
    bufferedOutputStream.flush();

    fileOutputStream.flush();

    } catch (IOException ioe) {
        Log.w(TAG, "# Exception caz of flush : " + ioe);
    }

    document.close();

try {
    bufferedOutputStream.close();

    fileOutputStream.close();

    } catch (IOException ioe) {
        Log.w(TAG, "# Exception caz of close : " + ioe);
}     

それでも、ログに表示されたエラーと動作コードとの関係は考えられません:-/

于 2012-09-10T03:26:48.407 に答える
0

私が見たすべての例は FileOutputStream を直接使用していますが、バッファなしで試しましたか?

PdfWriter.getInstance(document, fileOutputStream);
于 2012-09-07T09:44:18.093 に答える