
    j5j                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZmZ ddlmZmZ erdd	lmZ  G d
 de      Ze
d        Zy)a;  Built-in plugin implementing a null OCR engine (no OCR).

This plugin provides an OCR engine that produces no text output. It is useful
when users want OCRmyPDF's image processing, PDF/A conversion, or optimization
features without performing actual OCR.

Usage:
    ocrmypdf --ocr-engine none input.pdf output.pdf
    )annotations)Path)TYPE_CHECKING)Image)hookimpl)BoundingBoxOcrClass
OcrElement)	OcrEngineOrientationConfidence)
OcrOptionsc                      e Zd ZdZedd       Zedd       ZddZedd       Zedd       Z	edd       Z
edd       Ze	 d	 	 	 	 	 	 	 dd	       Ze	 	 	 	 	 	 	 	 	 	 dd
       Ze	 	 	 	 	 	 	 	 	 	 dd       Zy)NullOcrEnginezA no-op OCR engine that produces no text output.

    Use this when you want OCRmyPDF's image processing, PDF/A conversion,
    or optimization features without performing actual OCR.
    c                      y)zReturn version string.none r       W/var/www/html/qr/venv/lib/python3.12/site-packages/ocrmypdf/builtin_plugins/null_ocr.pyversionzNullOcrEngine.version$   s     r   c                     y)z$Return creator tag for PDF metadata.zOCRmyPDF (no OCR)r   optionss    r   creator_tagzNullOcrEngine.creator_tag)   s     #r   c                     y)z"Return human-readable engine name.zNo OCR enginer   )selfs    r   __str__zNullOcrEngine.__str__.   s    r   c                    t               S )z7Return supported languages (empty set for null engine).)setr   s    r   	languageszNullOcrEngine.languages2   s     ur   c                    t        dd      S )z2Return neutral orientation (no rotation detected).r           )angle
confidence)r   
input_filer   s     r   get_orientationzNullOcrEngine.get_orientation7   s     %1==r   c                     y)zReturn zero deskew angle.r!   r   r$   s     r   
get_deskewzNullOcrEngine.get_deskew<   s     r   c                      y)z:Return True - this engine supports the generate_ocr() API.Tr   r   r   r   supports_generate_ocrz#NullOcrEngine.supports_generate_ocrA   s     r   c           	     H   t        j                  |       5 }|j                  \  }}|j                  j	                  dd      }t        |t              r|d   n|}ddd       t        t        j                  t        dd      t              |      }|dfS # 1 sw Y   @xY w)a)  Generate empty OCR results.

        Args:
            input_file: The image file (used to get dimensions).
            options: OCR options (ignored).
            page_number: Page number (stored in result).

        Returns:
            A tuple of (empty OcrElement page, empty string).
        dpi)H   r-   r   N)lefttoprightbottom)	ocr_classbboxr,   page_number )r   opensizeinfoget
isinstancetupler
   r	   PAGEr   float)	r%   r   r4   imgwidthheightdpi_infor,   pages	            r   generate_ocrzNullOcrEngine.generate_ocrF   s    " ZZ
# 	KsHHME6xx||E84H!+He!<(1+(C	K mm!%Gc
#	
 Rx	K 	Ks   ABB!c                    t        j                  |       5 }|j                  \  }}ddd       d d d}|j                  |d       |j                  dd       y# 1 sw Y   9xY w)zcGenerate empty hOCR file.

        Creates minimal valid hOCR output with no text content.
        Na  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>OCRmyPDF - No OCR</title>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <meta name='ocr-system' content='OCRmyPDF null engine'/>
</head>
<body>
    <div class='ocr_page' title='bbox 0 0  z'>
    </div>
</body>
</html>
zutf-8)encodingr5   )r   r6   r7   
write_text)r%   output_hocroutput_textr   r>   r?   r@   hocr_contents           r   generate_hocrzNullOcrEngine.generate_hocrf   sz     ZZ
# 	%sHHME6	%
+ ,1'6( ; 	|g>rG4'	% 	%s   AA'c                    t        d      )znNullOcrEngine cannot generate PDFs directly.

        Use pdf_renderer='fpdf2' instead of 'sandwich'.
        z_NullOcrEngine cannot generate PDFs directly. Use --pdf-renderer fpdf2 instead of sandwich mode.)NotImplementedError)r%   
output_pdfrI   r   s       r   generate_pdfzNullOcrEngine.generate_pdf   s     "A
 	
r   N)returnstr)r   r   rP   rQ   )r   r   rP   zset[str])r%   r   r   r   rP   r   )r%   r   r   r   rP   r=   )rP   bool)r   )r%   r   r   r   r4   intrP   ztuple[OcrElement, str])
r%   r   rH   r   rI   r   r   r   rP   None)
r%   r   rN   r   rI   r   r   r   rP   rT   )__name__
__module____qualname____doc__staticmethodr   r   r   r   r&   r(   r*   rC   rK   rO   r   r   r   r   r      sF      # #   > >        
 	 > 555 5 	5
 
5 5@ 


 
 	

 

 
r   r   c                @    | t        | dd      }|dk7  ryt               S )z8Return NullOcrEngine when --ocr-engine none is selected.N
ocr_engineautor   )getattrr   )r   r[   s     r   get_ocr_enginer^      s+     WlF;
?r   N)rX   
__future__r   pathlibr   typingr   PILr   ocrmypdfr   ocrmypdf.hocrtransformr   r	   r
   ocrmypdf.pluginspecr   r   ocrmypdf._optionsr   r   r^   r   r   r   <module>rg      sM    #      D D @,x
I x
v 
 
r   