2014-11-04 2 views
1

어제 불투명 한 질문에 대해 사과드립니다. 문자열이 pdf.I 문자열이되도록 사용자 지정 속성에 2 문자열 (string1 및 string2) 저장하려는 문자열을 이미 있지만 사용자 지정 속성 영역에서 저장하는 방법을 모르겠습니다. 사용자 정의 속성 영역은 FILE ---> Properties ----> Custom ----> "Name"과 "Value"가 쌍으로있는 사용자 정의 속성을 참조합니다. "Value"에 string1 저장소를, "Name"에 string2 저장소를 넣고 싶습니다.사용자 정의 속성을 사용하여 PDF에서 정보를 추가/삭제/검색합니다.

나중에 사용자 지정 속성 영역에서 문자열을 검색/삭제하고 싶습니다. itext로 어떻게 달성 할 수 있습니까?

감사와 안부,

브라이언

답변

2

는 명확히 주셔서 감사합니다. Acrobat을 사용하여 원하는 데이터를 추가하는 방법에 대한 설명을 기반으로 이제 메타 데이터를 참조하고 있음을 알게되었습니다.

필자는 Acrobat을 사용하여 "Test"값이 "Test"인 사용자 지정 메타 데이터 항목을 추가했으며이 파일을 보면이 키/값 쌍이 두 곳에서 나타남을 볼 수 있습니다 빨간 점) :

enter image description here

  1. 그것은 메타 데이터를 저장하는 전통 장소입니다 정보 사전에 존재한다.
  2. XMP 메타 데이터 스트림에 접두어가 pdfx 인 태그 (사용자 정의 태그 용)로 제공됩니다.

iText를 사용할 때 Info 사전에 추가 값을 쉽게 추가 할 수 있습니다. XMP 메타 데이터를 업데이트하는 것도 가능하지만 직접 XMP 스트림을 만들어야합니다. 어쩌면 PDF에 정보 사전 만 있고 XMP가 없을 수도 있습니다.

또한 그 키를 갖는 목적은 값을 검색하고 나중에 사용자 지정 항목을 삭제하는 것입니다. 이 경우 정보 사전에 추가 항목을 추가하는 것으로 충분합니다. 처음부터 또는 다음 예제 중 하나가 필요합니다 기존의 PDF로 생성 된 PDF로 정보 사전에 사용자 정의 항목을 추가 할 것인지 여부에 따라

: CustomMetaEntry에서

, 우리는 표준 메타 데이터 항목을 추가 제목 및 사용자 정의라는 항목 시험 :

public void createPdf(String dest) throws IOException, DocumentException { 
    Document document = new Document(); 
    PdfWriter.getInstance(document, new FileOutputStream(dest)); 
    document.addTitle("Some example"); 
    document.add(new Header("Test", "test")); 
    document.open(); 
    Paragraph p = new Paragraph("Hello World"); 
    document.add(p); 
    document.close(); 
} 

당신이 볼 수 있듯이,이 iText는 제목, 저자, ... 메타 데이터를 추가 할 수 addX() 방법을했다. 그러나 사용자 정의 항목을 추가하려면 add() 메소드를 사용하여 Header 인스턴스를 추가해야합니다. 문서를 열려고 메타 데이터를 추가해야합니다. 기존 PDF의 정보를 사전에 항목을 추가하려면

, 당신은 예를 MetadataPdf를 들어, 내 book에서 예를 수행 할 수 있습니다

public void manipulatePdf(String src, String dest) throws IOException, DocumentException { 
    PdfReader reader = new PdfReader(src); 
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); 
    Map<String, String> info = reader.getInfo(); 
    info.put("Title", "Hello World stamped"); 
    info.put("Subject", "Hello World with changed metadata"); 
    info.put("Keywords", "iText in Action, PdfStamper"); 
    info.put("Creator", "Silly standalone example"); 
    info.put("Author", "Also Bruno Lowagie"); 
    stamper.setMoreInfo(info); 
    stamper.close(); 
    reader.close(); 
} 

이 예제에서, 우리는에서 정보 사전을 가져 getInfo() 메서드를 사용하여 PdfReader 인스턴스를 만듭니다.

이 또한 PDF에서 사용자 지정 데이터를 검색하는 방법에 대한 답변입니다. MapTest와 항목이 포함되어있는 경우는 다음과 같이 그 값을 얻을 수 있습니다 : 당신은 지금이 MapString의의 여분 쌍을 추가 할 수 있습니다

String test = info.get("Test"); 

. 이 예에서는 메타 데이터에 표준 키를 추가하지만 사용자 지정 키를 사용할 수도 있습니다.

기존 PDF 파일에서 항목을 제거하는 것은 항목을 추가하는 것과 같은 방법으로 수행됩니다. null 값을 추가하는 것으로 충분합니다. 예를 들어 :

info.put("Test", null); 

이것은 값이 경우 Test라는 이름의 사용자 정의 항목을 귀하의 정보를 사전에 존재 제거합니다.

+0

문자열 쌍을 다시 검색하도록 코드를 요청할 수 있습니다. 이름 (테스트) 및 값 (테스트)을 사용자 지정 속성에 저장한다고 가정하고 이름이 테스트인지, 값을 다시 얻는 방법을 알고 있습니까? 감사합니다 – brian

+0

또 다른 한가지는 사용자 지정 속성 (테스트, 테스트)을 추가하기 전에 pdf를 해시 할 때 문자열 a를 얻습니다. – brian

+0

그러나 info.put ("Test", null) 메서드를 사용하여 사용자 정의 속성을 삭제할 때. 사용자 정의 속성을 삭제 한 후 pdf를 다시 해시하고 다른 문자열을 가져옵니다. b. 이 두 문자열은 동일하지 않습니다. 어떻게하면 같은 해시 결과를 얻을 수 있습니까? MD5를 사용하는 해시 알고리즘 – brian

관련 문제