Jump to content

save result in an svg file


cleary1981

Recommended Posts

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

 

<?php
require "config.php";
$proj_id = $_GET['proj'];

//set the content type 

header("Content-type: image/svg-xml"); 

//mark this as XML 

echo('<?xml version="1.0" encoding="iso-8859-1"?>' . "\n"); 

//Point to SVG DTD 

echo('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN" '); 

echo('"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/' . 

'svg-20000303-stylable.dtd">' . "\n"); 


//start SVG document, set size in "user units" 

echo("<svg xml:space=\"preserve\" " . 

"width=\"36cm\" height=\"24cm\" " . 

"viewBox=\"0 0 0 0\">\n"); //x, y, ??, zoomout


$today = date('d/m/Y');
$projectQ1 = mysql_query("SELECT * FROM project WHERE proj_id='$proj_id'") or die(mysql_error());
$rowQ1 = mysql_fetch_assoc($projectQ1);
$company = $rowQ1['company_name'];
$project = $rowQ1['project_name'];
$form = $rowQ1['form'];
$access = $rowQ1['access'];
$entry = $rowQ1['cable_entry'];
$ip = $rowQ1['ip_rating'];
$fault = $rowQ1['fault_rating'];

echo '<g id="main">';


//draw each object

$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();
while($values = mysql_fetch_array($results)){
	$object = $values['object_name'];
	$module_id = $values['module_id'];
	$mod = "SELECT module_name FROM module WHERE module_id = $module_id";
	$res = mysql_query($mod) or trigger_error(mysql_error());
	$row = mysql_fetch_object($res);
	$module=$row->module_name;
	$x = $values['xpos'];
	$y = $values['ypos'];
	$height = $values['height']/10;
	$width = $values['width']/10;
	$xx = $x + 5;
	$yy = $y + 10;
	echo("<rect x=\"$x\" y=\"$y\" " . 

	"width=\"$width\" height=\"$height\" " . 

	"style=\"fill:white; stroke:black; " . "stroke-width:2px\" />\n");

	echo("<text x=\"$xx\" y=\"$yy\" " . 

	"style=\"file:black; font-size:10\">" . 

	"$object" . 

	"</text>\n");

    }

// add busbar
// calculate length of panel Left(smallest X, smallest Y) Right(largest X, smallest Y)+ length
$q1 = "SELECT module_name, object_name, xpos, ypos FROM object WHERE proj_id='$proj_id' ORDER BY xpos DESC ,ypos ASC LIMIT 1"; // Right
$result = mysql_query($q1) or trigger_error(mysql_error());
$row = mysql_fetch_array($result);
$module = $row['module_name'];
$R_object = $row['object_name'];
$R_x = $row['xpos'];
$R_y = $row['ypos'];

$q3 = "SELECT width FROM module WHERE module_name = '$module'";
$result3 = mysql_query($q3) or trigger_error(mysql_error());
$row3 = mysql_fetch_array($result3);
$Lwidth = $row3['width'];


$q2 = "SELECT object_name, xpos, ypos FROM object WHERE proj_id='$proj_id' ORDER BY xpos ASC ,ypos ASC LIMIT 1"; // Left
$result2 = mysql_query($q2) or trigger_error(mysql_error());
$row2 = mysql_fetch_array($result2);
$L_object = $row2['object_name'];
$L_x = $row2['xpos'];
$L_y = $row2['ypos'];
$B_x = $L_x;
$B_y = $L_y - 20;
$iB_x = $B_x + 5;
$iB_y = $B_y + 10;
$length = ($R_x - $L_x)+ ($Lwidth / 10); 
echo("<rect x=\"$B_x\" y=\"$B_y\" " . 

	"width=\"$length\" height=\"20\" " . 

	"style=\"fill:white; stroke:black; " . "stroke-width:2px\" />\n");

	echo("<text x=\"$iB_x\" y=\"$iB_y\" " . 

	"style=\"file:black; font-size:10\">" . 

	"Busbar" . 

	"</text>\n");


// add busbase
// calculate length of panel Left(smallest X, smallest Y) Right(largest X, smallest Y)+ length
$q5 = "SELECT module_name, object_name, xpos, ypos FROM object WHERE proj_id='$proj_id' ORDER BY xpos ASC ,ypos DESC LIMIT 1"; // Right
$result5 = mysql_query($q5) or trigger_error(mysql_error());
$row5 = mysql_fetch_array($result5);
$Bot_module = $row5['module_name'];
$Bot_object = $row5['object_name'];
$Bot_x = $row5['xpos'];
$Bot_y = $row5['ypos'];

