a
    ¥Q•hêC  ã                   @   sÆ   d Z ddl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
 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 ddlmZ dd„ Zddd„Zdd„ Zdd„ Zdd„ Zdd„ ZdS )z4Insert anchors, links, bookmarks and inputs in PDFs.é    N)Úmd5)Úbasename)ÚunquoteÚurlsplité   )Ú
Attachment)ÚLOGGER)ÚffiÚgobjectÚpango)Úget_font_description)ÚURLFetchingErrorc                 C   sB  | \}}|D ]ì\}}	}
}|j |
dd… Ž \}}|j |
dd… Ž \}}|dv rt ddt ||||g¡t ddi¡dœ¡|_|rŽt |	¡|jd	< |d
kr¨t |	¡|jd< nt ddt |	¡dœ¡|jd< | |j¡ d|vræt ¡ |d< |d  |jj¡ q|D ]>}|\}}}|  ||¡\}}| |t |jd||dg¡g¡ qþdS )z%Include hyperlinks in given PDF page.Nr   )ÚinternalÚexternalú/Annotz/LinkÚWr   )ÚTypeÚSubtypeÚRectÚBSÚContentsr   ÚDestú/Actionz/URI)r   ÚSÚURIÚAÚAnnotsú/XYZ)	Útransform_pointÚpydyfÚ
DictionaryÚArrayÚlink_annotationÚStringÚ
add_objectÚappendÚ	reference)Úlinks_and_anchorsÚmatrixÚpdfÚpageÚnamesÚmarkÚlinksÚanchorsÚ	link_typeZlink_targetÚ	rectangleÚboxÚx1Úy1Úx2Úy2ÚanchorÚanchor_nameÚxÚy© r:   úO/var/www/sistema_ama/venv/lib/python3.9/site-packages/weasyprint/pdf/anchors.pyÚ	add_links   s<    ü
ý
ÿr<   c                 C   sX  t |ƒ}g }|D ]ä\}\}}}}	}
t | j| d||df¡}t t |¡|dœ¡}|  |¡ t| |	|d�\}}||d< |
dkr�|d  d9  < n||7 }|r¸|d j|d< |j|d d	< |rØ|d j|d
< |d j|d< |durê|j|d< | 	|¡ q|du �rP|�rPt ||d j|d jdœ¡}|  |¡ |D ]}|j|d< �q2|j| j
d< ||fS )z!Include bookmark outlines in PDF.r   r   )ÚTitler   )ÚparentÚCountÚclosedéÿÿÿÿÚPrevÚNextÚFirstÚLastNÚParent)r?   rD   rE   ÚOutlines)Úlenr   r!   Úpage_referencesr    r#   r$   Úadd_outlinesr&   r%   Úcatalog)r)   Ú	bookmarksr>   ÚcountZoutlinesÚtitler*   r8   r9   ÚchildrenÚstateÚdestinationÚoutlineZchildren_outlinesZchildren_countZoutlines_dictionaryr:   r:   r;   rJ   7   sF    
ÿ
ÿ

ý
rJ   c           ,      C   sè  | rt |  ¡ ƒsdS d|vr(t ¡ |d< d|jvrPt t ¡ |jddœ¡|jd< |d  ¡ d }t 	t
 |¡tj¡}dd	„ |  ¡ D ƒ}	t t¡}
