423,682 Members | 1,352 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 423,682 IT Pros & Developers. It's quick & easy.

save SVG output by PHP in SVG file

100+
P: 178
Hi, I have created a script in PHP thats generates an SVG image. Want I want to do is have PHP save this as example.svg. Can this be done? Heres my code

Expand|Select|Wrap|Line Numbers
  1. <?php
  2. require "config.php";
  3. $proj_id = $_GET['proj'];
  4.  
  5. //set the content type 
  6.  
  7. header("Content-type: image/svg-xml"); 
  8.  
  9. //mark this as XML 
  10.  
  11. echo(<?xml version="1.0" encoding="iso-8859-1"?>' . "\n"); 
  12.  
  13. //Point to SVG DTD 
  14.  
  15. echo('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN" '); 
  16.  
  17. echo('"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/' . 
  18.  
  19. 'svg-20000303-stylable.dtd">' . "\n"); 
  20.  
  21.  
  22. //start SVG document, set size in "user units" 
  23.  
  24. echo("<svg xml:space=\"preserve\" " . 
  25.  
  26. "width=\"36cm\" height=\"24cm\" " . 
  27.  
  28. "viewBox=\"0 0 0 0\">\n"); //x, y, ??, zoomout
  29.  
  30.  
  31. $today = date('d/m/Y');
  32. $projectQ1 = mysql_query("SELECT * FROM project WHERE proj_id='$proj_id'") or die(mysql_error());
  33. $rowQ1 = mysql_fetch_assoc($projectQ1);
  34. $company = $rowQ1['company_name'];
  35. $project = $rowQ1['project_name'];
  36. $form = $rowQ1['form'];
  37. $access = $rowQ1['access'];
  38. $entry = $rowQ1['cable_entry'];
  39. $ip = $rowQ1['ip_rating'];
  40. $fault = $rowQ1['fault_rating'];
  41.  
  42. echo '<g id="main">';
  43.  
  44.  
  45. //draw each object
  46.  
  47.     $results = mysql_query("SELECT object_name, module_id, xpos, ypos, height, width FROM object, module WHERE object.module_name = module.module_name AND proj_id='$proj_id'") or die();
  48.     while($values = mysql_fetch_array($results)){
  49.         $object = $values['object_name'];
  50.         $module_id = $values['module_id'];
  51.         $mod = "SELECT module_name FROM module WHERE module_id = $module_id";
  52.         $res = mysql_query($mod) or trigger_error(mysql_error());
  53.         $row = mysql_fetch_object($res);
  54.         $module=$row->module_name;
  55.         $x = $values['xpos'];
  56.         $y = $values['ypos'];
  57.         $height = $values['height']/10;
  58.         $width = $values['width']/10;
  59.         $xx = $x + 5;
  60.         $yy = $y + 10;
  61.         echo("<rect x=\"$x\" y=\"$y\" " . 
  62.  
  63.         "width=\"$width\" height=\"$height\" " . 
  64.  
  65.         "style=\"fill:white; stroke:black; " . "stroke-width:2px\" />\n");
  66.  
  67.         echo("<text x=\"$xx\" y=\"$yy\" " . 
  68.  
  69.         "style=\"file:black; font-size:10\">" . 
  70.  
  71.         "$object" . 
  72.  
  73.         "</text>\n");
  74.  
  75.     }
  76.  
  77. // add busbar
  78. // calculate length of panel Left(smallest X, smallest Y) Right(largest X, smallest Y)+ length
  79. $q1 = "SELECT module_name, object_name, xpos, ypos FROM object WHERE proj_id='$proj_id' ORDER BY xpos DESC ,ypos ASC LIMIT 1"; // Right
  80. $result = mysql_query($q1) or trigger_error(mysql_error());
  81. $row = mysql_fetch_array($result);
  82. $module = $row['module_name'];
  83. $R_object = $row['object_name'];
  84. $R_x = $row['xpos'];
  85. $R_y = $row['ypos'];
  86.  
  87. $q3 = "SELECT width FROM module WHERE module_name = '$module'";
  88. $result3 = mysql_query($q3) or trigger_error(mysql_error());
  89. $row3 = mysql_fetch_array($result3);
  90. $Lwidth = $row3['width'];
  91.  
  92.  
  93. $q2 = "SELECT object_name, xpos, ypos FROM object WHERE proj_id='$proj_id' ORDER BY xpos ASC ,ypos ASC LIMIT 1"; // Left
  94. $result2 = mysql_query($q2) or trigger_error(mysql_error());
  95. $row2 = mysql_fetch_array($result2);
  96. $L_object = $row2['object_name'];
  97. $L_x = $row2['xpos'];
  98. $L_y = $row2['ypos'];
  99. $B_x = $L_x;
  100. $B_y = $L_y - 20;
  101. $iB_x = $B_x + 5;
  102. $iB_y = $B_y + 10;
  103. $length = ($R_x - $L_x)+ ($Lwidth / 10); 
  104. echo("<rect x=\"$B_x\" y=\"$B_y\" " . 
  105.  
  106.         "width=\"$length\" height=\"20\" " . 
  107.  
  108.         "style=\"fill:white; stroke:black; " . "stroke-width:2px\" />\n");
  109.  
  110.         echo("<text x=\"$iB_x\" y=\"$iB_y\" " . 
  111.  
  112.         "style=\"file:black; font-size:10\">" . 
  113.  
  114.         "Busbar" . 
  115.  
  116.         "</text>\n");
  117.  
  118.  
  119. // add busbase
  120. // calculate length of panel Left(smallest X, smallest Y) Right(largest X, smallest Y)+ length
  121. $q5 = "SELECT module_name, object_name, xpos, ypos FROM object WHERE proj_id='$proj_id' ORDER BY xpos ASC ,ypos DESC LIMIT 1"; // Right
  122. $result5 = mysql_query($q5) or trigger_error(mysql_error());
  123. $row5 = mysql_fetch_array($result5);
  124. $Bot_module = $row5['module_name'];
  125. $Bot_object = $row5['object_name'];
  126. $Bot_x = $row5['xpos'];
  127. $Bot_y = $row5['ypos'];
  128.  
  129. //get bottom of lowest module in panel
  130. $w1 = "SELECT module.module_name, object_name, xpos, ypos FROM object, module WHERE object.module_name = module.module_name AND proj_id='$proj_id' ORDER BY height DESC LIMIT 1";
  131. $resultW = mysql_query($w1) or trigger_error(mysql_error());
  132. $rowW = mysql_fetch_array($resultW);
  133. $WWy = $rowW['ypos'];
  134. $WWx = $rowW['xpos'];
  135. $WWmodule = $rowW['module_name'];
  136. $WWobject = $rowW['object_name'];
  137.  
  138. $q6 = "SELECT height FROM module WHERE module_name = '$WWmodule'";
  139. $result6 = mysql_query($q6) or trigger_error(mysql_error());
  140. $row6 = mysql_fetch_array($result6);
  141. $Lheight = $row6['height'];
  142.  
  143. $Base_x = $Bot_x;
  144. $Base_y = $WWy + ($Lheight / 10);
  145. $BaseText_x = $Base_x + 5;
  146. $BaseText_y = $Base_y + 10;
  147.  
  148. echo("<rect x=\"$Base_x\" y=\"$Base_y\" " . 
  149.  
  150.         "width=\"$length\" height=\"10\" " . 
  151.  
  152.         "style=\"fill:black; stroke:black; " . "stroke-width:2px\" />\n");
  153.  
  154.         echo("<text x=\"$BaseText_x\" y=\"$BaseText_y\" " . 
  155.  
  156.         "style=\"file:black; font-size:10\">" . 
  157.  
  158.         "Base" . 
  159.  
  160.         "</text>\n");
  161.  
  162. // y axis line    
  163. $line_height_x1 = $L_x - 20;
  164. $line_height_y1 = $L_y - 20;
  165. $line_height_x2 = $Base_x - 20;
  166. $line_height_y2 = $Base_y + 10;
  167. $line_height_y3 = $line_height_y2 + 10;
  168. $line_height_x3 = $line_height_x2 - 10;
  169. $actual_height = (($Base_y - $L_y)+30) * 10; 
  170. echo("<line x1=\"$line_height_x1\" y1=\"$line_height_y1\" " . 
  171.  
  172.         "x2=\"$line_height_x2\" y2=\"$line_height_y2\" " . 
  173.  
  174.         "style=\"stroke:red;" . "stroke-width:2px\" />\n");
  175.  
  176. echo("<text x=\"$line_height_x3\" y=\"$line_height_y3\" " . 
  177.  
  178.         "style=\"file:black; font-size:10\">" . 
  179.  
  180.         "$actual_height mm" . 
  181.  
  182.         "</text>\n");
  183.  
  184. // x axis line
  185. $line_width_x1 = $B_x;
  186. $line_width_y1 = $B_y - 20;
  187. $line_width_x2 = $R_x + ($Lwidth / 10);
  188. $line_width_y2 = $R_y - 40;
  189. $line_length_x = $line_width_x2 + 10;
  190. $actual_length = ($line_width_x2 - $line_width_x1)* 10; 
  191. echo("<line x1=\"$line_width_x1\" y1=\"$line_width_y1\" " . 
  192.  
  193.         "x2=\"$line_width_x2\" y2=\"$line_width_y2\" " . 
  194.  
  195.         "style=\"stroke:red;" . "stroke-width:2px\" />\n");
  196.  
  197. echo("<text x=\"$line_length_x\" y=\"$line_width_y2\" " . 
  198.  
  199.         "style=\"file:black; font-size:10\">" . 
  200.  
  201.         "$actual_length mm" . 
  202.  
  203.         "</text>\n");
  204.  
  205. echo '</g>';
  206.  
  207.  
  208. //panel side view
  209. echo '<g id="side">';
  210. //Get the deepest depth in the whole panel  SELECT * FROM table ORDER BY price desc"); 
  211. $kk1 = mysql_query("SELECT depth FROM object, module WHERE proj_id='$proj_id' AND object.module_name = module.module_name ORDER BY depth DESC") or die(mysql_error());
  212. $kk2 = mysql_fetch_assoc($kk1);
  213. $kk3 = $kk2['depth'];
  214. $sidewidth = $kk3/10;
  215.  
  216.  
  217.  
  218.  
  219. $side_height = ($actual_height / 10)-10;
  220. $side_y = $R_y - 20;
  221. $side_x = $R_x + ($Lwidth/10) + 160;
  222. $sidebase_x = $side_x;
  223. $sidebase_y = $side_y + $side_height;
  224.  
  225. echo("<rect x=\"$side_x\" y=\"$side_y\" " . 
  226.  
  227.         "width=\"$sidewidth\" height=\"$side_height\" " . 
  228.  
  229.         "style=\"fill:white; stroke:black; " . "stroke-width:2px\" />\n");
  230.  
  231. echo("<rect x=\"$sidebase_x\" y=\"$sidebase_y\" " . 
  232.  
  233.         "width=\"$sidewidth\" height=\"10\" " . 
  234.  
  235.         "style=\"fill:black; stroke:black; " . "stroke-width:2px\" />\n");
  236.  
  237. $side_xLine = $side_x - 20;
  238. $side_xText = $side_xLine - 10;
  239. //side_yLine
  240. echo("<line x1=\"$side_xLine\" y1=\"$line_height_y1\" " . 
  241.  
  242.         "x2=\"$side_xLine\" y2=\"$line_height_y2\" " . 
  243.  
  244.         "style=\"stroke:red;" . "stroke-width:2px\" />\n");
  245.  
  246. echo("<text x=\"$side_xText\" y=\"$line_height_y3\" " . 
  247.  
  248.         "style=\"file:black; font-size:10\">" . 
  249.  
  250.         "$actual_height mm" . 
  251.  
  252.         "</text>\n");
  253. //side xLine
  254. $side_xLine_y = $side_y - 20;
  255. $side_xLine_x_end = $side_x + $sidewidth;
  256. $side_xLine_x_end_text = $side_xLine_x_end + 10;
  257.  
  258. echo("<line x1=\"$side_x\" y1=\"$side_xLine_y\" " . 
  259.  
  260.         "x2=\"$side_xLine_x_end\" y2=\"$side_xLine_y\" " . 
  261.  
  262.         "style=\"stroke:red;" . "stroke-width:2px\" />\n");
  263. echo("<text x=\"$side_xLine_x_end_text\" y=\"$side_xLine_y\" " . 
  264.  
  265.         "style=\"file:black; font-size:10\">" . 
  266.  
  267.         "$kk3 mm" . 
  268.  
  269.         "</text>\n");
  270. //page titles
  271. $titleX = $line_width_x1 + ($length/2);
  272. $titleY = $side_xLine_y - 50;
  273.         echo("<text x=\"$titleX\" y=\"$titleY\" " . 
  274.  
  275.         "style=\"file:black; font-size:14\">" . 
  276.  
  277.         "FRONT VIEW" . 
  278.  
  279.         "</text>\n");
  280.  
  281.         echo("<text x=\"$side_x\" y=\"$titleY\" " . 
  282.  
  283.         "style=\"file:black; font-size:14\">" . 
  284.  
  285.         "SIDE VIEW" . 
  286.  
  287.         "</text>\n");
  288.  
  289. echo '</g>';//panel side view end
  290.  
  291.  
  292. //TES details box
  293. $boxStartX = $side_xLine_x_end_text - 250;
  294. $boxStartY = $titleY + 500;
  295. $adX = $boxStartX + 5;
  296. $ad1Y = $boxStartY + 65;
  297. $ad2Y = $ad1Y + 9;
  298. $ad3Y = $ad2Y + 9;
  299. $ad4Y = $ad3Y + 9;
  300. $ad5Y = $ad4Y + 9;
  301. $ad6Y = $ad5Y + 9;
  302. $picX = $boxStartX + 2;
  303. $picY = $boxStartY + 4;
  304.  
  305.  
  306. echo("<rect x=\"$boxStartX\" y=\"$boxStartY\" " . 
  307.  
  308.         "width=\"250px\" height=\"200px\" " . 
  309.  
  310.         "style=\"fill:white; stroke:black; " . "stroke-width:1px\" />\n");
  311.  
  312. echo("<rect x=\"$boxStartX\" y=\"$boxStartY\" " . 
  313.  
  314.         "width=\"250px\" height=\"120px\" " . 
  315.  
  316.         "style=\"fill:white; stroke:black; " . "stroke-width:1px\" />\n");
  317. echo("<rect x=\"$boxStartX\" y=\"$boxStartY\" " . 
  318.  
  319.         "width=\"105px\" height=\"120px\" " . 
  320.  
  321.         "style=\"fill:white; stroke:black; " . "stroke-width:1px\" />\n");
  322. echo("<image x='$picX' y='$picY' width='100px' height='55px' xlink:href='tes_logo_small.gif'/>");
  323. echo("<text x=\"$adX\" y=\"$ad1Y\" " . "style=\"file:black; font-size:8\">" . "18 Derryloaran Ind Estate" . "</text>\n");
  324. echo("<text x=\"$adX\" y=\"$ad2Y\" " . "style=\"file:black; font-size:8\">" . "Sandholes Rd, Cookstown" . "</text>\n");
  325. echo("<text x=\"$adX\" y=\"$ad3Y\" " . "style=\"file:black; font-size:8\">" . "Co. Tyrone" . "</text>\n");
  326. echo("<text x=\"$adX\" y=\"$ad4Y\" " . "style=\"file:black; font-size:8\">" . "Tel:    (028) 8676 1141" . "</text>\n");
  327. echo("<text x=\"$adX\" y=\"$ad5Y\" " . "style=\"file:black; font-size:8\">" . "Fax:    (028) 8676 9732" . "</text>\n");
  328. echo("<text x=\"$adX\" y=\"$ad6Y\" " . "style=\"file:black; font-size:8\">" . "Email: info@tes-ni.com" . "</text>\n");
  329.  
  330. $boxTextX = $boxStartX + 110;
  331. $boxText1Y = $boxStartY + 15;
  332. $boxText2Y = $boxText1Y + 15;
  333. $boxText3Y = $boxText2Y + 15;
  334. $boxText4Y = $boxText3Y + 15;
  335.  
  336. echo("<text x=\"$boxTextX\" y=\"$boxText1Y\" " . 
  337.  
  338.         "style=\"file:black; font-size:8\">" . 
  339.  
  340.         "CLIENT: $company" . 
  341.  
  342.         "</text>\n");
  343. echo("<text x=\"$boxTextX\" y=\"$boxText2Y\" " . 
  344.  
  345.         "style=\"file:black; font-size:8\">" . 
  346.  
  347.         "PROJECT:" . 
  348.  
  349.         "</text>\n");
  350.  
  351. echo("<text x=\"$boxTextX\" y=\"$boxText3Y\" " . 
  352.  
  353.         "style=\"file:black; font-size:8\">" . 
  354.  
  355.         "$project" . 
  356.  
  357.         "</text>\n");
  358.  
  359. echo("<text x=\"$boxTextX\" y=\"$boxText4Y\" " . 
  360.  
  361.         "style=\"file:black; font-size:8\">" . 
  362.  
  363.         "DATE: $today" . 
  364.  
  365.         "</text>\n");
  366.  
  367. //panel details
  368. $det1Y = $boxStartY + 130;
  369. $det2Y = $det1Y + 15;
  370. $det3Y = $det2Y + 15;
  371. $det4Y = $det3Y + 15;
  372. $det5Y = $det4Y + 15;
  373.  
  374. echo("<text x=\"$adX\" y=\"$det1Y\" " . 
  375.  
  376.         "style=\"file:black; font-size:8\">" . 
  377.  
  378.         "FORM: $form" . 
  379.  
  380.         "</text>\n");
  381.  
  382. echo("<text x=\"$adX\" y=\"$det2Y\" " . 
  383.  
  384.         "style=\"file:black; font-size:8\">" . 
  385.  
  386.         "FAULT RATING: $fault" . 
  387.  
  388.         "</text>\n");
  389.  
  390. echo("<text x=\"$adX\" y=\"$det3Y\" " . 
  391.  
  392.         "style=\"file:black; font-size:8\">" . 
  393.  
  394.         "IP RATING: $ip" . 
  395.  
  396.         "</text>\n");
  397.  
  398. echo("<text x=\"$adX\" y=\"$det4Y\" " . 
  399.  
  400.         "style=\"file:black; font-size:8\">" . 
  401.  
  402.         "ACCESS: $access" . 
  403.  
  404.         "</text>\n");
  405.  
  406. echo("<text x=\"$adX\" y=\"$det5Y\" " . 
  407.  
  408.         "style=\"file:black; font-size:8\">" . 
  409.  
  410.         "CABLE ENTRY: $entry" . 
  411.  
  412.         "</text>\n");
  413.  
  414.  
  415. //table with descriptions
  416. $rCount = 0;
  417. $keyX1 = $line_height_x1;
  418. $keyY = $boxStartY;
  419. $table = mysql_query("SELECT module_name, object_name FROM object WHERE proj_id = '$proj_id' ORDER BY object_name") or die();
  420. while($tt = mysql_fetch_array($table)) {
  421.     $objtt = $tt['object_name'];
  422.     $modtt = $tt['module_name'];
  423.     $rCount = $rCount+1;
  424.     echo("<text x=\"$keyX1\" y=\"$keyY\" " . 
  425.  
  426.         "style=\"file:black; font-size:10\">" . 
  427.  
  428.         "$objtt = $modtt" . 
  429.  
  430.         "</text>\n");
  431.  
  432.  
  433.     if ($rCount == 20) {
  434.         $keyY = $boxStartY;
  435.         $keyX1 = $keyX1 + 240;
  436.         $rCount = 0;
  437.     } else {
  438.         $keyY = $keyY + 10;
  439.     }
  440. }
  441.  
  442.  
  443. //end SVG document 
  444. echo('</svg>' . "\n");    
  445.  
  446. ?>
Oct 21 '08 #1
Share this Question
Share on Google+
2 Replies


Atli
Expert 5K+
P: 5,058
Hi.

You could always just use the Output Control functions.

Like, for example:
Expand|Select|Wrap|Line Numbers
  1. <?php
  2. ob_start();
  3.  
  4. echo "<html><head><title>Test</title></head>";
  5. echo "<body><h1>It works!</h1></body></html>";
  6.  
  7. $content = ob_get_clean();
  8.  
  9. if(file_put_contents("test.html", $content)) {
  10.   echo "Success";
  11. }
  12. else {
  13.   echo "Failed to save file";
  14. }
  15. ?>
  16.  
Oct 21 '08 #2

P: 1
Hi friends,

I have updated below code and its working 100%

ob_start();
echo '<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
baseProfile="full"
width="100" height="100">
<circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
</svg>';

$content = ob_get_clean();

if(file_put_contents("Amzad.svg", $content)) { // Filename for storing purpose
echo "Success";
}
else {
echo "Failed to save file";
}


If you have any query, please let me know.
Sep 14 '18 #3

Post your reply

Sign in to post your reply or Sign up for a free account.