Untitled

 avatar
unknown
python
a year ago
1.9 kB
5
Indexable
import os
import fitz
import PyPDF2
from concurrent.futures import ThreadPoolExecutor

def find_pdfs(directory):
    """ Recursively find all PDF files in the given directory. """
    pdf_files = []
    for root, _, files in os.walk(directory):
        for file in files:
            if file.lower().endswith('.pdf'):
                pdf_files.append(os.path.join(root, file))
    return pdf_files

def check_pdf_signature(pdf_path):
    """ Check if the given PDF file contains a valid signature. """
    try:
        doc = fitz.open(pdf_path)
        info = doc.metadata
        doc.close()
        
        reader = PyPDF2.PdfReader(pdf_path)
        if '/AcroForm' in reader.trailer['/Root']:
            acro_form = reader.trailer['/Root']['/AcroForm']
            if '/SigFlags' in acro_form:
                # print(f"PDF {pdf_path} OK.")
                return None
            else:
                print(f"PDF {pdf_path} does not contain a signature.")
                return pdf_path
        else:
            print(f"PDF {pdf_path} does not contain a signature.")
            return pdf_path
    except Exception as e:
        print(f"Failed to open {pdf_path}: {e}")
        return pdf_path

def main(directory):
    pdf_files = find_pdfs(directory)
    print(f"Number of PDF files found: {len(pdf_files)}")
    
    with open("result.txt", "w") as result_file, ThreadPoolExecutor() as executor:
        futures = [executor.submit(check_pdf_signature, pdf_file) for pdf_file in pdf_files]
        for future in futures:
            result = future.result()
            if result:
                result_file.write(result + "\n")

if __name__ == "__main__":
    directory = "C:/Users/Utente/Dropbox/DIAGNOSTEAM/RAPPORTS/signed_documents/"
    # directory = input("Enter the directory to search for PDF files: ")
    main(directory)
Editor is loading...
Leave a Comment