//get bottom of lowest module in panel
$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";
$resultW = mysql_query($w1) or trigger_error(mysql_error());
$rowW = mysql_fetch_array($resultW);
$WWy = $rowW['ypos'];
$WWx = $rowW['xpos'];
$WWmodule = $rowW['module_name'];
$WWobject = $rowW['object_name'];

$q6 = "SELECT height FROM module WHERE module_name = '$WWmodule'";
$result6 = mysql_query($q6) or trigger_error(mysql_error());
$row6 = mysql_fetch_array($result6);
$Lheight = $row6['height'];

$Base_x = $Bot_x;
$Base_y = $WWy + ($Lheight / 10);
$BaseText_x = $Base_x + 5;
$BaseText_y = $Base_y + 10;

echo("<rect x=\"$Base_x\" y=\"$Base_y\" " . 

	"width=\"$length\" height=\"10\" " . 

	"style=\"fill:black; stroke:black; " . "stroke-width:2px\" />\n");

	echo("<text x=\"$BaseText_x\" y=\"$BaseText_y\" " . 

	"style=\"file:black; font-size:10\">" . 

	"Base" . 

	"</text>\n");

// y axis line	
$line_height_x1 = $L_x - 20;
$line_height_y1 = $L_y - 20;
$line_height_x2 = $Base_x - 20;
$line_height_y2 = $Base_y + 10;
$line_height_y3 = $line_height_y2 + 10;
$line_height_x3 = $line_height_x2 - 10;
$actual_height = (($Base_y - $L_y)+30) * 10; 
echo("<line x1=\"$line_height_x1\" y1=\"$line_height_y1\" " . 

	"x2=\"$line_height_x2\" y2=\"$line_height_y2\" " . 

	"style=\"stroke:red;" . "stroke-width:2px\" />\n");

echo("<text x=\"$line_height_x3\" y=\"$line_height_y3\" " . 

	"style=\"file:black; font-size:10\">" . 

	"$actual_height mm" . 

	"</text>\n");

// x axis line
$line_width_x1 = $B_x;
$line_width_y1 = $B_y - 20;
$line_width_x2 = $R_x + ($Lwidth / 10);
$line_width_y2 = $R_y - 40;
$line_length_x = $line_width_x2 + 10;
$actual_length = ($line_width_x2 - $line_width_x1)* 10; 
echo("<line x1=\"$line_width_x1\" y1=\"$line_width_y1\" " . 

	"x2=\"$line_width_x2\" y2=\"$line_width_y2\" " . 

	"style=\"stroke:red;" . "stroke-width:2px\" />\n");

echo("<text x=\"$line_length_x\" y=\"$line_width_y2\" " . 

	"style=\"file:black; font-size:10\">" . 

	"$actual_length mm" . 

	"</text>\n");

echo '</g>';


//panel side view
echo '<g id="side">';
//Get the deepest depth in the whole panel  SELECT * FROM table ORDER BY price desc"); 
$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());
$kk2 = mysql_fetch_assoc($kk1);
$kk3 = $kk2['depth'];
$sidewidth = $kk3/10;




$side_height = ($actual_height / 10)-10;
$side_y = $R_y - 20;
$side_x = $R_x + ($Lwidth/10) + 160;
$sidebase_x = $side_x;
$sidebase_y = $side_y + $side_height;

echo("<rect x=\"$side_x\" y=\"$side_y\" " . 

	"width=\"$sidewidth\" height=\"$side_height\" " . 

	"style=\"fill:white; stroke:black; " . "stroke-width:2px\" />\n");

echo("<rect x=\"$sidebase_x\" y=\"$sidebase_y\" " . 

	"width=\"$sidewidth\" height=\"10\" " . 

	"style=\"fill:black; stroke:black; " . "stroke-width:2px\" />\n");

$side_xLine = $side_x - 20;
$side_xText = $side_xLine - 10;
//side_yLine
echo("<line x1=\"$side_xLine\" y1=\"$line_height_y1\" " . 

	"x2=\"$side_xLine\" y2=\"$line_height_y2\" " . 

	"style=\"stroke:red;" . "stroke-width:2px\" />\n");

echo("<text x=\"$side_xText\" y=\"$line_height_y3\" " . 

	"style=\"file:black; font-size:10\">" . 

	"$actual_height mm" . 

	"</text>\n");
//side xLine
$side_xLine_y = $side_y - 20;
$side_xLine_x_end = $side_x + $sidewidth;
$side_xLine_x_end_text = $side_xLine_x_end + 10;

