package com.test.util;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.util.Matrix;
import java.io.IOException;
import java.util.List;
import org.apache.pdfbox.contentstream.PDFStreamEngine;
import org.apache.pdfbox.contentstream.operator.MissingOperandException;
import org.apache.pdfbox.contentstream.operator.Operator;
import org.apache.pdfbox.contentstream.operator.OperatorProcessor;
public class PdfImageCounter extends PDFStreamEngine {
protected int documentImageCount = 0;
public int getDocumentImageCount() {
return documentImageCount;
}
public PdfImageCounter() {
addOperator(new OperatorProcessor() {
@Override
public void process(Operator operator, List<COSBase> arguments) throws IOException {
if (arguments.size() < 1) {
throw new MissingOperandException(operator, arguments);
}
if (isImage(arguments.get(0))) {
documentImageCount++;
}
}
protected Boolean isImage(COSBase base) throws IOException {
if(!(base instanceof COSName)) {
return false;
}
boolean isImg = context.getResources().isImageXObject((COSName)base);
if(isImg) {
Matrix ctmNew = getGraphicsState().getCurrentTransformationMatrix();
//
if(ctmNew.getTranslateX() == 0.0 && ctmNew.getTranslateY() == 0.0) {
return true;
}
}
return false;
}
@Override
public String getName() {
return "Do";
}
});
}
}
package com.test.util;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import java.io.File;
public class PdfUtil {
/**
* 判断PDF文件是否为影印件
*
* @param path
* @return boolean
*/
public static boolean isPhotocopy(String path) {
try {
int pageNum = 0;
int imageCount = 0;
PDDocument document = PDDocument.load(new File(path));
PdfImageCounter counter = new PdfImageCounter();
for (PDPage pdPage : document.getPages()) {
pageNum++;
counter.processPage(pdPage);
}
imageCount = counter.getDocumentImageCount();
document.close();
return pageNum == imageCount;
} catch (Exception e) {
return false;
}
}
}
public class PdfUtilTest {
public static void main(String[] args) throws Exception {
PdfUtilTest test = new PdfUtilTest();
test.isPhotocopy();
}
public void isPhotocopy() throws Exception {
String filePath = "D:\\opt\\python.pdf";
boolean a = PdfUtil.isPhotocopy(filePath);
System.out.println(a);
}
}