print.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. require('fpdf17/dashed_rect.php');
  3. require_once 'const.php';
  4. //Settare a false prima di uppare e true per il debug
  5. $debug=false;
  6. //Stampo il testo
  7. function printText($label,$value,$nline,$nx,$ny,$string=""){
  8. global $pdf,$Xinit,$Ymargin,$Ypadding,$spaceWidth,
  9. $XcellsWidth,$YcellsDepth,$fontType,$fontSize;
  10. $pdf->SetFont($fontType,'B',$fontSize);
  11. //Spostamento in base alla posizione della cella nella colonna
  12. $Xcol=$XcellsWidth*($nx-1);
  13. //Spostamento in base alla lunghezza della parola precedente,
  14. //deve essere seguita dopo il settaggio del font
  15. $Xword=$pdf->GetStringWidth($string);
  16. //Spostamento in base alla posizione della cella tra le righe
  17. $YInLine=$Ypadding*$nline;
  18. $Yrow=$YcellsDepth*($ny-1);
  19. //Spostamento in base alla posizione della linea all'interno della cella
  20. $YInLine=$Ypadding*$nline;
  21. //Print della label
  22. $pdf->Text(
  23. $Xinit+$Xcol+$Xword,
  24. $Ymargin+$YInLine+$Yrow,
  25. $label
  26. );
  27. $string.=$label;
  28. $pdf->SetFont($fontType,'',$fontSize);
  29. $Xword=$pdf->GetStringWidth($string);
  30. //Print del valore
  31. $pdf->Text(
  32. $Xinit+$Xcol+$Xword+$spaceWidth*2,
  33. $Ymargin+$YInLine+$Yrow,
  34. $value
  35. );
  36. $string.=$value;
  37. return $string;
  38. }
  39. //Stampo il contorno
  40. function printBorder($nx,$ny){
  41. global $pdf,$Xmargin,$XcellsWidth,$Ymargin,$YcellsDepth,$borderWidth;
  42. $pdf->SetDrawColor(100);
  43. $pdf->DashedRect(
  44. $Xmargin+$XcellsWidth*($nx-1),
  45. $Ymargin+$YcellsDepth*($ny-1),
  46. $Xmargin+$XcellsWidth*$nx,
  47. $Ymargin+$YcellsDepth*$ny,
  48. $borderWidth,13
  49. );
  50. }
  51. //Raccolgo i dati
  52. $labels=Array();
  53. $values=Array();
  54. if(!$debug){
  55. foreach ($_POST as $label => $value ){
  56. if($value!=""){
  57. $labels[$label]=str_replace("ids", "ID(s)", str_replace("_", " ", ucfirst($label))).": ";
  58. $new_value=$value;
  59. if($label=='user_ids')
  60. $new_value=explode(',', trim($value));
  61. $values[$label]=$new_value;
  62. }
  63. }
  64. } else {
  65. require_once 'debug.php';
  66. }
  67. $pdf=new PDF_DashedRect();
  68. $pdf->AddPage();
  69. for($c=1;$c<$maxcell;$c++) {
  70. for($l=1;$l<$maxline;$l++){
  71. //TODO:Sgrezzare il codice che si ripete Nmila volte
  72. $bck_labels=$labels;
  73. $bck_values=$values;
  74. $row=1;
  75. if(isset($labels['nickname'])){
  76. $div="";
  77. if(isset($labels['key_server'])){
  78. $div=" - ";
  79. $key2="key_server";
  80. } else if(isset($labels['key_size'])){
  81. $div=" - ";
  82. $key2="key_size";
  83. } else if(isset($labels['expire_date'])){
  84. $div=" - ";
  85. $key2="expire_date";
  86. }
  87. $str=printText($labels['nickname'],$values['nickname'].$div,$row,$c,$l);
  88. unset($labels['nickname']);
  89. unset($values['nickname']);
  90. if($div==" - "){
  91. $str=printText($labels[$key2],$values[$key2],$row,$c,$l,$str);
  92. unset($labels[$key2]);
  93. unset($values[$key2]);
  94. }
  95. $row++;
  96. } else if(isset($labels['key_server'])) {
  97. $div="";
  98. if(isset($labels['key_size'])){
  99. $div=" - ";
  100. $key2="key_size";
  101. } else if(isset($labels['expire_date'])){
  102. $div=" - ";
  103. $key2="expire_date";
  104. }
  105. $str=printText($labels['key_server'],$values['key_server'].$div,$row,$c,$l);
  106. unset($labels['key_server']);
  107. unset($values['key_server']);
  108. if($div==" - "){
  109. $str=printText($labels[$key2],$values[$key2],$row,$c,$l,$str);
  110. unset($labels[$key2]);
  111. unset($values[$key2]);
  112. }
  113. $row++;
  114. } else if(isset($labels['key_size'])){
  115. $div="";
  116. if(isset($labels['expire_date'])){
  117. $div=" - ";
  118. $key2="expire_date";
  119. }
  120. $str=printText($labels['key_size'],$values['key_size'].$div,$row,$c,$l);
  121. unset($labels['key_size']);
  122. unset($values['key_size']);
  123. if($div==" - "){
  124. $str=printText($labels[$key2],$values[$key2],$row,$c,$l,$str);
  125. unset($labels[$key2]);
  126. unset($values[$key2]);
  127. }
  128. $row++;
  129. }
  130. //TODO: la prima volta misura 0, MISTERO DELLA FEDE!
  131. //var_dump($pdf->GetStringWidth($labels['fingerprint']." ".$values['fingerprint']));
  132. if($pdf->GetStringWidth($labels['fingerprint']." ".$values['fingerprint'])>=$XcellsWidth){
  133. $swap=preg_replace('/ /','',$values['fingerprint']);
  134. $values['fingerprint']=$swap;
  135. }
  136. $str=printText($labels['fingerprint'],$values['fingerprint'],$row,$c,$l);
  137. $row++;
  138. if(isset($labels['key_size'])){
  139. $div="";
  140. if(isset($labels['expire_date'])){
  141. $div=" - ";
  142. $key2="expire_date";
  143. }
  144. $str=printText($labels['key_size'],$values['key_size'].$div,$row,$c,$l);
  145. unset($labels['key_size']);
  146. unset($values['key_size']);
  147. if($div==" - "){
  148. $str=printText($labels[$key2],$values[$key2],$row,$c,$l,$str);
  149. unset($labels[$key2]);
  150. unset($values[$key2]);
  151. }
  152. $row++;
  153. } else if(isset($labels['expire_date'])){
  154. $div="";
  155. $str=printText($labels['expire_date'],$values['expire_date'].$div,$row,$c,$l);
  156. unset($labels['expire_date']);
  157. unset($values['expire_date']);
  158. $row++;
  159. }
  160. $divider=" - ";
  161. $n_user_ids=count($values['user_ids']);
  162. if($n_user_ids==1){
  163. printText($labels['user_ids'],$values['user_ids'][0],$row,$c,$l);
  164. } else {
  165. $str="";
  166. for($i=0;$i<$n_user_ids;$i++){
  167. if($i==0){
  168. $str.=printText($labels['user_ids'],$values['user_ids'][$i],$row,$c,$l);
  169. // echo "div:".$labels['user_ids']." uid:".$values['user_ids'][$i]." i:".$i." row:".$row." c:".$c." l:".$l." str:".$str."\n";
  170. } else {
  171. $div=$divider;
  172. if($str==""){
  173. $div="";
  174. }
  175. // echo "div:".$div." uid:".$values['user_ids'][$i]." i:".$i." row:".$row." c:".$c." l:".$l." str:".$str."\n";
  176. $str.=printText($div,$values['user_ids'][$i],$row,$c,$l,$str);
  177. }
  178. $Xmove=$pdf->GetStringWidth($str);
  179. if($i+1<$n_user_ids){
  180. if($Xmove+$pdf->GetStringWidth($divider.$values['user_ids'][$i+1])>=$XcellsWidth){
  181. $str="";
  182. $row++;
  183. }
  184. }
  185. }
  186. }
  187. //Ripristino i valori iniziali il giro successivo visto che uso unset
  188. // sugli elementi dell'array
  189. $labels=$bck_labels;
  190. $values=$bck_values;
  191. //Se ci sono troppe righe dentro una cella, vanno diminite il numero
  192. // di celle in una colonna
  193. //TODO: far qualcosa del genere anche se le righe dentro una cella
  194. // sono poche
  195. if($row>5 && $l==1 && $c==1){
  196. $n_dif=$row-5;
  197. //TODO: Trovare una funzione che cali in modo migliore
  198. $maxline-=4+(2*$n_dif);
  199. $YcellsDepth+=$Ypadding*$n_dif;
  200. }
  201. printBorder($c,$l);
  202. //exit;
  203. }
  204. }
  205. //Disegno le forbicine
  206. $pdf->Image($img_path."cut_me.png",$Ymargin-2,2,3,3,"PNG");
  207. $file_name_pdf="fingerprint_".$values['fingerprint'].".pdf";
  208. $pdf->Output($file_name_pdf,'I');
  209. ?>