echo("<line x1=\"$side_x\" y1=\"$side_xLine_y\" " . 

	"x2=\"$side_xLine_x_end\" y2=\"$side_xLine_y\" " . 

	"style=\"stroke:red;" . "stroke-width:2px\" />\n");
echo("<text x=\"$side_xLine_x_end_text\" y=\"$side_xLine_y\" " . 

	"style=\"file:black; font-size:10\">" . 

	"$kk3 mm" . 

	"</text>\n");
//page titles
$titleX = $line_width_x1 + ($length/2);
$titleY = $side_xLine_y - 50;
	echo("<text x=\"$titleX\" y=\"$titleY\" " . 

	"style=\"file:black; font-size:14\">" . 

	"FRONT VIEW" . 

	"</text>\n");

	echo("<text x=\"$side_x\" y=\"$titleY\" " . 

	"style=\"file:black; font-size:14\">" . 

	"SIDE VIEW" . 

	"</text>\n");

echo '</g>';//panel side view end


//TES details box
$boxStartX = $side_xLine_x_end_text - 250;
$boxStartY = $titleY + 500;
$adX = $boxStartX + 5;
$ad1Y = $boxStartY + 65;
$ad2Y = $ad1Y + 9;
$ad3Y = $ad2Y + 9;
$ad4Y = $ad3Y + 9;
$ad5Y = $ad4Y + 9;
$ad6Y = $ad5Y + 9;
$picX = $boxStartX + 2;
$picY = $boxStartY + 4;


echo("<rect x=\"$boxStartX\" y=\"$boxStartY\" " . 

	"width=\"250px\" height=\"200px\" " . 

	"style=\"fill:white; stroke:black; " . "stroke-width:1px\" />\n");

echo("<rect x=\"$boxStartX\" y=\"$boxStartY\" " . 

	"width=\"250px\" height=\"120px\" " . 

	"style=\"fill:white; stroke:black; " . "stroke-width:1px\" />\n");
echo("<rect x=\"$boxStartX\" y=\"$boxStartY\" " . 

	"width=\"105px\" height=\"120px\" " . 

	"style=\"fill:white; stroke:black; " . "stroke-width:1px\" />\n");
echo("<image x='$picX' y='$picY' width='100px' height='55px' xlink:href='tes_logo_small.gif'/>");
echo("<text x=\"$adX\" y=\"$ad1Y\" " . "style=\"file:black; font-size:8\">" . "18 Derryloaran Ind Estate" . "</text>\n");
echo("<text x=\"$adX\" y=\"$ad2Y\" " . "style=\"file:black; font-size:8\">" . "Sandholes Rd, Cookstown" . "</text>\n");
echo("<text x=\"$adX\" y=\"$ad3Y\" " . "style=\"file:black; font-size:8\">" . "Co. Tyrone" . "</text>\n");
echo("<text x=\"$adX\" y=\"$ad4Y\" " . "style=\"file:black; font-size:8\">" . "Tel:	(028) 8676 1141" . "</text>\n");
echo("<text x=\"$adX\" y=\"$ad5Y\" " . "style=\"file:black; font-size:8\">" . "Fax:	(028) 8676 9732" . "</text>\n");
echo("<text x=\"$adX\" y=\"$ad6Y\" " . "style=\"file:black; font-size:8\">" . "Email: [email protected]" . "</text>\n");

$boxTextX = $boxStartX + 110;
$boxText1Y = $boxStartY + 15;
$boxText2Y = $boxText1Y + 15;
$boxText3Y = $boxText2Y + 15;
$boxText4Y = $boxText3Y + 15;

echo("<text x=\"$boxTextX\" y=\"$boxText1Y\" " . 

	"style=\"file:black; font-size:8\">" . 

	"CLIENT: $company" . 

	"</text>\n");
echo("<text x=\"$boxTextX\" y=\"$boxText2Y\" " . 

	"style=\"file:black; font-size:8\">" . 

	"PROJECT:" . 

	"</text>\n");

echo("<text x=\"$boxTextX\" y=\"$boxText3Y\" " . 

	"style=\"file:black; font-size:8\">" . 

	"$project" . 

	"</text>\n");

echo("<text x=\"$boxTextX\" y=\"$boxText4Y\" " . 

	"style=\"file:black; font-size:8\">" . 

	"DATE: $today" . 

	"</text>\n");

//panel details
$det1Y = $boxStartY + 130;
$det2Y = $det1Y + 15;
$det3Y = $det2Y + 15;
$det4Y = $det3Y + 15;
$det5Y = $det4Y + 15;

echo("<text x=\"$adX\" y=\"$det1Y\" " . 

	"style=\"file:black; font-size:8\">" . 

	"FORM: $form" . 

	"</text>\n");

