为什么我得到一个"找不到PdfGraphics2D"错误?

时间:2013-06-14 06:39:37

标签: android pdf pdf-generation itext

我遇到了运行时异常。我想从android设备创建一个PDF文档。 为此,我使用了iText库。

这是我创建PDF的代码

Document document = new Document();
PdfWriter.getInstance(document, outStream);

document.open();
document.add(new Paragraph(data));

document.close();

代码工作正常。它正在成功创建PDF。但它让我在运行时说例外

06-14 10:09:20.491: W/dalvikvm(764): Unable to resolve superclass of Lcom/itextpdf/awt/PdfGraphics2D; (1251)
06-14 10:09:20.491: W/dalvikvm(764): Link of class 'Lcom/itextpdf/awt/PdfGraphics2D;' failed
06-14 10:09:20.491: E/dalvikvm(764): Could not find class 'com.itextpdf.awt.PdfGraphics2D', referenced from method com.itextpdf.text.pdf.PdfContentByte.createGraphics
06-14 10:09:20.491: W/dalvikvm(764): VFY: unable to resolve new-instance 480 (Lcom/itextpdf/awt/PdfGraphics2D;) in Lcom/itextpdf/text/pdf/PdfContentByte;
06-14 10:09:25.280: E/dalvikvm(764): Could not find class 'org.bouncycastle.cert.X509CertificateHolder', referenced from method com.itextpdf.text.pdf.PdfReader.readDecryptedDocObj
06-14 10:09:25.280: W/dalvikvm(764): VFY: unable to resolve new-instance 1612 (Lorg/bouncycastle/cert/X509CertificateHolder;) in Lcom/itextpdf/text/pdf/PdfReader;

我已经完成了清理并构建,将jar添加到libs文件夹并在订单和导出时选择它,并且我在过去2天完成了大量研究。但没有任何帮助我。 根据我的知识,应该有这些可能性。

  • 外部jar无法正确加载
  • 类PdfGraphics2D扩展java.awt.Graphics2D,这在android中不可用

任何帮助都会很明显。

2 个答案:

答案 0 :(得分:8)

您发现PdfGraphics2D扩展了java.awt.Graphics2D,而您已经知道Graphics2D是Android上的禁用课程。

您还遇到了与BouncyCastle相关的问题。

这告诉我你正在使用Java版的iText而不是Android port。在Android port中,我们用SpongyCastle替换了BouncyCastle(在Android上使用加密时推荐),我们删除了对禁用类的所有引用(例如在awtnio包中)。 / p>

请切换到使用iText的Android port

答案 1 :(得分:1)

如果你在android中使用 iText pdf库,那么只需在你的Proguard文件中写下这三行以避免警告,

-dontwarn com.itextpdf.text.pdf.**
-dontwarn org.bouncycastle.**
-dontwarn com.sun.mail.**