t t¡} t|	ƒD �]>\}\}}}}g |j|dd
… Ž ¢|j|d
d… Ž ¢R }|j d¡}|j dd¡}d| ¡ › d|› �}|j d|¡}|d d }| ¡ }| |d ¡ t ddt |¡|jdt |¡dœ¡}|dv �rÎ|dk�rô||
| v�rÖt ddt |¡dt ¡ t ¡ dœ¡ |
| |< }| |¡ |jd d  |j¡ |
| | }|d d }d }nd!}|d
 |d  }|d" |d#  }|j|jd$d%t dd||f¡d&œd'�}| ¡  | ¡  | |d ¡ | d(|¡ ||d  d
 }||d  d
 }| ||¡ |  |¡ | !¡  | "¡  | |¡ | d(|¡ d)|jv }|dk�rät#|d* ƒnd+}t ||ji¡} d|d,< t d- $|j%¡¡|d.< |�r&d/|› �nd|d0< t d1| i¡|d2< t d3t |¡i¡|d4< | |¡ |dk�r°|j|d5< |�rŠd/|› �|d6< |d*  |j¡ |d7  t |¡¡ nt |¡|d8< |d0 |d6< �nÚ|j&d9k�røt'|ƒ}!t
 (|||!¡}"| )|"¡\}"}#d:|"_*| |"j+|¡ g }$g }%|D ]V}&t |&j dd;¡¡}'t |&j,�pDd;¡}(|$ t |'|(g¡¡ d<|&jv �r|% |'¡ �qd=|d,< t d- $|j%¡¡|d.< t |$¡|d7< d>|jv �rÆd?|d@< t |%¡|d6< n$dA|d@< |%�rÜ|%dB nt d;¡|d6< | |¡ �n°|dCk�s|j&dDk�rÀd})|j dEd;¡ -¡ dFk�r2|)dG7 })t dHdI„ | |  ¡ D ƒ¡}*d|d,< t d- $|j%¡¡|d.< t |j dd;¡¡|d6< dJ|d@< t dKdLt |j dM¡¡|*|)dNœ¡|dO< | |¡ nèt'|ƒ}!t
 (|||!¡}"| )|"¡\}"}#d:|"_*| |"j+|¡ dP|d,< t d- $|j%¡¡|d.< t |j dd;¡¡|d6< |j&dQk�rZdR|d@< t |j,�pPd;¡|d6< n&|dSk�rndT|d@< n|dUk�r€dV|d@< | dWd;¡ }+ .¡ �rž|+|dX< | |¡ |d  |j¡ |jd d  |j¡ || vr¢|| | |< q¢dS )YzInclude form inputs in PDF.Nr   ÚAcroFormÚtrue)ÚFieldsZDRZNeedAppearancesr   r   c                 S   s,   g | ]$\}}|D ]\}}}||||f‘qqS r:   r:   )Ú.0ÚformÚinputsÚelementÚstyler0   r:   r:   r;   Ú
<listcomp>p   s   þzadd_forms.<locals>.<listcomp>r   ÚtypeÚvalueÚYeszunknown-ú-ÚnameÚ	font_sizeg      è?Úcolorr   z/Widgeté   )r   r   r   ÚPÚFÚT)ÚradioÚcheckboxrg   z/Btni À  z/Off)ÚFTÚFfrf   ÚVÚKidsÚOptrU   g      à?ÚlÚ4é   é   ú/XObjectú/Form)Ú	Resourcesr   r   ÚBBox)ÚextraÚZaDbÚcheckedrl   Úonri   ó    ÚDAú/ÚASÚNÚAPÚCAZMKrF   rk   rm   rf   ÚselectTÚ Úselectedz/ChÚmultiplei    rj   i   rA   ÚsubmitÚbuttonÚmethodÚposté   c                 s   s   | ]}|j V  qd S )N)r&   )rV   Úfieldr:   r:   r;   Ú	<genexpr>ì   ó    zadd_forms.<locals>.<genexpr>i   r   z/SubmitFormÚaction)r   r   re   rU   ÚFlagsr   z/TxÚtextareaé   Úpasswordi    Úfilei   Ú	maxlengthZMaxLen)/ÚanyÚvaluesr   r!   rK   r    r&   Úsplitr	   Úgcr   Úpango_font_map_create_contextr
   Úg_object_unrefÚitemsÚcollectionsÚdefaultdictÚdictÚ	enumerater   ÚattribÚgetÚdecodeÚcloneÚ	set_colorr#   r$   r%   Ú
push_stateÚ
begin_textÚset_font_sizeÚmove_text_toÚshow_text_stringÚend_textÚ	pop_staterH   ÚjoinÚstreamÚtagr   Zpango_font_map_load_fontÚadd_fontÚused_in_formsÚhashÚtextÚlowerÚisdigit),Úformsr(   r)   r*   Ú	resourcesr¬   Úfont_mapZpage_referenceÚcontextZinputs_with_formsZradio_groupsÚirW   rY   rZ   r0   Ú
input_typeZinput_valueÚdefault_nameZ
input_namera   Úfield_streamrŠ   ÚgroupÚ	characterÚwidthÚheightZchecked_streamr8   r9   rx   ÚkeyÚ
appearanceÚfont_descriptionÚfontÚ_ÚoptionsZselected_valuesÚoptionr]   r±   ÚflagsÚfieldsÚ
max_lengthr:   r:   r;   Ú	add_forms_   sF   
ýþþ

ÿþú

ú
ü






ÿþûÿ



