如何在Android中将位图图像添加到PDF?

时间:2017-09-07 12:50:50

标签: android pdf bitmap

我正在构建一个Android应用,可让用户将其数字签名添加到PDF文件中。到目前为止,我所做的是用户可以通过此功能浏览并选择PDF文件进行查看:

private void showFileChooser() {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("application/pdf");
        intent.addCategory(Intent.CATEGORY_OPENABLE);

        try {
            startActivityForResult(
                    Intent.createChooser(intent, "Select a File to Upload"),
                    FILE_SELECT_CODE);
        } catch (android.content.ActivityNotFoundException ex) {
            // Potentially direct the user to the Market with a Dialog
            Toast.makeText(this, "Please install a File Manager.",
                    Toast.LENGTH_SHORT).show();
        }
    }

onActivityResult方法中,我将所选文件URI抛出到PDF查看器以查看它。然后,用户可以通过自定义视图添加其签名,并将签名作为位图并将其作为图像保存到本地设备存储。

我想要的是将此图像添加到当前查看的PDF文件中作为其一部分并再次使用图像保存PDF文件。

有没有人知道如何将签名位图图像添加到PDF文件并保存?

1 个答案:

答案 0 :(得分:1)

根据您的应用所使用的国家/地区,我建议您对“数字签名”一词保持谨慎。

添加某人签名的图像并不是一种非常安全的策略。使用Adobe,提取图像非常容易。这意味着我可以通过简单地重新插入图像来“伪造”我签名文件的签名。

在更复杂的方法中,签名是通过向文件添加额外信息来实现的,如下所示(简化):

  • Bob想签署一份pdf文件
  • Bob计算PDF的哈希值(例如使用SHA256)
  • Bob使用他的私钥加密此哈希值
  • Bob将加密的哈希值添加到文档中(包括他的公钥,常规哈希值,所涉及算法的名称和时间戳)

现在假设Alice想要验证Bob是否签名

  • Alice知道Bob用于散列文档的算法
  • Alice使用Bob的公钥
  • 解密加密的哈希(我们称之为签名哈希)
  • 解密的哈希值应该等于文档的常规哈希值
  • 使用证书颁发机构,Alice知道正在使用的公钥确实属于Bob

为什么这样做?

  • 完整性:如果有人更改了文档中的任何内容,则哈希值会发生变化。 Bob的签名哈希将不再匹配文档的哈希值。因此,只要文档未更改,Bob的签名才有效
  • 不可否认:只有Bob应该拥有Bob的私钥。只有Bob可以签署哈希值。鲍勃不能否认签署文件。
  • 身份验证:Alice知道(因为CA)确实是Bob签署了文档。

这是一本很酷的电子书 http://pages.itextpdf.com/ebook-digital-signatures-for-pdf.html