echo("<text x=\"$adX\" y=\"$det2Y\" " . 

	"style=\"file:black; font-size:8\">" . 

	"FAULT RATING: $fault" . 

	"</text>\n");

echo("<text x=\"$adX\" y=\"$det3Y\" " . 

	"style=\"file:black; font-size:8\">" . 

	"IP RATING: $ip" . 

	"</text>\n");

echo("<text x=\"$adX\" y=\"$det4Y\" " . 

	"style=\"file:black; font-size:8\">" . 

	"ACCESS: $access" . 

	"</text>\n");

echo("<text x=\"$adX\" y=\"$det5Y\" " . 

	"style=\"file:black; font-size:8\">" . 

	"CABLE ENTRY: $entry" . 

	"</text>\n");


//table with descriptions
$rCount = 0;
$keyX1 = $line_height_x1;
$keyY = $boxStartY;
$table = mysql_query("SELECT module_name, object_name FROM object WHERE proj_id = '$proj_id' ORDER BY object_name") or die();
while($tt = mysql_fetch_array($table)) {
$objtt = $tt['object_name'];
$modtt = $tt['module_name'];
$rCount = $rCount+1;
echo("<text x=\"$keyX1\" y=\"$keyY\" " . 

	"style=\"file:black; font-size:10\">" . 

	"$objtt = $modtt" . 

	"</text>\n");


if ($rCount == 20) {
	$keyY = $boxStartY;
	$keyX1 = $keyX1 + 240;
	$rCount = 0;
} else {
	$keyY = $keyY + 10;
}
}


//end SVG document 
echo('</svg>' . "\n");	

?>

Link to comment
https://forums.phpfreaks.com/topic/129387-save-result-in-an-svg-file/
Share on other sites

Instead of setting a SVG header and echoing the data, you can save the data in a variable, and then save it as a file with file_put_contents() (PHP 5+). But with so many echoes, it's a good deal of work to rewrite it. Maybe there's a way you can 'catch' the output, and save it as a file. I don't know how.

 

If you just add another header() call, a save prompt will appear. Add this right after your header() call:

 

header('Content-Disposition: attachment; filename="example.svg"');

I tried that but im not sure if I have done ti right can you take a look? it is creating the svg file but it wont display. I think  have an error somewhere.

 

<?php
require "config.php";
$proj_id = $_GET['proj'];

//set the content type 

header("Content-type: image/svg-xml"); 

//mark this as XML 

$svg_output = "<?xml version='1.0' encoding='iso-8859-1'?> \n"; 

//Point to SVG DTD 

$svg_output .= "<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 20000303 Stylable//EN' 'http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/' 'svg-20000303-stylable.dtd'> \n"; 


//start SVG document, set size in "user units" 

$svg_output .= "<svg xml:space=\'preserve\' ' . 

'width=\'36cm\' height=\'24cm\' ' . 

'viewBox=\'0 0 0 0\'> \n"; //x, y, ??, zoomout


$today = date('d/m/Y');
$projectQ1 = mysql_query("SELECT * FROM project WHERE proj_id='$proj_id'") or die(mysql_error());
$rowQ1 = mysql_fetch_assoc($projectQ1);
$company = $rowQ1['company_name'];
$project = $rowQ1['project_name'];
$form = $rowQ1['form'];
$access = $rowQ1['access'];
$entry = $rowQ1['cable_entry'];
$ip = $rowQ1['ip_rating'];
$fault = $rowQ1['fault_rating'];




//draw each object

$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();
while($values = mysql_fetch_array($results)){
	$object = $values['object_name'];
	$module_id = $values['module_id'];
	$mod = "SELECT module_name FROM module WHERE module_id = $module_id";
	$res = mysql_query($mod) or trigger_error(mysql_error());
	$row = mysql_fetch_object($res);
	$module=$row->module_name;
	$x = $values['xpos'];
	$y = $values['ypos'];
	$height = $values['height']/10;
	$width = $values['width']/10;
	$xx = $x + 5;
	$yy = $y + 10;
	$svg_output .= "<rect x=\'$x\' y=\'$y\' ' . 

	'width=\'$width\' height=\'$height\' ' . 

	'style=\'fill:white; stroke:black; ' . 'stroke-width:2px\' />\n";

	$svg_output .= "<text x=\'$xx\' y=\'$yy\' ' . 

	'style=\'file:black; font-size:10\'>' . 

	'object' . 

	'</text>\n";

    }


//end SVG document 
$svg_output .= "</svg> \n";	
file_put_contents('example1.svg', $svg_output);
?>

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.