neolord0 / hwplib

hwp library for java
Apache License 2.0
451 stars 142 forks source link

얼마전에 질문 드렸던 사람인데요 #234

Closed kwonhyun closed 1 year ago

kwonhyun commented 1 year ago

일단 증상만 말씀드릴려구요...이슈가 아니라서 여기다가 이렇게 쓰기엔 좀 그렇네요.ㅎㅎㅎ 일전에 특정 테이블의 셀안에 있는 테이블의 셀을 못 찾는다고 문의 드렸었는데요. 잘 되신다길래 해봤더니 누름틀은 잘 찾아오는데 테이블의 셀은 Section바로 아래의 테이블에서만 찾더라구요.. (아마 누름틀로 보신게 아닌가 싶어요...또 아니면 정말 죄송한데...^^;;;;)

그래서 일단 현재 소스를 가지고 제가 응용해서 할 수 있을까가 궁금해서 여쭤봤어요.. 단순히 생각하면 테이블만나면 끝까지 순회하면서 찾아내면 되지 않을까 싶은데 이게 될 것인지 확신이 안 서서 여쭤본겁니다..^^; (제가 이 소스를 이해하지 못 한 상태이고 한글 구조도...봐도 이해가 잘 안 가는데 맘은 앞서고 해서....ㅎㅎ) 일단 좀 해볼게요..^^; 감사합니다~

neolord0 commented 1 year ago

안녕하세요. 사용한 함수의 종류나 hwp 파일의 구조가 다르면 테스트할 때 다른 결과가 나옵니다. 테스트 하신 소스랑 hwp파일을 올려 주시면 제가 테스트 하는데 도움이 될 거 같습니다.

kwonhyun commented 1 year ago

아..늦어서 죄송합니다. 여기다가 커밋을 하라는 말씀이신가요?

nameofSEOKWONHONG commented 1 year ago

아..늦어서 죄송합니다. 여기다가 커밋을 하라는 말씀이신가요?

개발중인 repository를 링크로 걸거나, 해당되는 소스 부분을 직접 기입하시면 될 것 같습니다.

neolord0 commented 1 year ago
스크린샷 2023-11-16 오전 8 28 26

이 이미지의 클립 모양의 버튼을 누르면 파일 첨부할 수 있습니다.

kwonhyun commented 1 year ago

필드값 구하기 한글 파일 첨부가 안되서 이미지로 첨부했습니다. 제가 사용한 코드는 Inserting_imageCell.java에 있던 ArrayList cellList = CellFinder.findAll(hwpFile, "( TEST 1_)"); 입니다. 이 때 cellList가 Null이 되었습니다.

그냥 단순한 표 하나 만들고 나서 표의 cell에 이름 부여하고 이미지를 넣으면 되는데 제가 드린 이미지와 같이 표의 셀에 다시 테이블을 만들고 셀필드명 설정 후 해당 필드에 이미지를 넣으려고 했을 때 이미지가 들어가지 않아서 보니까 중첩된 표의 셀은 찾아오지 못 하더라구요.

누름틀의 경우는 해당 누름틀 안에 있는 값은 제대로 가져오는데 셀은 셀 자체도 찾아오지 못하니까 값은 더더욱 못 구하게 되는 거우요..

그런데 neolord0님께서는 된다고 하시니 제가 잘 못 썼을 거 같긴 하지만 어떤 걸 사용해야 될지 잘 모르겠네요..^^;;;;;

neolord0 commented 1 year ago

찾는 방법이 여러가지 라.. 이전에 말씀드린 것과 다르게 문제가 있더군요. 말씀해 주신 CellFinder.findAll()로 테스트 해보니..
셀 안쪽에 개체들을 검색하지 않은 것으로 확인됐습니다. 수정해서 올렸으니.. 받아서 테스트 해보세요..

kwonhyun commented 1 year ago
public static ArrayList getCellFieldText(HWPFile hwpFile, String fieldName) {
        ArrayList celList = CellFinder.findAll(hwpFile, fieldName);
        ArrayList fileValueList = new ArrayList<>();
        int i = 0;
        for (Cell cell : celList) {
            Paragraph firstPara = cell.getParagraphList().getParagraph(0);
            ParaText paraText = firstPara.getText();
            String content = "";
            if (paraText != null) {
                try {
                    content = paraText.getNormalString(i);
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }
                if (null != content && !"".equals(content)) {
                    fileValueList.add(content);
                }
            }
        }

        return fileValueList;
    }

이렇게 해서 모든 필드들의 값을 가져오게 했더니 잘 됩니다..^^; 방법이 이게 맞을......것 같다는 생각에 했지만요..^^; 이제 다시 응용해보기로 해야겠네요.. 도와 주셔서 감사합니다~^^;