기존 삽입된 한글 파일 내 이미지 문서 업데이트 후 재 저상 시 엑박으로 뜨는 문제

안녕하세요

웹 기안기 그림이 들어간 기안 폼 불러와 저장시 이미지가 저장 되다 안되다 하는 문제가 생겨 문의 드립니다.

특정 기안 문서에서만 엑박으로 제대로 저장이 안되는걸로 확인됩니다.

안녕하세요.
웹한글기안기의 경우 웹에서 렌더링이 가능한 이미지만 불러올 수 있습니다.
사용이 가능한 이미지는 jpg, gif, bmp, png 입니다.

간혹 확장자가 jpg이지만 실제로는 tif인 이미지가 존재하는데 이 경우 tif는 웹한글기안기에서 지원이 되지 않습니다.

원본 기안기 폼의 이미지가 해당 포맷인지 확인 부탁드립니다.

그리고, 혹시 웹한글기안기에서 불러왔을 때에 이미지가 정상인데, SaveAs API를 사용해서 저장했을 때 저장되지 않는 현상이면, 다시 댓글 부탁드립니다.

현재 사용하는 이미지는 jpg,gif 로 사용중이며
SaveAs 경우 현재 기안 본문 자체에서 이미지가 깨져나와 확인이 불필요해 보입니다

혹시 기안 내용 업데이트 저장시 GetTextFile를 사용하는데 이미지가 깨지는 문제는 어떤 이유인지 알수있을까요?

간단하게 코드 첨부 합니다

this.hwpCtrl.GetTextFile(“HWP”, “”, (data) => {
this.hwpData = data;
this.$emit(“input”, data);
});

GetTextFile() 및 SetTextFile()를 내부적으로 테스트했을 때 크게 문제는 없었습니다.

혹시 웹한글기안기에서 문서 오픈 후 깨진 이미지가 있을 경우, 해당 문서 원본을 첨부해주실 수 있으실까요?

신규사용자로 첨부파일 등록할수 없다고 해서 캡쳐로 대신합니다
상단 좌우 이미지 깨짐과 참조라인 빨간 날짜 부분에 추가로 이미지 삽입이 되어야 하는데 안됩니다.

발생 빈도는 대략 10건중 1~2건 정도 발생합니다.

혹시, API 사용시 비동기 방식으로 사용하고 계신가요?
Open, SaveAs, GetTextFile, SetTextFile, InsertPicture, InsertBackgroundPicture 등의 함수들은 모두 서버 쪽 연산이 필요하므로 비동기로 호출이 되고 있습니다.
(함수 실행결과를 별도의 callback함수를 등록하여 처리합니다.)

예를들어 InsertPicture()의 동작이 끝나지 않았는데 SaveAs()를 호출하면 이미지가 누락될 수 있습니다.

그리고, 사용하신 기안기 버전이 어떻게 되실까요?

웹한글기안기 url에 /info를 입력하시면 기안기버전정보가 나옵니다.
예) http://127.0.0.1/webhwpctrl/info

10.80.0.1397 버전사용 중이고 promise 형식으로 async/await 처리하고 있습니다.

아쉽게도 웹한글기안기에서는 Promise 개체를 지원하지 않습니다.

InsertPicture나 SaveAs()의 비동기동작 이후에도 내부로직을 동작시킨 후, 전달된 callback을 호출하는 형태인데,
만약 Promise를 사용하게 되면, 비동기동작 완료 후 내부로직이 동작되기전에 사용자코드가 동작할 가능성이 있습니다. (그 결과 이미지가 누락된 것으로 보입니다.)

불편하시겠지만 Promise를 사용하지 않고 callback을 등록하는 방식으로 사용하시기 바랍니다.

감사합니다.

답변주신 내용 참고하여 수정했으나 문제 해결이 되지 않아 질문 드립니다

InsertBackgroundPicture 이후 GetTextFile 호출시 전체 이미지가 깨지는걸로 보이며
호출시 이미지 불러오는 통신과 주소는 문제가 없습니다

작성하신 코드를 첨부해주실수 있을까요?
코드를 확인해보면 원인을 파악하는데 좀 더 도움이 될것 같습니다.

코드 첨부 드립니다

async actionSend() {
this.progress = true;
try {
const now = new Date();
const mm = ${now.getMonth() + 1}.padStart(2, “0”);
const dd = ${now.getDate()}.padStart(2, “0”);

    const date = `${now.getFullYear()}.${mm}.${dd}`;

    if (this.$refs.hwp.isExistField("발송승인일자")) {
      this.$refs.hwp.setFieldText("발송승인일자", date);
      this.$refs.hwp.moveToField("발송승인일자");
      const stamp = "https://intra.kfeedia.or.kr/groupware/SEND.gif";
      await this.$refs.hwp.InsertBackgroundPicture(stamp, 6);
    }

    await this.$refs.hwp.updateValue();
    await this.$rest.put(`${this.apiBase}/${encodeURIComponent(this.seq)}/content-send`, {
      body: this.data.content,
    });

    this.$buefy.dialog.alert({
      message: "발송을 승인했습니다.",
      onConfirm: () => this.goList(),
    });
  } catch (e) {
    this.$buefy.dialog.alert("발송승인 처리를 실패했습니다.");
  } finally {
    this.progress = false;
  }
}

-----hwpctrl.vue -------
InsertBackgroundPicture(url, fillOption) {
return new Promise((resolve, reject) =>
this.hwpCtrl.InsertBackgroundPicture(
“SelectedCell”,
url,
1,
fillOption,
0,
0,
0,
0,
(result) => {
if (result) {
resolve();
} else {
reject();
}
}
)
);
},
updateValue() {
return new Promise((resolve) => {
if (this.loading) {
resolve();
return;
}
if (!this.isModified()) {
resolve();
return;
}
this.hwpCtrl.GetTextFile(“HWP”, “”, (data) => {
this.hwpData = data;
this.$emit(“input”, data);
resolve();
});
});
},


this.hwpCtrl은 new hwpCtrl 할당을 위한 인스턴스로 참고 하시면 될 것 같습니다

답변이 나오면 좋겠네요

제 경우도 동일한 현상으로 웹에서 ocx를 사용했고
서식자체에 박혀있는(문서에포함) 이미지인데
A사용자가 작성한 문서(SaveAs)를 서버에 올리고 B사용자가 조회하고 출력하는데 위처럼 이미지가 깨진 경우 출력스크립트 중간에 SaveAs를 쓸 때 실패하여 false를 리턴합니다. 특이사항으로는 위 상황일때 2007 ocx는 성공이고 2018 ocx는 실패입니다