iText를 사용하여 PDF 문서의 페이지에 아무 것도없는 검은 색 & 흰색 객체 (페이지가 흑백 또는 컬러)가 포함되어 있는지 알아 내려고 if if (또는 다른 java 라이브러리 인 경우 if 당신은 무엇이든을 안다). 내 PDF 파일에 이미지가 없어야하므로 걱정할 필요가 없습니다.iText 페이지 색상 또는 검정색/흰색
아이디어가 있으십니까?
이미지로 변환하고 모든 픽셀의 색상을 읽는 것 외에 다른 방법이 있기를 바랍니다.
iText를 사용하여 PDF 문서의 페이지에 아무 것도없는 검은 색 & 흰색 객체 (페이지가 흑백 또는 컬러)가 포함되어 있는지 알아 내려고 if if (또는 다른 java 라이브러리 인 경우 if 당신은 무엇이든을 안다). 내 PDF 파일에 이미지가 없어야하므로 걱정할 필요가 없습니다.iText 페이지 색상 또는 검정색/흰색
아이디어가 있으십니까?
이미지로 변환하고 모든 픽셀의 색상을 읽는 것 외에 다른 방법이 있기를 바랍니다.
하나의 가능한 솔루션은 페이지 스트림을 얻고 색상 설정 연산자에 대한 정규식 검색을 수행하는 것입니다.
byte[] contentStream = pdfRdr.getPageContent(pageNo);
거의 모든 PDF 페이지 콘텐츠는 텍스트 또는 그래픽 개체입니다. 색상은 네 개의 부동 소수점 값을 후까지 지정된 연산자를 사용하여 설정됩니다
f1 .. fn SC % you need to know more about the colour space to determine whether this is black or not
fq .. fn sc
f1 f2 f3 RG % 0 0 0 would be black 1 1 1 would be white
f1 f2 f3 rg
f1 f2 f3 f4 K % CMYK (0 0 0 1 = Black, 0 0 0 0 = White, I think)
f1 f2 f3 f4 k
f1 g % the g operator choose the greyscale colour space
g1 G
나는 이것이 바로 얻을 까다로운 일이 될 수 상상할 수있다. 좀 더 실용적인 해결책은 페이지를 이미지로 변환하고 (Google이 할 수있는 여러 도구 중 하나를 사용하여) 이미지를 검사하는 것입니다.
Apache PDFBox의 가능한 해결책은 이미지를 만들고 픽셀 RGB를 확인하는 것입니다. 그러나 PDF가 순수한 경우에도 렌더링 된 이미지에 회색 음영이 포함될 수 있으므로주의하십시오.
import java.awt.image.BufferedImage;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
...
public void checkColor(final File pdffile) {
PDDocument document = PDDocument.load(pdffile);
List<PDPage> pages = document.getDocumentCatalog().getAllPages();
for (int i = 0; i < pages.size(); i++) {
PDPage page = pages.get(i);
BufferedImage image = page.convertToImage(BufferedImage.TYPE_INT_RGB, 72);
for (int h = 0; h < image.getHeight(); h++) {
for (int w = 0; w < image.getWidth(); w++) {
int pixel = image.getRGB(w, h);
boolean color = isColorPixel(pixel);
// ... do something
}
}
}
}
private boolean isColorPixel(final int pixel) {
int alpha = (pixel >> 24) & 0xff;
int red = (pixel >> 16) & 0xff;
int green = (pixel >> 8) & 0xff;
int blue = (pixel) & 0xff;
// gray: R = G = B
return !(red == green && green == blue);
}
나는 당신을 도울 수있는 lib 디렉토리를 모르지만, itext는 도움이 될 것이라고 말할 수 있습니다. 왜냐하면 itext를 사용하여 pdf를 읽을 때 모든 서식이 제거되기 때문입니다. – user979490