o
    e                     @  s   d Z ddlmZ ddlZddl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 ddlmZ dd	lmZ dd
lmZ ddlmZ eeZedd Zedd ZedddZed ddZdS )!z3Built-in plugin to implement PDF page optimization.    )annotationsN)Path)Sequence)Executor
PdfContexthookimpl)jbig2encpngquant)get_pdf_save_settings)numeric)optimize)check_external_programc                 C  s   |  dd}|jddttddddd	 |jd
ttdddddd |jdttdddddtjd |jdttdddddd |jdddd |jdttddddtjd d S )NzOptimization optionsz*Control how the PDF is optimized after OCRz-Oz
--optimizer         a  Control how PDF is optimized after processing:0 - do not optimize; 1 - do safe, lossless optimizations (default); 2 - do lossy JPEG and JPEG2000 optimizations; 3 - do more aggressive lossy JPEG and JPEG2000 optimizations. To enable lossy JBIG2, see --jbig2-lossy.)typechoicesdefaulthelpz--jpeg-qualityd   QzAdjust JPEG quality level for JPEG optimization. 100 is best quality and largest output size; 1 is lowest quality and smallest output; 0 uses the default.)r   r   metavarr   z--jpg-qualityjpeg_quality)r   r   r   destr   z--png-qualityzeAdjust PNG quality level to use when quantizing PNGs. Values have same meaning as with --jpeg-qualityz--jbig2-lossy
store_truezEnable JBIG2 lossy mode (better compression, not suitable for some use cases - see documentation). Only takes effect if --optimize 1 or higher is also enabled.)actionr   z--jbig2-page-group-sizei'  N)add_argument_groupadd_argumentintranger   argparseZSUPPRESS)parserZ
optimizing r"   QD:\Projects\ConvertPro\env\Lib\site-packages\ocrmypdf/builtin_plugins/optimize.pyadd_options   sZ   



	

r$   c                 C  s|   | j dkrtddtjddd | j dkr$tddtjdd	| js d
ndd | j dkr:t| j| j| jgr<t	
d d S d S d S )N   r	   z2.0.1z--optimize {2,3})programpackageversion_checkerneed_versionrequired_forjbig2r   z0.28z --optimize {2,3} | --jbig2-lossyTF)r&   r'   r(   r)   r*   Zrecommendedr   zdThe arguments --jbig2-lossy, --png-quality, and --jpeg-quality will be ignored because --optimize=0.)r   r   r	   versionr   Zjbig2_lossyanyZpng_qualityr   logwarning)optionsr"   r"   r#   check_options[   s0   

	r1   	input_pdfr   
output_pdfcontextr   executorr   	linearizeboolreturntuple[Path, Sequence[str]]c                 C  s   t dd|it|jj}t| ||||}g }|jjdkr&|d ||fS t t d}|	 D ]\}	}
|
sB|d|	 d q3||fS )Nr6   r   zOptimization was disabled.)r+   r	   zThe optional dependency 'zD' was not found, so some image optimizations could not be attempted.r"   )
dictr
   r0   output_typer   appendr   	availabler	   items)r2   r3   r4   r5   r6   Zsave_settingsresult_pathmessagesZimage_optimizersnamer=   r"   r"   r#   optimize_pdf{   s(   


rB   c                 C  s   | j jdkS )Nr   )r0   r   )r4   r"   r"   r#   is_optimization_enabled   s   rC   )r2   r   r3   r   r4   r   r5   r   r6   r7   r8   r9   )r4   r   r8   r7   )__doc__
__future__r   r    loggingpathlibr   typingr   Zocrmypdfr   r   r   Zocrmypdf._execr   r	   Zocrmypdf._pipeliner
   Zocrmypdf.clir   Zocrmypdf.optimizer   Zocrmypdf.subprocessr   	getLogger__name__r.   r$   r1   rB   rC   r"   r"   r"   r#   <module>   s*   

D
