itextPdf的问题,拒绝先前失败的类java.lang.Class <com.itextpdf.awt.PdfGraphics2D>的重新初始化

Th3*_*rk0 3 java mobile android itext

我是android的新手,我正在尝试将位图转换为android中的Pdf。我正在使用itextpdf 5.5.4 jar文件。我正在使用的代码如下所示:

import com.itextpdf.text.BadElementException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfWriter;

public void savePhotoPDF()
    {
        String currentTimestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"CameraApp");
        File picPDF = new File(dir.getPath()+File.separator+"IMG_"+currentTimestamp+".pdf");

        //File picPDF = new File(dir.getPath(),"abcd.pdf");

        Document document = new Document();
        try
        {


            PdfWriter.getInstance(document, new FileOutputStream(picPDF));
            document.open();

            addImage(document);
            document.close();
        }

        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    //private static void addImage(Document document)
    private void addImage(Document document)
    {
        try
        {
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            clickedPhoto.compress(Bitmap.CompressFormat.PNG, 100, stream);

            bArray = stream.toByteArray();

            image = Image.getInstance(bArray);  ///Here i set byte array..you can do bitmap to byte array and set in image...
        }
        catch (BadElementException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch(Exception ex)
        {

        }
        // image.scaleAbsolute(150f, 150f);
        try
        {
            document.add(image);
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,clickedPhoto只是定义为的位图类型:

clickedPhoto = BitmapFactory.decodeByteArray(bytes,0,bytes.length);
Run Code Online (Sandbox Code Playgroud)

我还在应用程序gradle中编译了itextpdf库:

compile 'com.itextpdf:itextpdf:5.5.6'
Run Code Online (Sandbox Code Playgroud)

但我不知道为什么,但是图像(位图:clickedPhoto)为PDF格式没有被保存在给定的位置,并且在Android监视器中,我可以看到:

10-11 18:54:53.154 24531-24531/com.example.abhisheksirohi.myapplication I/art: Rejecting re-init on previously-failed class java.lang.Class<com.itextpdf.awt.PdfGraphics2D>
10-11 18:54:53.158 24531-24531/com.example.abhisheksirohi.myapplication I/art: Rejecting re-init on previously-failed class java.lang.Class<com.itextpdf.awt.PdfPrinterGraphics2D>
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助我解决此异常,我将非常高兴。谢谢!!

Ame*_*sse 5

您正在使用Android开发。这意味着您需要iText的Android端口,称为iTextG。iTextG与iText(相同的代码库)相同,除了使用AWT的所有内容和其他Android上不可用的东西。

您可以在iText网站上找到iTextG:http//developers.itextpdf.com/itextg-android

您可以使用Gradle,也可以从Github上的发行页面下载jar:https//github.com/itext/itextpdf/releases/latest(使用itextg zip)。截至2016年10月,最新版本为5.5.10。

请不要从SourceForge下载!SourceForge已过时,iText Software不再使用它。这是因为SourceForge不再是可信赖的。发生SourceForge将间谍软件注入其他软件的安装程序的事件。尽管iText尚未发生这种情况(并且由于我们的软件的性质而不太可能发生),但我们无法宽恕这些操作,并告诉所有用户和客户避免SourceForge。

  • 改用`com.itextpdf:itextg:5.5.10`。 (2认同)