2017-12-11 6 views
0

메타 데이터에 따라 PDF 파일에서 특정 이미지를 제거해야합니다. 슬프게도. 인터넷에서 찾을 수있는 모든 예제는 폐기 된 메서드를 사용하고 있습니다. 그것은 동일한 방식으로 작동PDFBox에서 PDF에서 특정 이미지를 제거하는 방법

try (PDDocument doc = PDDocument.load(new ByteArrayInputStream(pdf))) { 
doc.getPages().forEach(page -> 
{ 
    PDResources resources = page.getResources(); 
    List<COSName> itemsToRemove = new ArrayList<>(); 

    resources.getXObjectNames().forEach(propertyName -> { 
     if(!resources.isImageXObject(propertyName)) { 
      return; 
     } 
     PDXObject pdxObject = resources.getXObject(propertyName); 
     PDImageXObject pdImageXObject = (PDImageXObject)pdxObject; 
     PDMetadata metadata = pdImageXObject.getMetadata(); 
     if(checkMetadata(metadata)){ 
      // What should I use here? 
      page.getCOSObject().removeItem(propertyName); 
     } 
    }); 
    // Should I use page.setResources(resources); ? 
}); 
doc.save(baos); 
} catch (Exception e) { 
//Code here 

}

+0

이미지 (내 예에서와 같이) 페이지 자원을 던졌다 확인. 하지만 그 부분 만이 콘텐츠 스트림에서 이미지를 제거해야합니다. 즉 이미지가 호출 된 위치에서 제거해야합니다. 찾은 이름으로 특정 이미지를 제거하려면 RemoveAllText 예제를 수정해야합니다. 몇 가지 코드를 시도해 볼 수 있습니다. "이미지"가 실제로 이미지이고 일부 벡터 그래픽이 아닌 것은 확실합니까? 그리고 그것은 자원의 첫 번째 단계에 있으며, 깊은 곳에서 발견 된 것이 아닙니까? PDF를 공유 할 수 있습니까? –

+0

contentStream.drawImage를 사용하여이 이미지를 생성하므로 이미지라고 확신합니다. 그래서, 거기에 어떤 아이디어, contentStream에서 제거하는 방법 ?? –

+0

"TJ"대신 "Do"를 검색하면됩니다. 당신이 그것을 명중 할 때, 이름 ("Do"의 앞에 토큰)가 당신이 제거하고 싶은 심상의 것다는 것을 검사하십시오. RemoveAllText 예제는 소스 코드 다운로드에 있습니다. –

답변

1

그냥 다른 태그로, 예를 RemoveAllText.java에서와 같이 :

나는 그것을이 같은 물품.

"Tj"대신 "Do"를 사용하면이 코드의 코드를 사용할 수 있습니다. 물론

, 당신은 등, 메타 데이터를로드해야하는 경우가 열거해야하며, 당신은 자원을 사전에 XObject에 사전에서 제거 할 수 있습니다

관련 문제