
    )i                        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mZm	Z	m
Z
 ddlmZ  eded	      Zd
dhZdZ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y)a  
Simple PDF Convert API
POST /api/pdf/convert

Behavior:
- If a PDF file is uploaded: save it AS-IS under ./public/pdfs/<same_name>.pdf (overwrites if exists).
- If a TXT file is uploaded: read its text, create PDF with SAME base name, save to ./public/pdfs/.
- If only 'text' is provided (JSON or form): create PDF named text-<uuid8>.pdf under ./public/pdfs/.
- Response includes FULL absolute URL to access the saved file on the server.
    )annotationsN)datetime)	Blueprintrequestjsonifycurrent_app)secure_filenamepdf_convert_bpz/api/pdf)
url_prefixz.pdfz.txt   pdfsc                (    t        | xs ddz  d      S )Nr   i      )round)ns    :C:\xampp\htdocs\eduruby\Video_generation\pdf_conversion.py_bytes_to_mbr      s    !&q[)1--    c                n    t         j                  j                  | j                               d   t        v S )N   )ospathsplitextlowerALLOWED_EXTENSIONS)filenames    r   _allowed_filer   "   s)    77HNN,-a04FFFr   c                     t         j                  j                  t        j                  d      } t        j
                  t         j                  j                  | t              d       | S )NpublicTexist_ok)r   r   joinr   	root_pathmakedirsPUBLIC_SUBDIR)roots    r   _public_rootr'   %   s>    77<<--x8DKKT=1DAKr   c                     t         j                  j                  t               t              } t        j
                  | d       | S )NTr    )r   r   r"   r'   r%   r$   )ds    r   _public_dirr*   *   s+    
\^]3AKKD!Hr   c                \    t         j                  j                  d      }| dt         d|  S )N/z/public/)r   url_rootrstripr%   )r   bases     r   _full_url_forr0   /   s/    ""3'DV8M?!H:66r   c                    | j                         }|s5| j                  j                  d       | j                  j                         }	 |j                  d      S # t        $ r |j                  dd      cY S w xY w)Nr   zutf-8latin-1ignore)errors)readstreamseekdecodeUnicodeDecodeError)fsraws     r   _read_text_from_txtr<   3   sf    
'')C
		qiinn6zz'"" 6zz)Hz556s   	A A98A9c                   ddl m} ddlm} ddlm} ddlm t        j                  j                  d      }|sQt        j                  j                  t        j                  ddd	      }t        j                  j                  |      r|}t!        j"                         }|j%                  ||
      }|\  }}	d|z  }
d|z  }d|z  }d|z  }dd	 |r?t        j                  j                  |      r ddlm} j+                   |d|             d||
z
  |z
  dz  }dfd}|j3                         }|j5                  |
|	|z
         |j7                         |}| j9                  d      D ]  } ||      D ]  }|j;                         |z
  |k  rX|j=                  |       |j?                          |j3                         }|j5                  |
|	|z
         |j7                         |jA                  |         |j=                  |       |j7                  dd       |jC                  ||z
  |d|z  z
  dtE        jF                         d       |jI                          |jK                  d       |jM                         S # t,        $ r+}t        j.                  j1                  d|       Y d }~d }~ww xY w)Nr   )A4)canvas)cm)
pdfmetricsVERBATIM_FONT_PATHassetsfontszDejaVuSansMono.ttf)pagesizeg?g       @	Helvetica   )TTFontDejaVuSansMonoz,TTF registration failed, using Helvetica: %sg?c                   | dgS | dk(  rdgS | j                  dd      } | j                  d      }g d}}dfd}|D ]  }|dk(  r|n|dz   |z   } ||      k  r|} |r|j                  |       |}6|}|s;dt        |      d}
}	}||	k  r)||	z   dz  } ||d |       k  r|}
|dz   }n|dz
  }	||	k  r)|j                  |d |
        ||
d  }|rY |dk7  r|j                  |       |S )	N 	     c                *    j                  |       S )N)stringWidth)s	font_name	font_sizerA   s    r   swz<_write_pdf_reportlab_verbatim.<locals>.wrap_line.<locals>.swm   s    ))!Y	BBr   r   r   )rQ   strreturnfloat)replacesplitappendlen)linewords	out_linescurrT   wcur_trytokenlohibestmidrR   rS   rA   usable_widths               r   	wrap_linez0_write_pdf_reportlab_verbatim.<locals>.wrap_linec   s3   <4K2:4K||D&)

3R3		C A"9a39q=G'{l*$$S)CE'(#e*aB Bh#%7q.C!%+,>'*%(1W%(1W !Bh "((u6 %de   * "9S!r   
zHelvetica-Oblique   g333333?zGenerated: z%Y-%m-%d %H:%M)r\   rU   rV   z	list[str])'reportlab.lib.pagesizesr>   reportlab.pdfgenr?   reportlab.lib.unitsr@   reportlab.pdfbaserA   r   configgetr   r   r"   r#   existsioBytesIOCanvasreportlab.pdfbase.ttfontsrH   registerFont	Exceptionloggerwarning	beginTextsetTextOriginsetFontrY   getYdrawTextshowPagetextLinedrawRightStringr   nowsaver7   r5   )textr>   r?   r@   	font_path	candidatebufcwidthheightleft_marginright_margin
top_marginbottom_marginrH   eleadingrh   text_objy_limitlogical_linephysicalrR   rS   rA   rg   s                         @@@@r   _write_pdf_reportlab_verbatimr   A   sm   *'&,""&&';<IGGLL!6!6'K_`	77>>)$!I
**,CcB'AME6(K8LrJ"HMIIV	28##F+;Y$GH(I ;&5L$G$ $L {{}H;(;<Y	*G

