2012-09-07 114 views
2

我想將圖像文件(jpeg)轉換爲我的Adroid應用程序中的pdf文件。我已經使用了itextpdf jar和droidtext jar。兩者都不適合我。以下是使用itextpdf時的代碼。如何將圖像文件轉換爲Android中的pdf文件

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添加到構建路徑中。我用模擬器以及真實設備嘗試了這一點。

無法弄清楚我做錯了什麼。請幫助...

回答

0

找到一種方法把這個問題解決。我必須在我的代碼中做兩處更改。

  1. 關閉文檔

這裏後實現我Activity

  • 關閉流DocListener接口是第二點的變化

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

    不過我想不出用的關係日誌和工作代碼中給出的錯誤: -/

  • 0

    我見過的所有例子都直接使用FileOutputStream,你嘗試過沒有緩衝區嗎?

    PdfWriter.getInstance(document, fileOutputStream); 
    
    +0

    是的,我也試過這種方式。但沒有積極的表態。 – AnujAroshA

    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(); 
    
    +0

    我只使用** itextpdf-5.1.1.jar **庫 – Khan

    +0

    其實你的答案是正確的,直到你不打算關閉FileOutputStream。關閉已打開的流是一種很好的做法。所以我能夠找到解決方案。希望你不介意我把它作爲答案:-) – AnujAroshA

    相關問題