如何在java中检查pdf文件是否包含扫描页面或未使用itext库

如何在java中检查pdf文件是否包含扫描页面或未使用itext库,java,itext,itextpdf,Java,Itext,Itextpdf,我正在使用itext library合并多个pdf,我可以合并多个pdf,但如果pdf包含扫描页面,则我不想将其添加到合并的pdf中,是否可以使用itext检查扫描页面 我使用以下代码合并pdf Document PDFJoinInJava = new Document(); PdfCopy PDFCombiner = new PdfCopy(PDFJoinInJava, outputStream); PdfCopy.PageStamp stamp; PDFJoinInJava.open();

我正在使用itext library合并多个pdf,我可以合并多个pdf,但如果pdf包含扫描页面,则我不想将其添加到合并的pdf中,是否可以使用itext检查扫描页面

我使用以下代码合并pdf

Document PDFJoinInJava = new Document();
PdfCopy PDFCombiner = new PdfCopy(PDFJoinInJava, outputStream);
PdfCopy.PageStamp stamp;
PDFJoinInJava.open();
PdfReader ReadInputPDF;

List<InputStream> pdfs = streamOfPDFFiles;
List<PdfReader> readers = new ArrayList<PdfReader>();
int totalPages = 0;
Iterator<InputStream> iteratorPDFs = pdfs.iterator();
for (; iteratorPDFs.hasNext(); pdfCounter++) {
    InputStream pdf = iteratorPDFs.next();
    PdfReader pdfReader = new PdfReader(pdf);
    readers.add(pdfReader);
    totalPages += pdfReader.getNumberOfPages();
    pdf.close();
}
int number_of_pages;
int currentPageNumber = 0;
int pageOfCurrentReaderPDF = 0;
Iterator<PdfReader> iteratorPDFReader = readers.iterator();

PdfImportedPage page;
// Loop through the PDF files and add to the output.
int count = 1;

while (iteratorPDFReader.hasNext()) {
    PdfReader pdfReader = iteratorPDFReader.next();
    count++;
    number_of_pages = pdfReader.getNumberOfPages();

    // Create a new page in the target for each source page.
    for (int pageNum = 0; pageNum < number_of_pages;) {
        currentPageNumber++;
        pageOfCurrentReaderPDF++;
        page = PDFCombiner.getImportedPage(pdfReader, ++pageNum);
        ColumnText.showTextAligned(stamp.getUnderContent(),
                        Element.ALIGN_RIGHT, new Phrase(String
                                .format("%d", currentPageNumber),new Font(FontFamily.TIMES_ROMAN,3)),
                        50, 50, 0);
            stamp.alterContents();

        PDFCombiner.addPage(page);
    }
}
PDFJoinInJava.close();
Document PDFJoinInJava=新文档();
PdfCopy PDFCombiner=新的PdfCopy(PDFJoinInJava,outputStream);
PdfCopy.PageStamp;
pdfjoinjava.open();
PdfReader ReadInputPDF;
列出PDF=StreamofPDF文件;
列表读取器=新的ArrayList();
int totalPages=0;
迭代器迭代器DFS=pdfs.Iterator();
对于(;iteratorPDFs.hasNext();pdfCounter++){
InputStream pdf=iteratorPDFs.next();
PdfReader PdfReader=新PdfReader(pdf);
readers.add(pdfReader);
totalPages+=pdfReader.getNumberOfPages();
pdf.close();
}
整型页数;
int currentPageNumber=0;
int pageOfCurrentReaderPDF=0;
Iterator IteratorPDReader=readers.Iterator();
PDF导入页面;
//循环浏览PDF文件并添加到输出中。
整数计数=1;
while(iteratorPDReader.hasNext()){
PdfReader PdfReader=iteratorpdfreeader.next();
计数++;
页面数=pdfReader.getNumberOfPages();
//在目标中为每个源页面创建一个新页面。
对于(int pageNum=0;pageNum<页数;){
currentPageNumber++;
pageOfCurrentReaderPDF++;
page=PDFCombiner.getImportedPage(pdfReader,+pageNum);
ColumnText.showTextAligned(stamp.getUnderContent(),
Element.ALIGN_右,新短语(字符串
.format(“%d”,currentPageNumber),新字体(FontFamily.TIMES_ROMAN,3)),
50, 50, 0);
stamp.alterContents();
PDFCombiner.addPage(第页);
}
}
pdfjoinjava.close();

如果您想确定pdf文件是否由iText生成,则必须尝试以下代码:

File file = new File("/Demo.pdf");
    Scanner input = new Scanner(new FileReader(file));
    while (input.hasNextLine()) {
        final String checkline = input.nextLine();
        if(checkline.contains("Producer(iText")) { 
            // a match found!!!!!!
            System.out.println(file.getName()+" is generated by iText........ :):) ");
        break;
        }
    }

识别PDF文档池中扫描页面的标准是什么?我有多个PDF文件,其中一些包含扫描页面,我不希望合并PDF中包含扫描页面。一些文件包含扫描页面,它们之间有什么区别?从技术上讲一种方法是查找具有大型图形的页面。。。但页面填充图形也可能存在于其他文档中。或者查找没有或只有最少文本的页面。。。但如果这些扫描页面是OCR,它们确实包含文本。因此,请描述这些扫描页面与未扫描页面在技术上的区别。假设我有一个pdf文件包含2个扫描页面,如何通过itext库识别这两个页面?这在很大程度上取决于这些扫描页面是如何创建的,以及它们必须与哪些类型的其他页面区分开来。请检查问题。