Insert관련 질의

안녕하세요. 여러 개의 웹한글 기안기를 동시에 켜놓은 상태입니다.
파일을 합쳐 한 개의 파일로 다운로드하고 싶습니다.

아래와 같은 방식이 가능할까요?
1.추가로 한개의 기안기를 display: none;으로 띄웁니다.
2.가지고 오고 싶은 기안기에 SaveAs로 downloadUrl을 받아옵니다. downloadUrl을 리스트로 저장합니다.
3.for문을 통해 반복 실행합니다.
for (let i = 0; i++)
HwpCtrl.Run(“MoveDocEnd”); //문서의 맨 끝으로 이동
HwpCtrl.Insert(link, “HWP”, “”, function(res) {console.log(res)}, null); //문서 삽입

Insert 결과는 true나 false를 반환한다고 하는데 실행하면 true를 반환하고, res 로그로 나타나지 않으며 한참뒤에 gateway Timeout이 나옵니다.

질문을 정리하면
SaveAs로 받은 Url로는 Insert가 불가한지 문의드립니다.

폐쇄환경에서 웹한글기안기를 사용하고 있어, 데모 버전을 폐쇄환경에서 사용하는 것과 유사하게 구성해서 테스트 중이였는데, 아래의 글을 발견해서 추가로 문의드립니다.

insert 명령이 전달되면 url을 open하는 과정이 있는데 데모페이지의 경우 이게 차단되어 insert가 안되고 504 에러를 반환하는게 맞을까요?

1개의 좋아요

안녕하세요 ^^
웹한글 기안기에서 url을 가지고 open을 하는 경우 서버에서 해당 url의 파일을 받아 처리하는것으로 알고있습니다.
그러기 떄문에 웹한글 기안기 서버에서 해당 url에 대한 접근이 가능해야할것 같습니다.
SaveAs로 받은 URL 경로가 웹한글 기안기 서버에서 접근이 가능하다면 Insert가 가능할것 같습니다.
감사합니다.

1개의 좋아요

Insert API 의 경우 비동기로 동작을 합니다.
때문에 for 문을 돌며 API를 호출하면 문서 끼워넣기 순서를 보장할 수 없습니다.
callback 함수를 사용하여 동작 완료된 후 다음 동작이 이루어 지도록 수정되어야 할 것 같습니다.

개발자센터 데모 사이트를 사용하신다면 외부 문서 오픈은 불가능 하기 때문에
이로인해 timeout이 발생하는것 같습니다.

1개의 좋아요

url을 리스트로 가져와 아래와 같은 구조로 해결하였습니다.

var data = ([필드이름, Url], [필드이름, Url]...)
HwpCtrl.MoveToField(data[0][0], true, true, false);
HwpCtrl.Insert(data[0][1], "HWP", function() {
	HwpCtrl.MoveToField(data[1][0], true, true, false);
	insert(data[1][0], "HWP", function() {}, null)
}, null)

이런 구조로도 사용이 가능할 것 같은데 3개밖에 없어서 그냥 하드코딩했네요.

function process(index) {
        if (index >= data.length) return;  // 모든 항목을 처리했으면 종료

        var fieldName = data[index][0];
        var url = data[index][1];

        HwpCtrl.MoveToField(fieldName, true, true, false);
        HwpCtrl.Insert(url, "HWP", function() {
            process(index + 1);
        }, null);
    }
    process(0);
2개의 좋아요