main.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. /* GLOBAL PDF GENERATOR v2.0
  2. *
  3. * main.js - File including script for class.pdf_form_HTML.inc, an extension class for fpdf.php
  4. * ____________________________________________________________
  5. *
  6. * To run this class you need to install FPDF.
  7. * This version of Global PDF Generator is tested with FPDF v1.53
  8. * Get a copy from http://www.fpdf.de
  9. *
  10. * Developed by Dennis Ritz <ritz@global-cube.de>
  11. * Copyright (c) 2005-2006 Global-Cube Business Solutions, http://www.global-cube.de/
  12. * All rights reserved.
  13. *
  14. * You are not allowed to modify, sell, rent or lend this software
  15. */
  16. /* Global PDF Generator/globalPDFgenerator.js, v2.0 2006/01/15 23:06:13 */
  17. var pdf;
  18. //Stammfunktion: Diese Funktion stößt die PDF generation an
  19. function pdf_erzeugen(printElement)
  20. {
  21. if(!document.all)
  22. {
  23. alert("Dieses Version von 'Global PDF Generator' ist leider nur unter IE ab Version 4.0 lauffähig");
  24. return;
  25. }
  26. if(!document.all[printElement])
  27. {
  28. //Wird ausgegeben wenn das Objekt von dem ein PDF erzeugt werden soll nicht existiert
  29. alert("Von dieser Ansicht kann kein PDF erzeugt werden.");
  30. return;
  31. }
  32. //pdf ist ein Array
  33. //im index objekte werden hirachisch (HTML Hirachie) alle HTML Nodes gespeichert
  34. pdf = new Array();
  35. pdf['objects'] = new Array;
  36. //Set standard BGCOLOR
  37. var aktBgColor = new Array(255,255,255);
  38. //PDF Fenster aufrufen f&uuml;r Formular
  39. //pdf_generator.php ist nur eine temporäre Seite, die angezeigt wird, solange diese Seite braucht um die Datenstruktur aufzubauen
  40. PDFwin = window.open("pdf/pdf_generator.php","PDFwin","width=1000,height=700,left=10,top=10,location=no,menubar=no,status=no,toolbar=no,scrollbars=yes,resizable=yes");
  41. //PDF Objekte sammeln
  42. pdf_childNodes(document.all[printElement], 0, 0, aktBgColor);
  43. //PDF Objekte an PDF Fenster (in Form eines Formulars) übergeben und Formular abschicken
  44. pdf_aufrufen();
  45. }
  46. //Funktion zum zugreifen auf die Kinderelemente des akt Objekt
  47. function pdf_childNodes(obj, p_left, p_top, p_aktBgColor)
  48. {
  49. var innerTop = 0;
  50. for(var k=0; k<obj.childNodes.length; k++)
  51. {
  52. if(obj.childNodes[k].style)
  53. if(obj.childNodes[k].style.display == 'none')
  54. continue;
  55. var left;
  56. var top;
  57. switch(obj.childNodes[k].tagName)
  58. {
  59. case "TABLE": //pdf_childNode_check(obj.childNodes[k]);
  60. left = obj.childNodes[k].offsetLeft + p_left;
  61. top = obj.childNodes[k].offsetTop + p_top;
  62. if(obj.childNodes[k].getAttribute('tablecolor'))
  63. {
  64. aktBgColor = obj.childNodes[k].getAttribute('tablecolor');
  65. aktBgColor = aktBgColor.split(',');
  66. }else{
  67. aktBgColor = p_aktBgColor;
  68. }
  69. pdf_childNodes(obj.childNodes[k], left, top, aktBgColor);
  70. break;
  71. case "TBODY": //pdf_childNode_check(obj.childNodes[k]);
  72. left = obj.childNodes[k].offsetLeft + p_left;
  73. top = obj.childNodes[k].offsetTop + p_top;
  74. pdf_childNodes(obj.childNodes[k], left, p_top, p_aktBgColor);
  75. break;
  76. case "DIV": //pdf_childNode_check(obj.childNodes[k]);
  77. left = obj.childNodes[k].offsetLeft + p_left;
  78. top = obj.childNodes[k].offsetTop + p_top;
  79. pdf_childNodes(obj.childNodes[k], p_left, p_top, p_aktBgColor);
  80. break;
  81. case "TR": //pdf_childNode_check(obj.childNodes[k]);
  82. left = obj.childNodes[k].offsetLeft + p_left;
  83. top = obj.childNodes[k].offsetTop + p_top;
  84. if(obj.childNodes[k].getAttribute('rowcolor'))
  85. {
  86. aktBgColor = obj.childNodes[k].getAttribute('rowcolor');
  87. aktBgColor = aktBgColor.split(',');
  88. }else{
  89. aktBgColor = p_aktBgColor;
  90. }
  91. pdf_childNodes(obj.childNodes[k], left, top, aktBgColor);
  92. break;
  93. case "TD": left = obj.childNodes[k].offsetLeft + p_left;
  94. top = obj.childNodes[k].offsetTop + p_top;
  95. if(obj.childNodes[k].getAttribute('cellcolor'))
  96. {
  97. aktBgColor = obj.childNodes[k].getAttribute('cellcolor');
  98. aktBgColor = aktBgColor.split(',');
  99. }else{
  100. aktBgColor = p_aktBgColor;
  101. }
  102. pdf_childNode_check(obj.childNodes[k], left, p_top, aktBgColor);
  103. pdf_childNodes(obj.childNodes[k], left, top, aktBgColor);
  104. break;
  105. case "TH": left = obj.childNodes[k].offsetLeft + p_left;
  106. top = obj.childNodes[k].offsetTop + p_top;
  107. if(obj.childNodes[k].getAttribute('cellcolor'))
  108. {
  109. aktBgColor = obj.childNodes[k].getAttribute('cellcolor');
  110. aktBgColor = aktBgColor.split(',');
  111. }else{
  112. aktBgColor = p_aktBgColor;
  113. }
  114. pdf_childNode_check(obj.childNodes[k], left, p_top, aktBgColor);
  115. pdf_childNodes(obj.childNodes[k], left, top, aktBgColor);
  116. break;
  117. }
  118. }
  119. }
  120. function getObjectProps(obj)
  121. {
  122. var ret = new Array();
  123. //get TEXT / Value of obj
  124. ret['TEXT'] = obj.innerHTML;
  125. ret['TEXT'] = ret['TEXT'].replace(/\n/g, "");
  126. ret['TEXT'] = ret['TEXT'].replace(/\t/g, "");
  127. ret['TEXT'] = ret['TEXT'].replace(/\r/g, "");
  128. ret['TEXT'] = ret['TEXT'].replace(/\v/g, "");
  129. ret['TEXT'] = ret['TEXT'].replace(ret['TEXT'].match(/<TABLE.*\/TABLE>/ig), "");
  130. ret['TEXT'] = ret['TEXT'].replace(ret['TEXT'].match(/<DIV.*\/DIV>/ig), "");
  131. ret['TEXT'] = ret['TEXT'].replace(ret['TEXT'].match(/<INPUT.*>/ig), "");
  132. ret['TEXT'] = ret['TEXT'].replace(ret['TEXT'].match(/<IMG.*>/ig), "");
  133. ret['TEXT'] = ret['TEXT'].replace(ret['TEXT'].match(/<A.*>/ig), "");
  134. //get WIDTH of obj
  135. ret['WIDTH'] = obj.offsetWidth;
  136. //get HEIGHT of obj
  137. ret['HEIGHT'] = obj.offsetHeight;
  138. for(var i=0; i < obj.childNodes.length; i++)
  139. {
  140. if(obj.childNodes[i].tagName == "INPUT")
  141. if(obj.childNodes[i].type == "text")
  142. ret['TEXT'] += obj.childNodes[i].value;
  143. }
  144. //Align of TEXT
  145. //if it is a nummber (including '-,.') -> 'R'
  146. //else -> 'L'
  147. if(ret['TEXT'].match(/^-?\d*\.?\d*\.?\d+,?\d*$/))
  148. ret['ALIGN'] = 'R';
  149. else
  150. ret['ALIGN'] = 'L';
  151. return ret;
  152. }
  153. function pdf_childNode_check(obj, p_left, p_top, p_aktBgColor)
  154. {
  155. switch(obj.tagName)
  156. {
  157. case "TD":
  158. var objProps = getObjectProps(obj);
  159. pdf['objects'][pdf['objects'].length] = new Array();
  160. pdf['objects'][pdf['objects'].length-1]['TEXT'] = objProps['TEXT'];
  161. pdf['objects'][pdf['objects'].length-1]['TOP'] = p_top;
  162. pdf['objects'][pdf['objects'].length-1]['LEFT'] = p_left;
  163. pdf['objects'][pdf['objects'].length-1]['WIDTH'] = objProps['WIDTH'];
  164. if(objProps['TEXT'].lenght > (objProps['WIDTH'] / 2000))
  165. objProps['HEIGHT'] = (objProps['HEIGHT'] / 2);
  166. pdf['objects'][pdf['objects'].length-1]['HEIGHT'] = objProps['HEIGHT'] / 2;
  167. pdf['objects'][pdf['objects'].length-1]['BGCOLOR'] = p_aktBgColor;
  168. pdf['objects'][pdf['objects'].length-1]['ALIGN'] = objProps['ALIGN'];
  169. break;
  170. case "TH":
  171. var objProps = getObjectProps(obj);
  172. pdf['objects'][pdf['objects'].length] = new Array();
  173. pdf['objects'][pdf['objects'].length-1]['TEXT'] = objProps['TEXT'];
  174. pdf['objects'][pdf['objects'].length-1]['TOP'] = p_top;
  175. pdf['objects'][pdf['objects'].length-1]['LEFT'] = p_left;
  176. pdf['objects'][pdf['objects'].length-1]['WIDTH'] = objProps['WIDTH'];
  177. pdf['objects'][pdf['objects'].length-1]['HEIGHT'] = objProps['HEIGHT'];
  178. pdf['objects'][pdf['objects'].length-1]['BGCOLOR'] = p_aktBgColor;
  179. pdf['objects'][pdf['objects'].length-1]['ALIGN'] = 'C';
  180. break;
  181. }
  182. }
  183. function pdf_aufrufen()
  184. {
  185. while(!PDFwin.document.all('pdf_form')){
  186. }
  187. var form='';
  188. for(var u in pdf){
  189. for(var l in pdf[u]){
  190. m = parseInt(l) +1;
  191. for(var t in pdf[u][l]){
  192. if(pdf[u][l][t][0]){
  193. for(var f in pdf[u][l][t]){
  194. //PDFwin.document.all('pdf_form').innerHTML += "<input type='text' name='pdf["+u+"]["+m+"]["+t+"]["+f+"]' value='"+pdf[u][l][t][f]+"'></input>";
  195. form += "<input type='text' name='pdf["+u+"]["+m+"]["+t+"]["+f+"]' value='"+pdf[u][l][t][f]+"'></input>";
  196. }
  197. }
  198. else
  199. {
  200. //PDFwin.document.all('pdf_form').innerHTML += "<input type='text' name='pdf["+u+"]["+m+"]["+t+"]' value='"+pdf[u][l][t]+"'></input>";
  201. form += "<input type='text' name='pdf["+u+"]["+m+"]["+t+"]' value='"+pdf[u][l][t]+"'></input>";
  202. }
  203. }
  204. }
  205. }
  206. if(PDFwin.document.all('pdf_form'))
  207. {
  208. PDFwin.document.all('pdf_form').innerHTML = form;
  209. PDFwin.document.all('pdf_form').submit();
  210. }
  211. }
  212. // End of script for class.pdf_form_HTML.inc