2016-12-05 23 views
0

pdf 파일에서 특정 페이지를 제거하려면이 코드로 작업하고 있습니다.IText로 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"; 
    } 
+0

Pdfs에는 문서가 마지막으로 변경된 날짜와 시간 및 고유 ID에 대한 정보가 들어 있습니다. 두 가지 요인 모두 항상 다른 해시 값을 갖게됩니다. – mkl

답변

0

Finalmente는 armar은 유엔 해시 콘을 decidí 엘 contenido 드 cada PAGINA 델 PDF 파라 PDF의 아들

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 ""; 
     } 
    } 

공공 정적 문자열 encriptar (문자열 texto, 문자열 algoritmo) {

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; 
을 iguales 버전시 도스

}

+0

** ** 영어로주세요. ** B ** 해시는 이제 즉각적인 페이지 콘텐츠 지침 만 고려합니다. 그것은 당신의 업무에 정말로 충분합니까? 그것보다 pdf에 훨씬 더 많은 것이 있습니다. – mkl