U
    3g–   ã                   @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZmZmZ ddl	m
Z
 dd„ Zdd„ Zd5dd„Zdd„ Zdd„ Zd6dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Z e!d4kre ƒ  dS )7é    N)ÚDictÚListÚSeté   )Úpymupdfc                 C   s   d|    dd¡S )Nz %s éK   ú-)Úcenter)Úx© r   ú4/tmp/pip-unpacked-wheel-8jfb_caj/pymupdf/__main__.pyÚmycenter   s    r   c                 C   sÂ   |d }|d }|dkr"|   |¡S dd„ }t | |¡}t | |¡}|j|jkrt|j|j  krfdkrtn n
|jdksœt d||f ¡ t |¡ d}||ƒS t |¡}| |j¡ d }}||ƒS )zReturn image for a given XREF.r   r   c                 S   s"   | j jdkr| S t tj| ¡}|S )Né   )Ú
colorspaceÚnr   ÚPixmapÚcsRGB)ÚpixZtpixr   r   r   Úgetimage   s    zrecoverpix.<locals>.getimagez&Warning: unsupported /SMask %i for %i:N)	Zextract_imager   r   ZirectÚalphar   ÚmessageZ	set_alphaZsamples)ÚdocÚitemr
   Úsr   Zpix1Úpix2r   r   r   r   Ú
recoverpix   s     
2

r   FTc                 C   s„   t  | ¡}|js"|dkr"t d¡ d}|js0|S |rp| |¡}|sLt d¡ |dkr€t  |dkrhdd nd¡ nt d	|j ¡ |S )
z!Open and authenticate a document.Tz$this command supports PDF files onlyéÿÿÿÿzauthentication unsuccessfulé   zauthenticated as %sÚownerÚuserz'%s' requires a password)	r   ÚopenZis_pdfÚsysÚexitZ
needs_passZauthenticater   Úname)ÚfilenameÚpasswordÚshowÚpdfr   Úrcr   r   r   Ú	open_file9   s    



r)   c                 C   sL   t dd„ |  ¡ D ƒƒd }|  ¡ D ]$\}}d| |¡|f }t |¡ q"dS )zPrint a Python dictionary.c                 S   s   g | ]}t |ƒ‘qS r   )Úlen)Ú.0Úkr   r   r   Ú
<listcomp>N   s     zprint_dict.<locals>.<listcomp>r   z%s: %sN)ÚmaxÚkeysÚitemsÚrjustr   r   )r   Úlr,   ÚvÚmsgr   r   r   Ú
print_dictL   s    r5   c                 C   sœ   t  d| ¡ |  |¡}t  |¡ |  |¡rŽ| ¡ }z(| d¡d }|| }| d¡rZd}W n tk
rt   d}Y nX t  d| ¡ t  d¡ t  d¡ d	S )
zPrint an object given by XREF number.

    Simulate the PDF source in "pretty" format.
    For a stream also print its size.
    z%i 0 objz/Lengthr   z0 RÚunknownzstream
...%s bytesZ	endstreamZendobjN)r   r   Zxref_objectZxref_is_streamÚsplitÚindexÚendswithÚ	Exception)r   ÚxrefZxref_strÚtempÚidxÚsizer   r   r   Ú
print_xrefT   s    





r?   Úpagec              	   C   sz  t |d ƒ}|  d|¡ dd¡} |  d¡}g }t|ƒD ]<\}}|d }| ¡ r”t|ƒ}	d|	  krl|k r€n n| t|ƒ¡ q6t d||f ¡ q6z"| d¡\}
}t|
ƒ}
t|ƒ}W n& t	k
rÜ   t d||f ¡ Y nX d|
  krô|k rn nd|  kr|k s$n t d||f ¡ |
|kr:| |
¡ q6|
|k r\|t
t|
|d ƒƒ7 }q6|t
t|
|d d	ƒƒ7 }q6|S )
aK  Transform a page / xref specification into a list of integers.

    Args
    ----
        rlist: (str) the specification
        limit: maximum number, i.e. number of pages, number of objects
        what: a string to be used in error messages
    Returns
    -------
        A list of integers representing the specification.
    r   ÚNú Ú ú,zbad %s specification at item %ir   z%bad %s range specification at item %ir   )ÚstrÚreplacer7   Ú	enumerateÚ	isdecimalÚintÚappendr!   r"   r:   ÚlistÚrange)ZrlistÚlimitÚwhatrA   Z	rlist_arrZout_listÚseqr   r   ÚiÚi1Úi2r   r   r   Úget_listk   s6    
