Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

문단 정렬과 표 대각선 문의 드립니다. #36

Closed
boojongmin opened this issue Nov 18, 2018 · 5 comments
Closed

문단 정렬과 표 대각선 문의 드립니다. #36

boojongmin opened this issue Nov 18, 2018 · 5 comments

Comments

@boojongmin
Copy link

안녕하세요 한글 관련 프로젝트를하는중에 @neolord0 님의 라이브러리로 많은 도움이 되고 있습니다. 감사합니다. ^^

문의 드릴 사항 2가지 있습니다.

  1. 글자 우측 정렬
  • 우측정렬이 있는 문서를 읽고 읽어들인 객체를 그대로 파일로 쓰고 한글 문서로 불러보면 우측정렬이 없어지는 이슈가 있습니다.
  1. 표 대각선
bf.setDiagonalSort(BorderType.Solid);
bf.setDiagonalThickness(BorderThickness.MM0_5);;
bf.getDiagonalColor().setValue(0x0);

만들어주신 샘플을 참고하여 위의 소스를 넣어봤는데 대각선이 나오지 않아서 무엇을 더 추가하면 될지 여쭙고 싶습니다. 그리고 한글 문서를 보면 대각선 종류가 방향도 있던데 방향 설정하는 메서드를 찾지를 못해서 함께 문의 드리고 싶습니다.

많은 시간 투자해서 hwp 라이브러리 만들어주셔서 감사합니다.

@neolord0
Copy link
Owner

테스트 하신 코드를 올려 주시면... 수정해 드리겠습니다.

@boojongmin
Copy link
Author

boojongmin commented Nov 19, 2018

피드백 감사합니다. ^^

1번 질문은 아래의 코드로 테스트하였습니다.

String filename = "classpath:hwp_in/test.hwp";
        File file = resourceLoader.getResource(filename).getFile();
        HWPFile hwpFile = HWPReader.fromFile(file.getAbsolutePath());
        HWPWriter.toFile(hwpFile, "hwp_out/test.hwp");

hwp_in.zip
위 두개의 파일을 이름을 바꿔가며 테스트했는데 둘다 원본과 다른 정렬을 가지게 되었습니다.

2. 표대각선 부분은 이렇게 작성했습니다.

    private int createBorderFillIDForCell(CellBorderFillModel m) {
        BorderFill bf =  hwpFile.getDocInfo().addNewBorderFill();
        bf.getProperty().set3DEffect(false);
        bf.getProperty().setShadowEffect(false);
        bf.getProperty().setSlashDiagonalShape(SlashDiagonalShape.None);
        bf.getProperty().setBackSlashDiagonalShape(BackSlashDiagonalShape.None);
        bf.getLeftBorder().setType(BorderType.valueOf((byte)1));
        bf.getLeftBorder().setThickness(BorderThickness.valueOf((byte)0));
        bf.getLeftBorder().getColor().setValue(0x0);
        bf.getRightBorder().setType(BorderType.valueOf((byte)1));
        bf.getRightBorder().setThickness(BorderThickness.valueOf((byte)0));
        bf.getRightBorder().getColor().setValue(0x0);
        bf.getTopBorder().setType(BorderType.valueOf((byte)1));
        bf.getTopBorder().setThickness(BorderThickness.valueOf((byte)0));
        bf.getTopBorder().getColor().setValue(0x0);
        bf.getBottomBorder().setType(BorderType.valueOf((byte)1));
        bf.getBottomBorder().setThickness(BorderThickness.valueOf((byte)0));
        bf.getBottomBorder().getColor().setValue(0x0);

        bf.setDiagonalSort(BorderType.Solid);
        bf.setDiagonalThickness(BorderThickness.MM0_5);
        bf.getDiagonalColor().setValue(0x0);

        bf.getFillInfo().getType().setPatternFill(true);
        bf.getFillInfo().createPatternFill();
        PatternFill pf = bf.getFillInfo().getPatternFill();
        pf.setPatternType(PatternType.None);
        pf.getBackColor().setValue(-1);
        pf.getPatternColor().setValue(-1);

        return hwpFile.getDocInfo().getBorderFillList().size();
    }

제가 위의 코드로 동작시켜서 나온 테이블의 셀/테두리/배경 메뉴에서
대각선 탭을 살펴보면

image

위의 이미지처럼 대각선 값은 활성화되어있는데 빨간색으로 표시해둔 부분에 선택이 안되어있어서 대각선이 안생겨있는 것을 확인했습니다.
선택해보면 셀안에 대각선이 나타나는 것을 확인할 수 있었습니다.

감사합니다. ^^

@neolord0
Copy link
Owner

일단 대각선에 대한 질문에 대한 답입니다.
한글은 대각선의 모양(종류, 굵기, 색)이 있고, 대각선의 종류라는 게 있습니다.
밑에 있는 하향 대각선 종류와 상향 대각선의 종류를 설정해야 합니다.
이 속성은 다음 함수로 설정할 수 있습나다.
bf.getProperty().setSlashDiagonalShape();
bf.getProperty().setBackSlashDiagonalShape();
이 함수에 적절한 값을 세팅하면 위의 그림에서 표시한 속성이 설정됩니다.

@neolord0
Copy link
Owner

그리고, 글자 정렬이 바뀌는 문제는...
보니까.. 보내주신 한글 파일을 보니까.. 제가 생각했던 것과 다르게 저장되있던데... 최종 저장한 프로그램이 한글이 맞나요? 한글 버젼이 어떻게 되시는지요 ??
테스트 해보니까.. 문단 모양 객체가 파일 내부에 있는 개수보다 하나 덜 만들어져서
문단에서 링크해서 사용하는 문단 모양 객체의 순번이 하나씩 밀린 것 같습니다.

추측하건데, 한글 프로그램은 이런 경우 보정을 하는 거 같습니다.
그래서 문제없이 나오는 데, 제가 만든 프로그램은 이런 예외상황을 예측하지 못했던 거 같습니다.

보정 해주는 알고리즘을 넣어서 새로 올렸습니다.
받아서 다시 테스트 해보세요.

@boojongmin
Copy link
Author

  1. 제가 그쪽 속성을을 미처 확인하지 못했네요;; 감사합니다.
  2. hwp 파일을 연 프로그램은 한글 2018이였습니다.
    수정해주신 소스를 적용해보니
    문단이 정상적으로 나오는 것을 확인했습니다.

감사합니다. ^^

문서포멧도 읽어보고 컨트리뷰팅도 해보려고했는데
수이 눈에 안들어오고 간단치 않아서 난감해하고 있었는데...
정말 감사합니다. ^^

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants