如何在Android中将图像文件转换为pdf文件

时间:2012-09-07 09:07:10

标签: android image pdf itextpdf

我正在尝试将图像文件(jpeg)转换为我的Adroid应用程序中的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 添加到构建路径中。我尝试使用模拟器和真实设备。

无法弄清楚我做错了什么。请帮忙......

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

我见过的所有例子都直接使用FileOutputStream,你试过没有缓冲区吗?

PdfWriter.getInstance(document, fileOutputStream);

答案 2 :(得分:0)

找到解决此问题的方法。我必须在代码中做两处更改。

  1. DocListener
  2. 中实施Activity界面
  3. 关闭文档后关闭流
  4. 以下是第二点的变化

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

    我仍然无法想到与日志和工作代码中给出的错误的关系: - /