4


rS   c                 C   s  t | j| jdƒ}tj | j¡d }d}|dkr:|d }d}t|dƒ}|j}t 	d| j|j
| ¡ d |||d |d	 f ¡ |j}|d
kr®| ¡ }t 	d||dkr¤dndf ¡ | ¡ }|d
krÌt 	d| ¡ t 	¡  | jrt 	tdƒ¡ | ¡ }t||ƒ t 	¡  | jr,t 	tdƒ¡ t|jƒ t 	¡  | jrtt 	tdƒ¡ t| j| ¡ dd}|D ]}t||ƒ t 	¡  qZ| jrÚt 	tdƒ¡ t| j|j
d ƒ}	|	D ]8}
|
d }| |¡}t 	d|
 ¡ t||ƒ t 	¡  q | jrt 	tdƒ¡ t 	| ¡ ¡ t 	¡  | ¡  d S )NTi   ZKBiè  ZMBr   z7'%s', pages: %i, objects: %i, %g %s, %s, encryption: %sÚformatÚ
encryptionr   z5document contains %i root form fields and is %ssignedé   znot rC   z#document contains %i embedded fileszPDF catalogzPDF metadatazobject informationr;   )rN   zpage informationzPage %i:zPDF trailer)r)   Úinputr%   ÚosÚpathÚgetsizeÚroundÚmetadatar   r   Ú
page_countZxref_lengthZis_form_pdfZget_sigflagsZembfile_countÚcatalogr   Zpdf_catalogr?   r5   ZxrefsrS   ÚpagesZ	page_xrefÚtrailerZpdf_trailerÚclose)Úargsr   r>   ÚflagÚmetar   r   r;   ZxreflÚpagelÚpnor   r   r   r&   š   sz    

ùÿÿÿÿ




