2012-05-31 33 views
1

我試圖按下按鈕時創建PDF文件。我正在使用iText庫。嘗試創建PDF文件的iText問題

我的活動:

package com.pdf; 

import java.io.FileOutputStream; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 

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

public class PDFActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    public void GenerarPDF(View view)throws Exception{ 
      Document document=new Document(); 
      PdfWriter.getInstance(document,new FileOutputStream("generando.pdf")); 
      document.open(); 
      document.add(new Paragraph("Testing testing and testing")); 
      document.close(); 
    } 

} 

我的XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" android:background="#555"> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="34dp" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/Submit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/editText1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="23dp" 
     android:onClick="GenerarPDF" 
     android:text="Button" /> 

</RelativeLayout> 

我的清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.pdf" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="15" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> 
    <uses-permission android:name="android.permission.READ_FRAME_BUFFER"/> 
    <uses-permission android:name="android.permission.BIND_INPUT_METHOD"/> 
    <uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".PDFActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

和日誌貓:

05-31 12:08:58.778: E/AndroidRuntime(662): FATAL EXCEPTION: main 
05-31 12:08:58.778: E/AndroidRuntime(662): java.lang.IllegalStateException: Could not execute method of the activity 
05-31 12:08:58.778: E/AndroidRuntime(662): at android.view.View$1.onClick(View.java:3044) 
05-31 12:08:58.778: E/AndroidRuntime(662): at android.view.View.performClick(View.java:3511) 
05-31 12:08:58.778: E/AndroidRuntime(662): at android.view.View$PerformClick.run(View.java:14105) 
05-31 12:08:58.778: E/AndroidRuntime(662): at android.os.Handler.handleCallback(Handler.java:605) 
05-31 12:08:58.778: E/AndroidRuntime(662): at android.os.Handler.dispatchMessage(Handler.java:92) 
05-31 12:08:58.778: E/AndroidRuntime(662): at android.os.Looper.loop(Looper.java:137) 
05-31 12:08:58.778: E/AndroidRuntime(662): at android.app.ActivityThread.main(ActivityThread.java:4424) 
05-31 12:08:58.778: E/AndroidRuntime(662): at java.lang.reflect.Method.invokeNative(Native Method) 
05-31 12:08:58.778: E/AndroidRuntime(662): at java.lang.reflect.Method.invoke(Method.java:511) 
05-31 12:08:58.778: E/AndroidRuntime(662): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-31 12:08:58.778: E/AndroidRuntime(662): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-31 12:08:58.778: E/AndroidRuntime(662): at dalvik.system.NativeStart.main(Native Method) 
05-31 12:08:58.778: E/AndroidRuntime(662): Caused by: java.lang.reflect.InvocationTargetException 
05-31 12:08:58.778: E/AndroidRuntime(662): at java.lang.reflect.Method.invokeNative(Native Method) 
05-31 12:08:58.778: E/AndroidRuntime(662): at java.lang.reflect.Method.invoke(Method.java:511) 
05-31 12:08:58.778: E/AndroidRuntime(662): at android.view.View$1.onClick(View.java:3039) 
05-31 12:08:58.778: E/AndroidRuntime(662): ... 11 more 
05-31 12:08:58.778: E/AndroidRuntime(662): Caused by: java.lang.NoClassDefFoundError: com.itextpdf.text.Document 
05-31 12:08:58.778: E/AndroidRuntime(662): at com.pdf.PDFActivity.GenerarPDF(PDFActivity.java:22) 
05-31 12:08:58.778: E/AndroidRuntime(662): ... 14 more 

新增logcat的錯誤:

05-31 15:26:00.411: E/dalvikvm(792): Could not find class 'com.itextpdf.text.Document', referenced from method com.pdf.PDFActivity.GenerarPDF 

我認爲是真正的問題,但不知道該解決方案。

+1

那麼,根據你的stacktrace的最後一行:iText jar沒有被正確添加到你的類路徑中。然而,我不是Android開發者,只是一個普通的Java人,所以我不能真正幫助你解決這個問題,但我認爲你應該看看這個方向...... –

回答

3

你究竟在哪裏試圖創建pdf文件?我使用了itextpdf-5.2.1.jar,並能夠在SD卡上成功創建pdf。我在程序中添加了以下幾行代碼:

public void GenerarPDF(View view)throws Exception{ 
     Document document=new Document(); 
     File root = new File(Environment.getExternalStorageDirectory(), "Notes"); 
     if (!root.exists()) { 
      root.mkdirs(); 
     } 
     File gpxfile = new File(root, "generando.pdf"); 
     PdfWriter.getInstance(document,new FileOutputStream(gpxfile)); 
     document.open(); 
     document.add(new Paragraph("Testing testing and testing")); 
     document.close(); 
} 

希望此回答有幫助。

編輯: 您在您的評論(06-01 23提到的錯誤:32:37.178:E/AndroidRuntime(535):java.io.FileNotFoundException:致/generando.pdf:打開失敗: EROFS(只讀文件系統) )正是我運行您提供的代碼時所獲得的結果。原因是您沒有指定可以創建/存儲新文件的位置。使用GenerarPDF(查看視圖)粘貼在這裏,程序將創建新的pdf。

此錯誤的另一個原因可能是您的設備中沒有SD卡。

+0

它仍然不適合它。我也得到這個問題在日誌貓 '05-31 15:26:00.411:E/dalvikvm(792):無法找到類com.itextpdf.text.Document',從方法com.pdf.PDFActivity .GenerarPDF ' – DRaNe

+0

也許您正在使用的itextpdf jar有問題,或者可能是@Alexis Pigeon建議的,您沒有正確地將jar文件合併到您的classpath中。嘗試使用最新的itextpdf jar(itextpdf-5.2.1.jar ...我使用的版本)。 –

+0

我也在使用5.2.1.jar。我把一個textview來捕捉異常,我得到這個異常:Excepcion:java.io.FileNotFoundException:/Test.pdf:打開失敗:EROFS(只讀文件系統) – DRaNe

1

更改文件根到此行

File root = new File(android.os.Environment.getExternalStorageDirectory(), "Notes"); 
0

看起來你忘了打電話從的onCreate()generatePDF()... 希望它能幫助!