Узнайте, является ли страница черно-белой или цветной в PDF с использованием Java - PullRequest
1 голос
/ 06 марта 2012

В связи с этим: Как узнать, цветные ли страницы PDF или черно-белые?

Мне нужно знать, является ли текущая страница цветной или черно-белой с использованием Java.

Я пытался использовать PDFBox, делая следующее:

public void checkColor(final File pdfFile) {
    PDDocument document;
    try {
        document = PDDocument.load(pdfFile);

        List<PDPage> pages = document.getDocumentCatalog().getAllPages();
        for (int i = 0; i < pages.size(); i++) {
            System.out.println();
            PDPage page = pages.get(i);
            //BufferedImage image = page.convertToImage();
            BufferedImage image = page.convertToImage(BufferedImage.TYPE_INT_RGB, 72);

            parseColor(image, i);
        }

        printPages();

    } catch (IOException ex) {
        Logger.getLogger(PdfBoxParser.class.getName()).log(Level.SEVERE, null, ex);
    }
}
public static boolean isColorPixel(final int pixel) {
    //took from some post from stackoverflow
    System.out.print(pixel);
    System.out.print(",");
    int alpha = (pixel >> 24) & 0xff;
    int red = (pixel >> 16) & 0xff;
    int green = (pixel >> 8) & 0xff;
    int blue = (pixel) & 0xff;
    // gray: R = G = B
    boolean gray = (red == green && green == blue);
    return gray;
}

protected void parseColor(BufferedImage pImage, int pPageNumber) {
    int thresholdColor = Main.COLOR_THRESHOLD_PER_PAGE;
    for (int h = 0; h < pImage.getHeight(); h++) {
        for (int w = 0; w < pImage.getWidth(); w++) {
            int pixel = pImage.getRGB(w,h);
            boolean color = Main.isColorPixel(pixel);
            if (color) {
                thresholdColor--;
                if (thresholdColor == 0) {
                //do something like store this page number...
                .
                .
                .

Проблема в том, что я пробовал различные PDF-файлы (электронные книги, одностраничные PDF-файлы и т. Д.), И каждый «конечный пиксель int» возвращает «-1» вместе с кучей предупреждений (org.apache.pdfbox.util.PDFStreamEngine processOperator неподдерживаемая / отключенная операция: i / EMC / BMC / ri). Можно ли это решить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...