공문서를 만들고 있는 상태에서, 하단에 붙는 양식이 끝으로 붙어야 합니다.

이전 질문에서,

아쉽게도 한글은 문단 단위의 편집을 지원해서 줄 단의 편집 정보를 반환하지 못합니다.

그러므로 문서 템플릿에 따라 경험적으로 한 줄에 몇 글자가 필요한지 수동으로 계산하여 판단해야 할 것 같습니다.
(예. 편집용지 A4, 좌/우여백 각 30mm, 폰트 함초롬바탕 10pt일 때 한줄에 약 43글자(한글기준) 차지함)

그 다음 문단의 길이를 얻어와서 비교 후 이어서 쓸지, 다음 문단으로 이동해서 쓸지 결정하면 될 것 같습니다.

문단의 길이는 다음과 같이 구하면 됩니다.

HwpCtrl.Run("MoveParaEnd"); // 문단의 끝으로 이동
HwpCtrl.GetPos().pos; // 캐럿의 위치

라고 답변을 주셨었습니다.
지금까지 이런저런 방법을 다 써보았는데도, 해결이 나지를 않네요.

온나라 시스템에서도 공문은 맨 하단으로 달라 붙습니다.
그 방법을 구현하고 있습니다…

정말 도와주십시오… 감사합니다.
글이 중간까지 애매하게 가있으면은, 다음 장 하단으로 붙어야 합니다.

비용이 드나요…? 아에 실현 불가능한건가요…?ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

1개의 좋아요

음, 간단히 해결할 수 있는 문제 같아서 의견 남겨봅니다.

  1. 문서 하단의 결문을 미리 삽입하지 마시고, 마지막(작성완료 후 제출시점)에 삽입하세요.
  2. 두문과 본문은 표(글자처럼취급X, 쪽 경계에서 나눔) 안에 작성되게 하시고,
    표의 높이값을 체크하셔서 두문/본문이 들어있는 표가 특정 높이를 넘었을 때에는
    결문을 다음페이지 하단에 삽입하는 코드(페이지추가 + 결문표 삽입)를 짜서 시도해보세요.
    두문본문 표가 한 페이지를 넘길 수도 있으니까, 한 페이지 높이로 나눈 나머지값을 활용하셔야 할 것 같아요.
    (결문 표는 "글자처럼 취급"을 해제하고, 하단 특정 위치에 삽입하시기만 하면 되고요.)

도움이 되었기를 바랍니다.

답변 감사합니다. 한글 문서의 엔터 또는 빈값이 아닌 형태로 되어야지 문서의 맨 마지막으로 이동이 되는데,

맨 하단으로 이동하는 run 이라든지 있을까요?

어떤걸 입력해도 작성된 문서 글 기준 마지막으로 이동합니다… 문서의 끝이 아닌…

안녕하세요.

Run(“MoveDocEnd”)를 사용하시거나
MovePos(3, 0, 0) // 문서의 끝, 0번째 para, 0번째 pos

를 사용하시면 될 듯 합니다.

더 궁금한 점 있으시면 언제든지 문의주세요.

MoveDocEnd 나 pos 로 잡으면은, 문서 작성된 기준 마지막으로 이동이 됩니다.
저는 아에 해당 문서의 맨 마지막으로 이동 하고 싶습니다 ㅠ…

1개의 좋아요

안녕하세요.

말씀하신 부분은 불가능할 듯 합니다…문단을 나누지 않고 하단으로 바로 이동하는 API는 제공하고 있지 않습니다.

원하시는 작업의 결과물이 정확하게 어떤 부분인지는 모르겠지만… 일단 첫 질문의 스크린샷 처럼 표를 문서의 하단에 두고 싶으신 거라면

  1. 공문서 형식의 템플릿 문서를 만들어두고, 해당문서를 불러와서 작업합니다.
  • 이때 하단에 삽입되는 표는

    의 속성값으로 지정되어야 아래쪽에 고정이 됩니다.
  • 그리고 각 셀에 필드명을 지정하고 해당 필드를 찾아가서 데이터를 삽입하는 방법이 있습니다.
  • 필드에 대한 설명은 한컴오피스 2022 한/글 도움말 을 참고하시고 API는 GetFieldList, MoveToField 등을 이용하시면 됩니다.
  1. 기존 작업하시는데서 본문 스크린샷처럼 표를 하단에 생성하고 싶으시다면 표를 생성하시고 ParameterSet에 ItemID 에 VertRelTo = 1(쪽 영역), VertAlign = 2(아래), VertOffset = 0(offset값) 3개를 주시면 하단에 고정됩니다.

