由java.lang.NoSuchMethodException <init>引起[类com.itextpdf.text.Image]

时间:2019-02-16 04:10:24

标签: java android pdf itext drawable

Caused by java.lang.NoSuchMethodException: <init> [class com.itextpdf.text.Image]
       at java.lang.Class.getConstructor0(Class.java:2320)
       at java.lang.Class.getDeclaredConstructor(Class.java:2166)
       at com.itextpdf.text.Image.getInstance(Unknown Source:16)
       at com.itextpdf.text.pdf.PdfPCell.(Unknown Source:124)
       at com.itextpdf.text.pdf.PdfPTable.addCell(Unknown Source:17)
       at com.itextpdf.text.pdf.ColumnText.addElement(Unknown Source:109)
       at com.itextpdf.text.pdf.PdfPCell.addElement(Unknown Source:63)
       at com.clystnet.wcr.wcrinternal.activitys.RaamsFormViewActivity$creatingPdf.doInBackground(Unknown Source:590)
       at com.clystnet.wcr.wcrinternal.activitys.RaamsFormViewActivity$creatingPdf.doInBackground(Unknown Source:2)
       at android.os.AsyncTask$2.call(AsyncTask.java:333)
       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
Caused by com.itextpdf.text.ExceptionConverter: <init> [class com.itextpdf.text.Image]

当我在crashlytics中设置图片时,应用在发布版本中崩溃,它也未在任何行上显示错误。请帮助我。

    implementation 'com.itextpdf:itextpdf:5.5.13'

我的代码,用于从可绘制图像添加图像。

 Drawable d = getResources().getDrawable(R.drawable.wcr_logo);
                BitmapDrawable bitDw = ((BitmapDrawable) d);
                Bitmap bmp = bitDw.getBitmap();
                Image logo = null;
                if (bmp != null) {
                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
                    bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
                    if (stream != null) {
                        if (stream.size() > 0) {
                            Log.d("zcusfs","reached here2");
                            logo = Image.getInstance(stream.toByteArray(),true);
                            Log.d("zcusfs","reached here2c");
                            logo.scaleAbsolute(40, 40);
                            logo.setBorder(Image.NO_BORDER);
                        }
                    }
                }

                //Image logo = Image.getInstance(HeaderFooterPageEvent.class.getResource("/ic_launcher.png"));
                PdfPCell img = new PdfPCell();
                img.addElement(logo);
                img.setBorder(Rectangle.NO_BORDER);

2 个答案:

答案 0 :(得分:1)

在ProGuard文件中添加以下文本

# proguard configuration for iText

-keep class org.spongycastle.** { *; }
-dontwarn org.spongycastle.**

-keep class com.itextpdf.** { *; }

-keep class javax.xml.crypto.dsig.** { *; }
-dontwarn javax.xml.crypto.dsig.**

-keep class org.apache.jcp.xml.dsig.internal.dom.** { *; }
-dontwarn org.apache.jcp.xml.dsig.internal.dom.**

-keep class javax.xml.crypto.dom.** { *; }
-dontwarn javax.xml.crypto.dom.**

-keep class org.apache.xml.security.utils.** { *; }
-dontwarn org.apache.xml.security.utils.**

-keep class javax.xml.crypto.XMLStructure
-dontwarn javax.xml.crypto.XMLStructure

答案 1 :(得分:-2)

在我的情况下,这是由于我用“ minifyEnabled true”启用了Progaurd。只需将其更改为“ minifyEnabled false”并删除“ shrinkResources true”即可。

在build.gradle(应用级别)

buildTypes {
        release {
            minifyEnabled false
            debuggable false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }