2017-04-05 8 views
0

필자는 응용 프로그램에서 pdfbox 라이브러리를 사용하여 다양한 인접한 반원을 그려 구름을 그릴 수있는 기능을 구현했습니다. 이러한 구름의 위치에 관한 정보가 필요합니다. 사용자의 클릭 위치가 클라우드에 해당하는지 여부를 감지합니다. 이후 pdfbox 라이브러리는 이러한 구름의 위치와 관련된 정보를 제공하지 않고 PDF의 메타 데이터 필드에 위치를 저장합니다. 다음 코드 (클라우드가 그려지는 동안). 새로운 위치 데이터가 저장 될 때내 응용 프로그램에서만 편집 할 수있는 메타 데이터를 pdf에 저장하려면 어떻게해야합니까?

PDDocumentCatalog catalog = doc.getDocumentCatalog(); 
PDMetadata pdMetaData = catalog.getMetadata(); 
// Code to append new metadata to previous stored meta data. 
java.io.InputStream newData = new java.io.ByteArrayInputStream(Encoding.UTF8.GetBytes(newMetaData)); 
PDMetadata newPDMetadata = new PDMetadata(doc, newData, false); 
catalog.setMetadata(newPDMetadata); 

내가 메타 field.And에서 XML과 같은 위치 데이터를 저장, I는 이전의 메타 데이터를 추출하여 새로운 클라우드 따로 장소에 대응하는 새로운 XML 태그를 추가 다시 PDF의 메타 데이터 필드에 xml을 저장합니다. 그러나이 접근법의 문제점은 메타 데이터 필드에 일부 데이터를 저장할 수있는 다른 PDF 편집기를 사용하는 경우 pdf의 메타 데이터 필드를 덮어 쓰게된다는 것입니다. 메타 데이터를 pdf에 키 값 쌍으로 저장하는 방법이 있습니까? 그렇다면 웹 사이트에 쿠키를 저장하는 것처럼 키를 알고있는 사람 만 편집 할 수 있습니다. 메타 데이터를 나타내는 XML의 형식이 프레임 워크의 일부가 확장 메타 데이터 플랫폼 (XMP)라고 정의하고 설명 * PDF 파일 사양에 따라

int pageNum = 0; 
PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get(pageNum); 
COSName markupMetadataElement = COSName.getPDFName(Key); 
COSDictionary dictionary = page.getCOSDictionary(); 
COSString newCosString = new COSString(newMetaData); 
dictionary.setItem(markupMetadataElement, newCosString); 
+0

: 여기 – mkl

+0

그런데 거의 모든 곳에서 새로운 항목을 추가 할 수 있으며 PDF 사양의 부록 E에 따라 등록한 접두어가있는 키를 사용하면 해당 항목이 다른 사람의 PDF 사용과 충돌해서는 안됩니다. – mkl

+0

내 생각은 mkl의 2 번째 댓글과 비슷합니다. 예를 들어 다음과 같이하십시오 :'page.getCOSObject(). setItem (COSName.get ("yourname"), yourstuff); ' –

답변

0

내 문제를 해결하는 코드입니다 Adobe 문서 XMP : Extensible Metadata Platform * 메타 데이터를 만들고 추가 할 때 해당 사양을 존중합니까?