SpringBoot/java/한글파일(.hwp) 이미지 데이터 바인딩하기

25gStroy·2022년 9월 5일
0

JAVA

목록 보기
15/18

이글과 연결되는 내용이니 먼저 보고 와주시면 감사하겠습니다.
SpringBoot/한글파일(.hwp) 데이터 바인딩 후 다운로드 하기

hml 파일에 이미지 바인딩 하기

BINDATALIST에 bindata 등록

hml에 이미지를 등록하기 위해서 위와 같이 BINDATALIST 태그를 찾아서 등록을 해 주어야 합니다
binData에 값이 결국 바인딩될 id값이 됩니다.

<BINDATALIST Count="2">
        <BINITEM BinData="1" Format="png" Type="Embedding"/>
        <BINITEM BinData="2" Format="png" Type="Embedding"/>
</BINDATALIST>

bindata 등록

위에서 list에 등록 하셨다면 파일 가장 하단에 다음과 같은 태그를 작성해서 myTag로 위치를 지정한다음 이미지파일을 base64로 인코딩해서 replace시켜주면 끝입니다.

<BINDATA Encoding="Base64" Id="2" myTag="image"></BINDATA> 

list에 등록해 놓은 "2" 와 같은 값

java 코드

자세한 코드는 위 링크에 있습니다.
해당 글에서는 이미지 바인딩하는 부분만 작성돼 있습니다.

            String utf8String = Base64.getEncoder().encodeToString(imageBytes);


            NodeList imageBind = root.getElementsByTagName("BINDATA");
            for (int i = 0; i < imageBind.getLength(); i++) {
                Node node = imageBind.item(i);
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element ele = (Element)node;
                    if (!ele.getAttribute("myTag").equals("")) {
                        if ("image".equals(ele.getAttribute("myTag"))) {
                            ele.setTextContent(utf8String);
                        }
                    }
                }
            }

주의 사항

Size 속성을 xml태그에 포함시키거나 setAttreibute로 설정하면 안됩니다.
제가 이글을 정리하게 된 이유인데 ele.setTextContent(utf8String);를 할때 처음에 size값도 설정해 줘야하는줄 알고 ele.setAttreibute로 size값을 직접 지정해 주었었습니다. 하지만! 그렇게 하면 이미지가 정상적으로 출력안돼서 한참을 해매었으니 저같은 분이 생기지 않았으면 좋겠습니다..

profile
애기 개발자

0개의 댓글