fix : svg파일 색상 변경 기능 추가

main
이범준 2 years ago
parent 2ab6cdd943
commit 9f8cf82888

@ -0,0 +1,119 @@
package kr.xit.fims.framework.biz.cmm.web;
import cokr.xit.foundation.web.AbstractController;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.net.URISyntaxException;
import java.net.URLDecoder;
@Controller
@RequestMapping(name = "", value = "/mresources")
public class ResourceController extends AbstractController {
@GetMapping(name = "", value = "/**")
public void modifySvg(HttpServletRequest request, HttpServletResponse response) throws URISyntaxException, IOException, ParserConfigurationException, SAXException {
String requestURI = request.getRequestURI().toString();
String filepath = requestURI.replace("/mresources","/resources");
filepath = URLDecoder.decode(filepath);
filepath = request.getSession().getServletContext().getRealPath(filepath);
filepath = filepath.replace("\\","/");
filepath = "file:///"+filepath;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document document = documentBuilder.parse(filepath);
Element root = document.getDocumentElement();
NodeList nodeList = root.getChildNodes();
try {
String modify = request.getParameter("modify");
if(modify == null || modify.equals("")){
} else if(modify.equals("active")){
updateTagFillColor(nodeList, "green");
} else if(modify.equals("alert")){
updateTagFillColor(nodeList, "red");
}
String str4 = DocumentToString(document);
byte[] bytes = str4.getBytes();
response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
response.setHeader(HttpHeaders.CONTENT_TYPE, "image/svg+xml");
response.setHeader(HttpHeaders.CONNECTION, "keep-alive");
response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
response.setHeader("Pragma", "no-cache");
response.setHeader(HttpHeaders.CACHE_CONTROL, "no-cache, must-revalidate");
response.setDateHeader(HttpHeaders.EXPIRES, 0);
response.setHeader(HttpHeaders.CONTENT_LENGTH, Integer.toString(bytes.length));
response.setContentType("image/svg+xml");
OutputStream os = response.getOutputStream();
os.write(bytes);
os.flush();
os.close();
} catch (Exception e){
}
}
public static String DocumentToString( Document doc )
{
try
{
StringWriter clsOutput = new StringWriter( );
Transformer clsTrans = TransformerFactory.newInstance( ).newTransformer( );
clsTrans.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "no" );
clsTrans.setOutputProperty( OutputKeys.METHOD, "xml" );
clsTrans.setOutputProperty( OutputKeys.INDENT, "yes" );
clsTrans.setOutputProperty( OutputKeys.ENCODING, "UTF-8" );
clsTrans.transform( new DOMSource( doc ), new StreamResult( clsOutput ) );
return clsOutput.toString( );
}
catch( Exception ex )
{
return "";
}
}
private void updateTagFillColor(NodeList nodeList, String newFillColor) {
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
NamedNodeMap namedNodeMap = node.getAttributes();
if(namedNodeMap != null && namedNodeMap.getLength() > 0){
for (int j = 0; j < namedNodeMap.getLength(); j++) {
Node namedNode = namedNodeMap.item(j);
if (namedNode.getNodeName().equalsIgnoreCase("fill")) {
namedNode.setNodeValue(newFillColor); // Change the color of the fill attribute.
}
}
}
}
}
}

@ -1,47 +1,81 @@
.svg-cctv-fixed:before { .svg-cctv-fixed:before {
content : url("../../../../image/fims/framework/고정형cctv.svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/고정형cctv.svg");
--bs-active : url("../../../../../mresources/image/fims/framework/고정형cctv.svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/고정형cctv.svg?modify=alert");
} }
.svg-cctv-drive:before { .svg-cctv-drive:before {
content : url("../../../../image/fims/framework/이동형cctv.svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/이동형cctv.svg");
--bs-active : url("../../../../../mresources/image/fims/framework/이동형cctv.svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/이동형cctv.svg?modify=alert");
} }
.svg-crackdown-road:before { .svg-crackdown-road:before {
content : url("../../../../image/fims/framework/도보단속.svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/도보단속.svg");
--bs-active : url("../../../../../mresources/image/fims/framework/도보단속.svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/도보단속.svg?modify=alert");
} }
.svg-crackdown-minwon:before { .svg-crackdown-minwon:before {
content : url("../../../../image/fims/framework/민원(즉시단속).svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/민원(즉시단속).svg");
--bs-active : url("../../../../../mresources/image/fims/framework/민원(즉시단속).svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/민원(즉시단속).svg?modify=alert");
} }
.svg-target-lvy:before { .svg-target-lvy:before {
content : url("../../../../image/fims/framework/등록대상.svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/등록대상.svg");
--bs-active : url("../../../../../mresources/image/fims/framework/등록대상.svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/등록대상.svg?modify=alert");
} }
.svg-target-transfer:before { .svg-target-transfer:before {
content : url("../../../../image/fims/framework/이첩대상.svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/이첩대상.svg");
--bs-active : url("../../../../../mresources/image/fims/framework/이첩대상.svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/이첩대상.svg?modify=alert");
} }
.svg-sendstat-guide:before { .svg-sendstat-guide:before {
content : url("../../../../image/fims/framework/계도장 발송현황.svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/계도장 발송현황.svg");
--bs-active : url("../../../../../mresources/image/fims/framework/계도장 발송현황.svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/계도장 발송현황.svg?modify=alert");
} }
.svg-sendstat-before:before { .svg-sendstat-before:before {
content : url("../../../../image/fims/framework/사전통보 발송현황.svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/사전통보 발송현황.svg");
--bs-active : url("../../../../../mresources/image/fims/framework/사전통보 발송현황.svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/사전통보 발송현황.svg?modify=alert");
} }
.svg-sendstat-nop:before { .svg-sendstat-nop:before {
content : url("../../../../image/fims/framework/고지서 발송현황.svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/고지서 발송현황.svg");
--bs-active : url("../../../../../mresources/image/fims/framework/고지서 발송현황.svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/고지서 발송현황.svg?modify=alert");
} }
.svg-opn-rcp:before { .svg-opn-rcp:before {
content : url("../../../../image/fims/framework/접수.svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/접수.svg");
--bs-active : url("../../../../../mresources/image/fims/framework/접수.svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/접수.svg?modify=alert");
} }
.svg-opn-decision:before { .svg-opn-decision:before {
content : url("../../../../image/fims/framework/수용_미수용.svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/수용_미수용.svg");
--bs-active : url("../../../../../mresources/image/fims/framework/수용_미수용.svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/수용_미수용.svg?modify=alert");
} }
.svg-opn-selfdrop:before { .svg-opn-selfdrop:before {
content : url("../../../../image/fims/framework/자진취하.svg"); --bs-origin : url("../../../../../mresources/image/fims/framework/자진취하.svg");
--bs-active : url("../../../../../mresources/image/fims/framework/자진취하.svg?modify=active");
--bs-alert : url("../../../../../mresources/image/fims/framework/자진취하.svg?modify=alert");
}
[class^=svg-]:before {
content : var(--bs-origin);
}
[class^=svg-].active-svg:before {
content : var(--bs-active);
}
[class^=svg-].alert-svg:before {
content : var(--bs-alert);
} }
Loading…
Cancel
Save