0

我正在使用这样的代码从 pdf 文件中删除某些页面。

PdfReader reader = new PdfReader(src);
reader.selectPages("1,2");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.close();

我的问题是每次我运行它(相同的输入文件,相同的页面),输出文件都有不同的哈希(使用 md = MessageDigest.getInstance("SHA1"))

我需要这样的东西

inputFile.pdf (hash_A)
selectPages("1,2")
outputFile.pdf (hash_B)

inputFile.pdf (hash_A)
selectPages("1,2")
outputFile.pdf (hash_B)

但我明白了

inputFile.pdf (hash_A)
selectPages("1,2")
outputFile.pdf (hash_B)

inputFile.pdf (hash_A)
selectPages("1,2")
outputFile.pdf (hash_C)

inputFile.pdf (hash_A)
selectPages("1,2")
outputFile.pdf (hash_D)

代码

public String quitarPagBlancasPDF(String origen, String destino, int blankPdfsize) {
        try {

            com.itextpdf.text.pdf.PdfReader r = new com.itextpdf.text.pdf.PdfReader(origen);
            String paginas = "";
            boolean editado = false;

            for (int i = 1; i <= r.getNumberOfPages(); i++) {
                byte bContent[] = r.getPageContent(i);
                if (bContent.length > blankPdfsize) {
                    paginas += String.valueOf(i) + ",";
                } else {
                    editado = true;
                }

            }

            if (editado) {
                r.selectPages(paginas);
                PdfStamper stamper = new PdfStamper(r, new FileOutputStream(destino));
                stamper.setFullCompression();

                stamper.close();
                stamper = null;
                r = null;
            } else {
                r = null;

                return "Sin Cambios";
            }
        } catch (Exception e) {
            return e.getMessage();
        }
        return "OK";
    }
4

1 回答 1

0

Finalmente decidí armar un hash con el contenido de cada página del PDF para ver si dos pdf's son iguales

 public static String getPdfSha(String origen, String metodo) {
        try {

            com.itextpdf.text.pdf.PdfReader r = new com.itextpdf.text.pdf.PdfReader(origen);
            String Sha = "";

            for (int i = 1; i <= r.getNumberOfPages(); i++) {
                byte bContent[] = r.getPageContent(i);
                Sha = Sha + Arrays.toString(bContent);
            }
            Sha = encriptar(Sha, metodo);
            return Sha;

        } catch (Exception e) {
            return "";
        }
    }

公共静态字符串加密(字符串文本,字符串算法){

String sha;
try {
    java.security.MessageDigest md = java.security.MessageDigest.getInstance(algoritmo);
    byte[] hash = md.digest(texto.getBytes());
    java.util.Formatter formatter = new java.util.Formatter();
    for (byte b : hash) {
        formatter.format("%02x", b);
    }
    sha = formatter.toString();
    formatter = null;
    hash = null;
    md = null;

} catch (java.security.NoSuchAlgorithmException e) {
    return "";

}
return sha;

}

于 2016-12-16T14:35:48.013 回答