Android SpongyCastle和iText错误

Android SpongyCastle和iText错误,android,itext,spongycastle,Android,Itext,Spongycastle,我正在尝试将SpongyCastle和iText添加到我的android项目中,用于签署pdf文件。我使用了几种类型的iText(itextg和itextpdf)和SpongyCastle(sc-light-jdk15on-1.47.0.2、scpkix-jdk15on-1.47.0.2、scprov-jdk15on-1.47.0.2) 02-27 13:07:43.767: E/dalvikvm(28783): Could not find class 'org.bouncycastle.ce

我正在尝试将SpongyCastle和iText添加到我的android项目中,用于签署pdf文件。我使用了几种类型的iText(itextg和itextpdf)和SpongyCastle(sc-light-jdk15on-1.47.0.2、scpkix-jdk15on-1.47.0.2、scprov-jdk15on-1.47.0.2)

02-27 13:07:43.767: E/dalvikvm(28783): Could not find class 'org.bouncycastle.cert.X509CertificateHolder', referenced from method com.itextpdf.text.pdf.PdfReader.readDecryptedDocObj
02-27 13:07:45.607: E/dalvikvm(28783): Could not find class 'com.itextpdf.awt.PdfGraphics2D', referenced from method com.itextpdf.text.pdf.PdfContentByte.createGraphics
02-27 13:07:45.717: E/dalvikvm(28783): Could not find class 'com.itextpdf.awt.PdfGraphics2D', referenced from method com.itextpdf.text.pdf.PdfContentByte.createGraphicsShapes
02-27 13:07:45.897: D/dalvikvm(28783): VFY: dead code 0x0002-000a in Lcom/itextpdf/text/pdf/PdfContentByte;.createPrinterGraphicsShapes (FFLjava/awt/print/PrinterJob;)Ljava/awt/Graphics2D;
代码如下:

import android.os.Environment;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfSignatureAppearance;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.security.BouncyCastleDigest;
import com.itextpdf.text.pdf.security.DigestAlgorithms;
import com.itextpdf.text.pdf.security.ExternalDigest;
import com.itextpdf.text.pdf.security.ExternalSignature;
import com.itextpdf.text.pdf.security.MakeSignature;
import com.itextpdf.text.pdf.security.MakeSignature.CryptoStandard;
import com.itextpdf.text.pdf.security.PrivateKeySignature;

import java.io.File  
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Security;
import java.security.cert.Certificate;
import org.spongycastle.jce.provider.BouncyCastleProvider;
public class signP {

public void sign(String src, String dest,
Certificate[] chain, PrivateKey pk, String digestAlgorithm, String provider,
CryptoStandard subfilter, String reason, String location)
throws GeneralSecurityException, IOException, DocumentException {
// Creating the reader and the stamper
PdfReader reader = new PdfReader(src);
FileOutputStream os = new FileOutputStream(dest);
PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
// Creating the appearance
PdfSignatureAppearance appearance = stamper.getSignatureAppearance();
appearance.setReason(reason);
appearance.setLocation(location);
appearance.setVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig");
// Creating the signature
ExternalDigest digest = new BouncyCastleDigest();
ExternalSignature signature =
new PrivateKeySignature(pk, digestAlgorithm, provider);
MakeSignature.signDetached(appearance, digest, signature, chain,
null, null, null, 0, subfilter);
}


public static final String SRC = Environment.getExternalStorageDirectory()+          File.separator +"test.pdf";
public static final String DEST = Environment.getExternalStorageDirectory()+           File.separator +"test_sign2.pdf";
public static void signat()
throws IOException, GeneralSecurityException {
//Properties properties = new Properties();
/properties.load(new FileInputStream("C:/Ressource/key.properties"));
String path = Environment.getExternalStorageDirectory()+ File.separator   +"Nacer_Heithem.p12";
char[] pass = "123456".toCharArray();
BouncyCastleProvider provider = new BouncyCastleProvider();
Security.addProvider(provider);
KeyStore ks = KeyStore.getInstance("pkcs12", provider.getName());
ks.load(new FileInputStream(path), pass);
String alias = (String)ks.aliases().nextElement();
PrivateKey pk = (PrivateKey) ks.getKey(alias, pass);
Certificate[] chain = ks.getCertificateChain(alias);
signP app = new signP();
try {
app.sign(SRC, DEST, chain, pk, DigestAlgorithms.SHA256, provider.getName(),
CryptoStandard.CMS, "Test", "Ghent");
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Any idea and thanks...

您没有使用iTextG,否则您会看到PdfContentByte中的createGraphicsShapes()方法在iTextG中不存在。尝试iTextG。谢谢,在清理、构建和使用iTextG-5.4.4之后,我解决了我的问题