r&   c                 C   sä   t | j| jdd}| j}d |¡}| js`|j| j| j| j	| j
| j| j| j|| j| j| jd d S t| j|jd ƒ}t ¡ }|D ]}|d }|j|||d q~|j| j| j| j	| j
| j| j| j|| j| j| jd | ¡  | ¡  d S )NT©r'   ©ZkeepÚnonezrc4-40zrc4-128zaes-128zaes-256)
ÚgarbageÚdeflateÚprettyÚcleanÚasciiÚlinearrU   Zowner_pwZuser_pwÚpermissionsr   ©Z	from_pageZto_page)r)   rW   r%   rU   r8   r_   ÚsaveÚoutputrj   Úcompressrl   Úsanitizern   ro   r   r   Z
permissionrS   r]   r   r    Ú
insert_pdfra   )rb   r   rU   Zencryptr_   Zoutdocrf   r   r   r   r   rm   Ù   sR    ÿõõrm   c           
      C   sÚ   | j }t ¡ }|D ]¨}| d¡}t|ƒdkr4|d nd}t|d |dd}d |dd… ¡}|r€td |dd… ¡|jd ƒ}nt	d|jd ƒ}|D ]}	|j
||	d |	d d q”| ¡  q|j| jd	dd
 | ¡  dS )z&Join pages from several PDF documents.rD   r   Nr   Trg   r   rq   r   )rj   rk   )rW   r   r    r7   r*   r)   ÚjoinrS   r]   rL   rv   ra   rr   rs   )
rb   Zdoc_listr   Zsrc_itemZsrc_listr%   Úsrcr_   Z	page_listrP   r   r   r   Údoc_join  s    
 
ry   c           	      C   sL  t | j| jdd}| ¡ s6| jr,| j| jkr6t d¡ t | j| jƒ}| j	rTt
| j	ƒnt
ƒ }t
| ¡ ƒ}|r~||ks‚t d¡ n|}|st d¡ |t
| ¡ ƒ@ }|r¶t dt|ƒ ¡ |D ]L}| |¡}| |¡}|j|||d |d |d	 d
 t d||j	f ¡ qº| ¡  | jr8| j| jkr8|j| jdd n| ¡  | ¡  dS )z!Copy embedded files between PDFs.Trg   úcannot save PDF incrementallyz%not all names are contained in sourceznothing to copyz2following names already exist in receiving PDF: %sr$   Ú	ufilenameÚdesc©r$   r{   r|   zcopied entry '%s' from '%s'rV   ©rj   N)r)   rW   r%   Úcan_save_incrementallyrs   r!   r"   ÚsourceZ	pwdsourcer#   ÚsetÚembfile_namesrE   Úembfile_infoÚembfile_getÚembfile_addr   r   ra   rr   ÚsaveIncr)	rb   r   rx   ÚnamesZ	src_namesZ	intersectr   ÚinfoZbuffr   r   r   Úembedded_copy  sF    ÿ
ÿ



ûr‰   c              
   C   sÔ   t | j| jdd}| ¡ s6| jr,| j| jkr6t d¡ ttj	j
f}tjdk rPt}z| | j¡ W n: |k
rš } zt d| j›d|› ¡ W 5 d}~X Y nX | jr®| j| jkr¸| ¡  n|j| jdd	 | ¡  dS )
zDelete an embedded file entry.Trg   rz   ©r   é   úno such embedded file ú: Nr   r~   )r)   rW   r%   r   rs   r!   r"   Ú
ValueErrorr   ÚmupdfÚFzErrorBaseÚmupdf_version_tupleÚembfile_delr#   r†   rr   ra   )rb   r   Úexception_typesÚer   r   r   Úembedded_delE  s$    ÿ
ÿ

*
r•   c              
   C   sØ   t | j| jdd}ttjjf}tjdk r,t}z| | j	¡}| 
| j	¡}W n: |k
r‚ } zt d| j	›d|› ¡ W 5 d}~X Y nX | jr| jn|d }t|dƒ}| |¡ W 5 Q R X t d	| j	|f ¡ | ¡  dS )
z&Retrieve contents of an embedded file.Trg   rŠ   rŒ   r   Nr$   Úwbzsaved entry '%s' as '%s')r)   rW   r%   rŽ   r   r   r   r‘   r„   r#   rƒ   r!   r"   rs   r    Úwriter   ra   )rb   r   r“   ÚstreamÚdr”   r$   rs   r   r   r   Úembedded_get[  s    
*rš   c              	   C   s*  t | j| jdd}| ¡ s:| jdks0| j| jkr:t d¡ z | | j¡ t d| j ¡ W n t	k
rn   Y nX t
j | j¡rŒt
j | j¡sœt d| j ¡ t| jdƒ}| ¡ }W 5 Q R X | j}|}| jsÒ|}n| j}|j| j||||d | jr| j| jkr| ¡  n|j| jd	d
 | ¡  dS )zInsert a new embedded file.Trg   Nrz   zentry '%s' already existszno such file '%s'Úrbr}   rV   r~   )r)   rW   r%   r   rs   r!   r"   r’   r#   r:   rX   rY   ÚexistsÚisfiler    Úreadr|   r…   r†   rr   ra   ©rb   r   Úfr˜   r$   r{   r|   r   r   r   Úembedded_addm  s@    ÿ
ÿ
    ÿ
r¡   c              	   C   sV  t | j| jdd}| ¡ s:| jdks0| j| jkr:t d¡ z| | j¡ W n$ t	k
rn   t d| j ¡ Y nX | j
dk	r¸tj
 | j
¡r¸tj
 | j
¡r¸t| j
dƒ}| ¡ }W 5 Q R X nd}| jrÊ| j}nd}| jrÜ| j}n| jrê| j}nd}| jrü| j}nd}|j| j||||d | jdks0| j| jkr:| ¡  n|j| jdd	 | ¡  dS )
z0Update contents or metadata of an embedded file.Trg   Nrz   úno such embedded file '%s'r›   r}   rV   r~   )r)   rW   r%   r   rs   r!   r"   rƒ   r#   r:   rY   rX   rœ   r   r    rž   r$   r{   r|   Zembfile_updr†   rr   ra   rŸ   r   r   r   Úembedded_upd  sT    ÿ
ÿ
ÿþý    ÿ
r£   c                 C   s0  t | j| jdd}| ¡ }| jdk	r’| j|kr@t d| j ¡ nRt ¡  t dt	|ƒt	|ƒdkrddndf ¡ t ¡  t
| | j¡ƒ t ¡  dS |sªt d	|j ¡ dS t	|ƒdkrÊd
|jt	|ƒf }n
d|j }t |¡ t ¡  |D ]8}| jst |¡ qê| |¡}t
| |¡ƒ t ¡  qê| ¡  dS )zList embedded files.Trg   Nr¢   z!printing 1 of %i embedded file%s:r   r   rC   z'%s' contains no embedded filesz-'%s' contains the following %i embedded filesz)'%s' contains the following embedded file)r)   rW   r%   r‚   r#   r!   r"   r   r   r*   r5   rƒ   Zdetailra   )rb   r   r‡   r4   r#   Ú_r   r   r   Úembedded_listÁ  s>    

ÿÿ




r¥   c                 C   sr  | j s| jst d¡ t| j| jdd}| jrBt| j|j	d ƒ}nt
d|j	d ƒ}| jshtj tj¡}n,| j}tj |¡r†tj |¡s”t d| ¡ tƒ }tƒ }|D ]‚}| j rP| |d ¡}|D ]Š}|d }	|	|krÄ| |	¡ | |	¡\}
}}}|dksÄ|sqÄtj ||
 dd	¡› d	|	› d
|› ¡}t|dƒ}| |¡ W 5 Q R X d}qÄ| jr¤| |d ¡}|D ]¾}|d }	|	|krh| |	¡ t||ƒ}t|ƒtkrè|d }|d }tj |d|	|f ¡}t|dƒ}| |¡ W 5 Q R X n<tj |d|	 ¡}|jjdk r|nt  !t j"|¡}| #|¡ qhq¤| j rHt  $dt%|ƒ|f ¡ | jrft  $dt%|ƒ|f ¡ | &¡  dS )z)Extract images and / or fonts from a PDF.z"neither fonts nor images requestedTrg   r   z"output directory %s does not existr   zn/arB   r   Ú.r–   NÚextÚimagez	img-%i.%sz
img-%i.pngr   zsaved %i fonts to '%s'zsaved %i images to '%s')'ZfontsZimagesr!   r"   r)   rW   r%   r_   rS   r]   rL   rs   rX   rY   ÚabspathÚcurdirrœ   Úisdirr   Zget_page_fontsÚaddZextract_fontrw   rF   r    r—   Zget_page_imagesr   ÚtypeÚdictr   r   r   r   r   rr   r   r*   ra   )rb   r   r_   Zout_dirZ
font_xrefsZimage_xrefsrf   Zitemlistr   r;   Zfontnamer§   r¤   ÚbufferÚoutnameÚoutfiler   Zimgdatar   r   r   r   Úextract_objectså  sl    


 ÿ



ÿýr²   c           	      C   sX   |rdnt dgƒ}| jd|d}|s6|s2| |¡ d S | |jddd¡ | |¡ d S )Nó   
é   Útext©ÚflagsÚutf8Úsurrogatepass©Úerrors)ÚbytesÚget_textr—   Úencode)	r@   ÚtextoutÚGRIDÚfontsizeÚ
noformfeedÚ
skip_emptyr·   Úeoprµ   r   r   r   Úpage_simple'  s    

rÅ   c           
      C   sz   |rdnt dgƒ}| jd|d}|g kr:|s6| |¡ d S |jdd„ d |D ]}	| |	d jd	d
d¡ qN| |¡ d S )Nr³   r´   Úblocksr¶   c                 S   s   | d | d fS )NrV   r   r   )Úbr   r   r   Ú<lambda>:  ó    z page_blocksort.<locals>.<lambda>©Úkeyr   r¸   r¹   rº   )r¼   r½   r—   Úsortr¾   )
r@   r¿   rÀ   rÁ   rÂ   rÃ   r·   rÄ   rÆ   rÇ   r   r   r   Úpage_blocksort3  s    

rÍ   c           !         s>  |rdnt dgƒ}tt ttdœdd„}tt tdœdd„}	tt tjd	œ‡ ‡fd
d„}
ttdœdd„‰dd„ }| jd|dd }|
|| ƒ\}}}}}|g kr°|s¬| 	|¡ d S |	||ƒ}|j
dd„ d i }|D ]8}|\}}}}|||ƒ}| |g ¡}| |¡ |||< qÒt| ¡ ƒ}| 
¡  || }i }|D ]f}|| }t|ƒ}|dk rZd||< q0dd„ |D ƒ}| 
¡  t |¡}||k rˆ|}|d ||< q0||d |d   |t|ƒ  d }|d }| 	d¡ |D ]\}||k rö| 	d¡ ||7 }qÖ||||| || ƒ} | 	| d jdd d!¡ || }qÒ| 	|¡ d S )"Nr³   r´   )ÚvaluesÚvalueÚreturnc                 S   s0   t  | |¡}|r| |d  S td|| f ƒ‚dS )zôFind the right row coordinate.

        Args:
            values: (list) y-coordinates of rows.
            value: (int) lookup for this value (y-origin of char).
        Returns:
            y-ccordinate of appropriate line for value.
        r   zLine for %g not found in %sN)ÚbisectÚbisect_rightÚRuntimeError)rÎ   rÏ   rP   r   r   r   Úfind_line_indexE  s    	z$page_layout.<locals>.find_line_index)ÚrowsrÐ   c                 S   sJ   t | ƒ} |  ¡  | d g}| dd … D ]}||d | kr&| |¡ q&|S )Nr   r   r   )rK   rÌ   rJ   )rÕ   rÀ   ZnrowsÚhr   r   r   Úcurate_rowsT  s    
z page_layout.<locals>.curate_rows)rÆ   r@   c              
      sÈ  t ƒ }|jj}|jj}|}|}d}g }| D ]Œ}	|	d D ]|}
|
d dkrLq8|
d \}}}}|dk s8||jjkrrq8|| }||kr†|}|
d D ]$}|d ˆ kr¢qŽ|d D ]}|d \}}}}|| }|d	 \}}tt|ƒƒ}| |¡ |d
 }||kr
|dkr
|}||k r|}|dkr |g kr |d \}}}}||kr |tdƒkrbˆ|| ƒ}n,|dkrvtdƒ}n|dkrŠtdƒ}n|}||||f|d< qª| ||||f¡ qªqŽq8q*|||||fS )Nr   ÚlinesÚdir)r   r   ZbboxZspansr>   ÚcharsÚoriginÚcrB   r   é û  rP   éû  r2   éû  )	r   ZrectÚwidthÚheightrI   r[   r¬   ÚchrrJ   )rÆ   r@   rÕ   Z
page_widthZpage_heightÚ	rowheightÚleftÚrightrÚ   ÚblockÚlineZx0Zy0Úx1Úy1rá   ÚspanrÜ   r¤   ÚcwidthÚoxÚoyÚchZold_chÚold_oxZold_oyZ
old_cwidthÚlig©rÁ   Újoinligaturer   r   Úprocess_blocks]  sZ    







z#page_layout.<locals>.process_blocks)rð   rÐ   c                 S   st   | dkrt dƒS | dkr t dƒS | dkr0t dƒS | dkr@t dƒS | d	krPt d
ƒS | dkr`t dƒS | dkrpt dƒS | S )zËReturn ligature character for a given pair / triple of characters.

        Args:
            lig: (str) 2/3 characters, e.g. "ff"
        Returns:
            Ligature, e.g. "ff" -> chr(0xFB00)
        ÚffrÝ   Úfiiû  Úfliû  ÚffirÞ   Úfflrß   Úftiû  Ústiû  )râ   )rð   r   r   r   rò   ‘  s    	z!page_layout.<locals>.joinligaturec                 S   sô   d}d}d}d}|t jkr&td| ƒ‚|D ]À}|\}	}
}}|
|  }
|
| }||	krd|
| |d krdq*|	dkr~||
 | dkr~q*|	}|