4(!,/H}}(72

8$

;;=&&{FZ4GH  I6h' 0 ) JJxII!1%el*MC"H,D#HLLN>#BCEFFHHHQK88:C  V""#QSTUUVs   AJ 	K  J;;K c           	     n   ddl m}  |       }|j                  dd       |j                          |j	                  dd       | j                  d	      D ]*  }|j                  dd
|xs dj                  dd             , t        j                         }|j                  |       |j                         S )Nr   )FPDFT   )automarginCourierrG   )sizeri      rK   rL   rM   )txt)fpdfr   set_auto_page_breakadd_pageset_fontrY   
multi_cellrX   rr   rs   outputgetvalue)r   r   pdfr\   outs        r   _write_pdf_fpdf_verbatimr      s    
&Cb1LLNLLL$

4 q!$*"!5!5dF!CD !
**,CJJsO<<>r   c                   ddl m} dd}d}g }| j                  d      D ]5  } ||xs dj                  dd      |      xs dg}|j	                  |       7 d	}g }|j                  d
       d}	|j                  |	       d| dg}
|D ]  }|
j                  d ||       d        |
j                  d       dj                  |
      j                  dd      }dt        |       dj                  d      |z   dz   }|j                  |j                  dd             d}|j                  |       d}|j                  |       d}|j                  |       g d}}d}|D ]8  }|j                  dd      }|j                  |       ||z  }|t        |      z  }: t        |      }ddj                  d |D              z   }||j                  d      z  }d| d}||j                  d      z  }|S )Nr   )wrapc                f    | j                  dd      j                  dd      j                  dd      S )N\z\\(z\()z\))rX   )rQ   s    r   escz(_write_pdf_minimal_verbatim.<locals>.esc   s-    yyv&..sE:BB3NNr   Z   ri   rK   rL   rM   i   z	%PDF-1.4
zD1 0 obj
<< /Type /Font /Subtype /Type1 /BaseFont /Courier >>
endobj
zBT
/F1 11 Tf
1 0 0 1 50 z Tm
r   z) Tj
0 -16 Td
zET
r2   r3   z2 0 obj
<< /Length z >>
stream
s   endstream
endobj
z~3 0 obj
<< /Type /Page /Parent 4 0 R /Resources << /Font << /F1 1 0 R >> >> /MediaBox [0 0 595 842] /Contents 2 0 R >>
endobj
z94 0 obj
<< /Type /Pages /Kids [3 0 R] /Count 1 >>
endobj
z15 0 obj
<< /Type /Catalog /Pages 4 0 R >>
endobj
r   zxref
0 6
0000000000 65535 f 
c              3  (   K   | ]
  }|d d  yw)010z
 00000 n 
N ).0offs     r   	<genexpr>z._write_pdf_minimal_verbatim.<locals>.<genexpr>   s     7c[bTW3s);8O[bs   z,trailer
<< /Size 6 /Root 5 0 R >>
startxref
z
%%EOF)rQ   rU   rV   rU   )
textwrapr   rY   rX   extendrZ   r"   encoder[   r8   )r   twrapr   max_colslineslnwrappedychunksfont_objcontent_linesr\   content_streamcontent_objpage_obj	pages_objcatalog_objoffsetsr   posckbckxref_posxreftrailers                            r   _write_pdf_minimal_verbatimr      s	   &OHEjjr**48(CKtW  	AF
MM,XH
MM(1!E:;MqT+;<=  WW]+229hGN(^)<(=]KRRS\]`nn  rH  HK
MM+$$Y9: SH
MM(NI
MM)HK
MM+sSG
Cii	8,sSCZSC  3xH-7c[b7c0ccD4;;y!!C?zQG7>>)$$CJr   c                    	 dd l }t        |       S # t        $ r/ 	 dd l}t	        |       cY S # t        $ r t        |       cY cY S w xY ww xY w)Nr   )	reportlabr   rw   r   r   r   )r   r   r   s      r   _text_to_pdf_bytes_verbatimr      sQ    5,T22 5	5+D11 	5.t44	5	5s)    	A	,A	A A	AA	)r   intrV   rW   )r   rU   rV   bool)rV   rU   )r   rU   rV   rU   )r   rU   rV   bytes)__doc__
__future__r   rr   r   r   flaskr   r   r   r   werkzeug.utilsr	   __name__r
   r   MAX_UPLOAD_MBr%   r   r   r'   r*   r0   r<   r   r   r   r   r   r   r   <module>r      s{   	 # 	 	  : : *+X*Mf% .G

76]@
&R	5r   