CreatePageImage 이미지파일 저장 문의

안녕하세요 cpp을 통해서 ole를 개발 공부를 하고 있는데 몇 가지 궁금증이 생겨서 질문하게 되었습니다.

  1. 한글 오토메이션에선 createpageimage로 "png"포맷을 지원하지 않는데, 이 부분은 개발 예정되어있나요?
  2. 현재 "png"로 바로 뽑히지 않아서 "bmp"를 생성한 후 "png"로 변환하는 과정을 거치고 있습니다. 아시다시피 bmp는 dpi 300으로 올라가면 굉장히 큰 저장공간을 차지하게 되는데, 이미지데이터로만 가지고있을 수 있는 방법이 있나요?

안녕하세요.

CreatePageImage 메소드는 PNG 포맷을 지원하지 않습니다.
개발하고자 하는 동작을 이미지로 저장하기 기능을 통해 우회 개발이 가능할 것 같습니다.

	CDHwpAction printAct = m_app.CreateAction(_T("PrintToImage"));
	CDHwpParameterSet set = printAct.CreateSet();

	printAct.GetDefault(set);
	set.SetItem(_T("Format"), COleVariant(_T("PNG")));
	set.SetItem(_T("FileName"), COleVariant(_T("c:\\test.png")));
	
	// 출력 범위 : 모두(0), 현재 쪽만(1), 현재부터(2), 현재까지(3), 사용자 정의(4), 선택한 쪽만(5), 현재 문서(연결 문서 미포함)(6)
	set.SetItem(_T("Range"), COleVariant((long)4));	// 사용자 정의
	set.SetItem(_T("RangeCustom"), COleVariant(_T("2")));	// 2페이지만 출력

	printAct.Execute(set);


문서 전체를 이미지로 저장하고자 한다면 간단하게 코드로 작성할 수 있음

hwpobject.SaveAs(_T("c:\\test.png"), COleVariant(_T("PNG")), COleVariant(_T("")));

감사합니다.

1개의 좋아요

추가 질문있습니다.

  1. 해당 코드가 잘 작동하는걸 확인했습니다. 다만 기존의 createpageimage와는 다르게 용량이 꽤 크게 배출하는데 의도한 것인가요?
  2. createpageimage 함수는 일부 문서에 대해서, (추정하기론, 첫 번째 장에 표가 있는 경우)제대로 작동하지 않고, 해당 문서의 일부를 지웟다가 되돌리기(undo)로 하고 저장하면 제대로 작동하는데 어떤 오류인가요? (일반적인 재저장으로 해결되지 않아요)
1개의 좋아요

Resolution 값을 통해 해상도 조정이 가능합니다.
기본값은 120이지만 아래처럼 96으로 조정하면 이미지 크기를 줄일 수 있습니다.

set.SetItem(_T("Resolution"), COleVariant((long)96));

그리고 일부 문서라고 하면 원인을 찾기가 어렵습니다.
파일을 링크해주시면 확인해볼 수 있을 것 같습니다.

감사합니다.


다른설정은 건들지 않았는데 제 환경에서 테스트했을땐 위와같이 나옵니다.

또한, 위의 코드를 통해 확인해본 결과, png로 저장했음에도 bmp파일로 배출이되어서 용량이 큰걸로 보이는데 기능이 만들어지지 않은건가요?

제가 위에서 잘 못 가이드를 해드렸네요.
포맷명은 문자열값이 아닌 정해진 상수값을 지정해야 하네요.

//set.SetItem(_T(“Format”), COleVariant(_T(“PNG”)));
set.SetItem(_T(“Format”), COleVariant((long)3));

	CDHwpAction printAct = m_app.CreateAction(_T("PrintToImage"));
	CDHwpParameterSet set = printAct.CreateSet();

	printAct.GetDefault(set);
	// 이미지 포맷 형식 : BMP(1), GIF(2), PNG(3), JPG(4), WMF(5), EMF(6)
	set.SetItem(_T("Format"), COleVariant((long)3));
	set.SetItem(_T("FileName"), COleVariant(_T("c:\\test.png")));
	
	// 출력 범위 : 모두(0), 현재 쪽만(1), 현재부터(2), 현재까지(3), 사용자 정의(4), 선택한 쪽만(5), 현재 문서(연결 문서 미포함)(6)
	set.SetItem(_T("Range"), COleVariant((long)4));	// 사용자 정의
	set.SetItem(_T("RangeCustom"), COleVariant(_T("2")));	// 2페이지만 출력

	printAct.Execute(set);
1개의 좋아요