|| k r ||	7 }|}|
}q*|	dkrªq*t|
| ƒt|ƒ }|
|krÚ|dkrÚ|d| 7 }||	7 }|}|
}q*| ¡ S )a†  Produce the text of one output line.

        Args:
            left: (float) left most coordinate used on page
            slot: (float) avg width of one character in any font in use.
            minslot: (float) min width for the characters in this line.
            chars: (list[tuple]) characters of this line.
        Returns:
            text: (str) text string for this line
        rC   r   z%program error: minslot too small = %ggš™™™™™É?rB   gš™™™™™é?r   )r   ZEPSILONrÓ   rI   r*   Úrstrip)rä   ÚslotZminslotÚlcharsrµ   Zold_charZold_x1rï   rÜ   Úcharrì   r¤   rë   rè   Údeltar   r   r   Úmake_textline«  s:    
z"page_layout.<locals>.make_textlineZrawdictr¶   rÆ   c                 S   s   | d S )Nr   r   )rÜ   r   r   r   rÈ   í  rÉ   zpage_layout.<locals>.<lambda>rÊ   r   r   c                 S   s   g | ]}|d  ‘qS )rV   r   )r+   rÜ   r   r   r   r-     s     zpage_layout.<locals>.<listcomp>r   r   g333333ó?Ú
r¸   r¹   rº   )r¼   r   rI   r   r   r   ZPagerE   r½   r—   rÌ   ÚgetrJ   rK   r/   r*   Ú
statisticsZmedianr¾   )!r@   r¿   rÀ   rÁ   rÂ   rÃ   r·   rÄ   rÔ   r×   ró   r   rÆ   rÚ   rÕ   rä   rå   rã   rØ   rÜ   r¤   rí   Úyrý   r/   rü   Zminslotsr,   ZccountZwidthsZ	this_slotZrowposrµ   r   rñ   r   Úpage_layoutA  s`    	46








$


r  c                 C   sè   t | j| jdd}t| j|jd ƒ}| j}|d krLtj 	|j
¡\}}|d }t|dƒˆ}tjtjB }| jrt|tjN }| jr„|tjN }| jr”|tjN }tttdœ}|D ]4}	||	d  }
|| j |
|| j| j| j| j|d q¤W 5 Q R X d S )NFrg   r   z.txtr–   ©ÚsimplerÆ   Úlayoutr¶   )r)   rW   r%   rS   r_   r]   rs   rX   rY   Úsplitextr#   r    r   ZTEXT_PRESERVE_LIGATURESZTEXT_PRESERVE_WHITESPACEZconvert_whiteZnoligaturesZextra_spacesZTEXT_INHIBIT_SPACESrÅ   rÍ   r  ÚmodeZgridrÁ   rÂ   rÃ   )rb   r   re   rs   r$   r¤   r¿   r·   Úfuncrf   r@   r   r   r   Úgettext"  s:    


ýùr  c                 C   s   t  d¡ t  d¡ d S )NzThis is from PyMuPDF message().zThis is from PyMuPDF log().)r   r   Úlog)rb   r   r   r   Ú	_internalC  s    
r  c                  C   s8  t jdtdƒd} | jddd}|jdtdƒd	}|jd
tdd |jddd |jdddd |jdddd |jdddd |jdtdd |jdtdd |jtd |jdtdƒd	}|jd
tdd |jdtd d |jddd |jd!d"d#d$d% |jd&td'd |jd(td)d |jd*t	d+t
d,ƒd-d. |jd/dd0d1d2 |jd3dd0d4d2 |jd5dd0d6d2 |jd7t	d8d9d: |jd;dd0d<d2 |jd=dd0d>d2 |jdd?d |jtd |jd@tdAƒdBdC}|jd
dDdEdF |jdGdHdIdJ |jtd |jdKtdLƒd	}|jd
tdd |jdMddNd |jdOddPd |jdGdQd |jddd |jdtdRd |jtd |jdStdTƒd	}|jd
dd |jdUdVd |jdWddXd |jddd |jtd |jdYtdZƒd	}|jd
dd |jddd |jdGd[d |jdUdHd\dJ |jd]dHd^dJ |jd_d`d |jtd |jdatdbƒd	}|jd
dd |jddd |jdGd[d |jdUdHdcdJ |jtd |jddtdeƒdfdC}|jd
dd |jdUdHdgdJ |jddd |jdGdhd |jd]did |jdjdkd |jdldmd |jd_dnd |jtd |jdotdpƒd	}	|	jd
tdd |	jdUdHdgdJ |	jddd |	jdGdqd |	jtd |jdrtdsƒd	}
|
jd
tdtd |
jddud |
jdGdvd |
jdwdHdxdJ |
jdydzd |
jdUdDd{dF |
jtd |jd|td}ƒd	}|jd
td~d |jddd |jd€tdd‚dƒd. |jdtd„d…d† |jd‡ddˆd0d‰ |jdŠdd‹d0d‰ |jdŒddd0d‰ |jdŽddd0d‰ |jddd‘d0d‰ |jdGd’d |jd“td”d•d† |jd–td—d˜d† |jtd |jd™tdšƒd	}|jtd |  ¡ }t|d›ƒs*|  ¡  n
| |¡ dœS )zDefine command configurations.r   zBasic PyMuPDF Functions)ÚprogÚdescriptionZSubcommandsz/Enter 'command -h' for subcommand specific help)ÚtitleÚhelpr&   zdisplay PDF information)r  rW   zPDF filename)r­   r  z	-passwordr%   )r  z-catalogÚ
store_truezshow PDF catalog)Úactionr  z-trailerzshow PDF trailerz	-metadatazshow PDF metadataz-xrefsz&show selected objects, format: 1,5-7,Nz-pagesz'show selected pages, format: 1,5-7,50-N)r  rm   z.optimize PDF, or create sub-PDF if pages givenrs   zoutput PDF filenamez-encryptionzencryption methodrh   ri   )r  ÚchoicesÚdefaultz-ownerzowner passwordz-userzuser passwordz-garbagezgarbage collection levelé   r   )r­   r  r  r  z	-compressFzcompress (deflate) output)r  r  r  z-asciizASCII encode binary dataz-linearzformat for fast web displayz-permissionr   zinteger with permission levels)r­   r  r  z	-sanitizezsanitize / clean contentsz-prettyzprettify PDF structurez/output selected pages pages, format: 1,5-7,50-Nrw   zjoin PDF documentsz3specify each input as 'filename[,password[,pages]]')r  ÚepilogÚ*zinput filenames)Únargsr  z-outputTzoutput filename)Úrequiredr  Úextractz extract images and fonts to diskz-imageszextract imagesz-fontszextract fontsz-folder to receive output, defaults to currentz-consider these pages only, format: 1,5-7,50-Nz
embed-infozlist embedded filesz-namezif given, report only this onez-detailzdetail informationz	embed-addzadd embedded filez-output PDF filename, incremental save if nonezname of new entryz-pathzpath to data for new entryz-desczdescription of new entryz	embed-delzdelete embedded filezname of entry to deletez	embed-updzupdate embedded filez*except '-name' all parameters are optionalzname of entryz-Output PDF filename, incremental save if nonezpath to new data for entryz	-filenameznew filename to store in entryz
-ufilenamez&new unicode filename to store in entryz!new description to store in entryzembed-extractzextract embedded file to diskz'output filename, default is stored namez
embed-copyz copy embedded files between PDFszPDF to receive embedded fileszpassword of inputz2output PDF, incremental save to 'input' if omittedz-sourcezcopy embedded files from herez
-pwdsourcezpassword of 'source' PDFzrestrict copy to these entriesr  z(extract text in various formatting modeszinput document filenamezpassword for input documentz-modez-mode: simple, block sort, or layout (default)r  r  z select pages, format: 1,5-7,50-Nz1-N)r­   r  r  z-noligaturesz*expand ligature characters (default False))r  r  r  z-convert-whitez6convert whitespace characters to white (default False)z-extra-spacesz%fill gaps with spaces (default False)z-noformfeedz-write linefeeds, no formfeeds (default False)z-skip-emptyz+suppress pages with no text (default False)z3store text in this file (default inputfilename.txt)z-gridz+merge lines if closer than this (default 2)r   z	-fontsizez4only include text with a larger fontsize (default 3)rV   Zinternalzinternal testingr  N)ÚargparseÚArgumentParserr   Úadd_subparsersÚ
add_parserÚadd_argumentrE   Úset_defaultsr&   rI   rL   rm   ry   r²   r¥   r¡   r•   r£   rš   r‰   Úfloatr  r  Ú
parse_argsÚhasattrÚ
print_helpr  )ÚparserZsubpsZps_showZps_cleanZps_joinZ
ps_extractZps_embed_addZps_embed_delZps_embed_updZps_embed_extractZps_embed_copyZ
ps_gettextZps_internalrb   r   r   r   ÚmainG  s,   þ ÿ  ÿ  ÿ ÿüûü   ÿü   ÿü   ÿ ÿý ÿ ÿ  ÿ ÿ ÿ ÿ ÿ ÿý ÿ ÿ ÿ ÿ ÿ ÿ  ÿ  ÿ ÿûüüüüüüþüü ÿ
r(  Ú__main__)FT)r@   )"r  rÑ   rX   r!   r  Útypingr   r   r   rC   r   r   r   r)   r5   r?   rS   r&   rm   ry   r‰   r•   rš   r¡   r£   r¥   r²   rÅ   rÍ   r  r  r  r(  Ú__name__r   r   r   r   Ú<module>   sB   $

/?/("2$B b!  4