rÊ   c                 C   s  | D ]þ\}}}	}
|dkrq||vr@t ||jd�}t|||ƒ||< || }|du rRqg |j|	dd… Ž ¢|j|	dd… Ž ¢R }	t g ddt |	¡dœ|¡}| |¡ t dt |	¡d	t 	¡ |j
t d
|j
i¡ddœ¡}| |¡ d|vròt ¡ |d< |d  |j
¡ qdS )zInclude annotations in PDF.Ú
attachment)ÚurlÚurl_fetcherNr   rr   rs   )r   r   ru   r   z/FileAttachmentr~   z/N)r   r   r   rf   ZFSr   r}   r   )r   rÍ   Úwrite_pdf_attachmentr   r   ÚStreamr!   r$   r    r#   r&   r%   )r-   r(   Údocumentr)   r*   Úannot_filesÚcompressr/   Zannot_targetr0   rÄ   rË   Z
annot_filer¬   Zannotr:   r:   r;   Úadd_annotations  sN    	ÿÿÿþýü
ù	
rÓ   c                    s  d}d}d}z„|j �j\}‰ }}tˆ tƒr0ˆ  ¡ ‰ tˆ tƒrDt ˆ ¡‰ t‡ fdd„dƒD ]}|t|ƒ7 }||7 }qVW d  ƒ n1 s„0    Y  W n@ t	yÐ } z(t
 d|¡ t
jd|d� W Y d}~dS d}~0 0 t|d	d
� ¡ |_|jrò|j}	n*|�rt|ƒj�rttt|ƒjƒƒ}	nd}	tj|	d	d�d }
|
�s8d}
t |j d¡¡}t |j d¡¡}t dd|
 dd¡› �t d|j› d�|||dœ¡dœ¡}tj|g||d�}|  |¡ t dt |	jdd�¡t |	¡t d|ji¡t |j �pìd¡dœ¡}|  |¡ |S )z&Write an attachment to the PDF stream.Nr   rŒ   c                      s
   ˆ   d¡S )Nr�   )Úreadr:   ©Úsourcer:   r;   Ú<lambda>W  rŒ   z&write_pdf_attachment.<locals>.<lambda>zFailed to load attachment: %szError while loading attachment:)Úexc_infoF)Úusedforsecurityzattachment.bin)Ústrictzapplication/octet-streamzD:%Y%m%d%H%M%SZz/EmbeddedFiler|   z#2fú<ú>)ÚCheckSumÚSizeÚCreationDateÚModDate)r   r   ÚParams)rÒ   z	/FilespecÚignore)Úerrorsre   r‚   )r   re   ZUFÚEFZDesc)!rÖ   Ú
isinstanceÚstrÚencodeÚbytesÚioÚBytesIOÚiterrH   r   r   ÚerrorÚdebugr   Ú	hexdigestr`   r   Úpathr   r   Ú	mimetypesÚ
guess_typer   r#   ÚcreatedÚstrftimeÚmodifiedr    ÚreplacerÏ   r$   r&   Údescription)r)   rË   rÒ   rÌ   Zuncompressed_lengthr¬   rÄ   ÚdataÚ	exceptionÚfilenameÚ	mime_typeÚcreationÚmodZ
file_extraZfile_streamÚpdf_attachmentr:   rÕ   r;   rÎ   J  s`    


,üý

û
rÎ   c                 c   sÖ   t ƒ }g }t| ƒD ]T\}}| g ¡ |j ¡ D ]6\}\}}}}||vr.|d  |||f¡ | |¡ q.q| D ]d}g }	|jD ]D}
|
\}}}}|dkr´||vr¨t d|¡ q¾|	 |
¡ qz|	 |
¡ qz|	| 	d¡fV  qldS )aþ  Resolve internal hyperlinks.

    Links to a missing anchor are removed with a warning.

    If multiple anchors have the same name, the first one is used.

    :returns:
        A generator yielding lists (one per page) like :attr:`Page.links`,
        except that ``target`` for internal hyperlinks is
        ``(page_number, x, y)`` instead of an anchor name.
        The page number is a 0-based index into the :attr:`pages` list,
        and ``x, y`` are in CSS pixels from the top-left of the page.

    rA   r   z(No anchor #%s for internal URI referencer   N)
Úsetrž   r%   r.   rš   Úaddr-   r   rì   Úpop)Úpagesr.   Zpaged_anchorsr¸   r*   r7   Úpoint_xÚpoint_yrÄ   Z
page_linksÚlinkr/   r:   r:   r;   Úresolve_links†  s*    

þr  )N)Ú__doc__r›   ré   rð   Úhashlibr   Úos.pathr   Úurllib.parser   r   r   r‚   r   Úloggerr   Ztext.ffir	   r
   r   Ú
text.fontsr   Úurlsr   r<   rJ   rÊ   rÓ   rÎ   r  r:   r:   r:   r;   Ú<module>   s&   $
( :2<