더 궁금한 점 있으시면 언제든지 문의주세요.

1개의 좋아요

아래 함수를 참고해 주시기 바랍니다.
(jjeong님의 제안을 기반으로 작성하였습니다.)

def table_to_bottom():
	hwp.FindCtrl()
	pset = hwp.HParameterSet.HShapeObject
	hwp.HAction.GetDefault("TablePropertyDialog", pset.HSet)
	pset.VertAlign = hwp.VAlign("Bottom")
	pset.VertRelTo = hwp.VertRel("Page")
	pset.HSet.SetItem("ShapeType", 3)
	hwp.HAction.Execute("TablePropertyDialog", pset.HSet)
	hwp.Run("Cancel")

시연화면은 아래와 같습니다.

녹화_2023_11_29_21_08_28_787

격무에 고생하시는 것 같습니다.
건강 유의하시고, 부디 성공적으로 프로젝트 마무리하시기 바랍니다.
행복한 하루 되십시오!

헉…죄송합니다 제가 웹기안기로 올렸어야 했는데, 한글 컨트롤 목차로 올렸네요…

혹시… 델파이 소스 말고 웹기안기로는 컨트롤이 가능한걸까요?ㅠㅠ

정말정말 죄송합니다 ㅠㅠㅠㅠㅠ OTL…

2개의 좋아요

(제가 웹기안기를 다뤄보지 않아서 정확하지는 않지만ㅜ)
동일한 기능을 비슷한 코드로 구현할 수는 있는 것 같습니다.

저도 공공기관 일할 때, 공문서 작성을 해보면
본문 작성 후 결재상신 시점에
user138님께서 설명해 주신 것처럼
현재 쪽 하단이나, 다음 쪽 하단에 결문이 추가되는 것을 자주 봤거든요.
(어떻게든 한 쪽으로 만들어내려고 쇼를 했던 기억이 나네요ㅜ)

잘 해결하시면 좋겠습니다ㅋ

1개의 좋아요

좋은 말씀 감사합니다 ㅠㅠ 제가 그 쇼를 하고 있는것같습니다 ㅠㅠ
꼭 성공 해서 좋은 결과로 말씀드릴 수 있도록 하겠습니다!

지금은 야매일지는 모르겠지만 각주 기능을 통해서 사용하고 있습니다 ㅠ

2개의 좋아요

안녕하세요

카테고리 변경해드렸습니다.

웹한글기안기도 한글컨트롤과 크게 차이 없을듯합니다.

내일 담당자께서 확인 후 안내해 드릴 수 있도록하겠습니다

2개의 좋아요

안녕하세요.

@user16 님 예제를 기안기 스크립트로 작성하였습니다.
표의 셀에 “결문” 이라는 필드명을 지정하여 아래 스크립트 실행하시면 됩니다.

    HwpCtrl.MoveToField("결문");
    var action = HwpCtrl.CreateAction("TablePropertyDialog");
    var set = action.CreateSet();
    action.GetDefault(set);
    set.SetItem("VertAlign", 2); // VERT_REL_TO_BOTTOM
    set.SetItem("VertRelTo", 1); // HWPSO_VERT_REL_PAGE
    action.Execute(set);
3개의 좋아요

헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐헐

대박… bart 님 정말정말 감사합니다 복받으실거에요 정말로요 와…
와… 와…

감사합니다 감사합니다 ㅠㅠㅠ ㅁ암ㄹ아ㅡㅁ아랑ㅁ ㅠㅠㅠㅠㅠㅠ

2개의 좋아요