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
}
이미지 (내 예에서와 같이) 페이지 자원을 던졌다 확인. 하지만 그 부분 만이 콘텐츠 스트림에서 이미지를 제거해야합니다. 즉 이미지가 호출 된 위치에서 제거해야합니다. 찾은 이름으로 특정 이미지를 제거하려면 RemoveAllText 예제를 수정해야합니다. 몇 가지 코드를 시도해 볼 수 있습니다. "이미지"가 실제로 이미지이고 일부 벡터 그래픽이 아닌 것은 확실합니까? 그리고 그것은 자원의 첫 번째 단계에 있으며, 깊은 곳에서 발견 된 것이 아닙니까? PDF를 공유 할 수 있습니까? –
contentStream.drawImage를 사용하여이 이미지를 생성하므로 이미지라고 확신합니다. 그래서, 거기에 어떤 아이디어, contentStream에서 제거하는 방법 ?? –
"TJ"대신 "Do"를 검색하면됩니다. 당신이 그것을 명중 할 때, 이름 ("Do"의 앞에 토큰)가 당신이 제거하고 싶은 심상의 것다는 것을 검사하십시오. RemoveAllText 예제는 소스 코드 다운로드에 있습니다. –