SaveAs 로 PDF 저장시 모아찍기 해제 관련 문의드립니다

안녕하세요 c# 으로 오토메이션을 구현하던 중 SaveAs 옵션을 사용하던 했을 때 문의사항이 있어 글 남겨봅니다.
특정 한글문서를 SaveAs 를 사용해 PDF 로 저장을 할 시 인쇄 옵션이 모아찍기가 되어 있으면 원래 한글파일에서는 한페이지씩 나오지만 PDF 문서에서는 한페이지에 2페이지 이상이 묶여서 나오고 있는 증상이 발생 합니다.

SaveAs(저장경로와파일명, “PDF”, 옵션) 을 사용해 저장을 하는데 일반적으로는 정상적으로 한페이지씩 출력됩니다.
그런데 특정 파일들은 모아찍기가 설정되어 저장된 PDF 파일들이 계속 2페이지이상이 묶여 한페이지로 출력되고 있다보니 이를 해결하는 옵션을 어떻게 설정해야 될지 문의드립니다.

2개의 좋아요

안녕하세요.

한글 최신 패치가 아닌 버전에서는 PDF 저장시 인쇄 옵션이 적용되어 출력되는 결함이 있습니다.
현재 사용 중이 버전이 어떨지는 모르겠으나
아래와 같이 PDF로 인쇄 방식으로 PDF를 저장하도록 회피안을 드릴 수 있을 것 같습니다.

(C++)

CDHwpAction act = hwp.CreateAction(_T("PrintToPDFEx"));
CDHwpParameterSet set = act.CreateSet();

act.GetDefault(set);

// 저장할 PDF 파일명
set.SetItem(_T("FileName"), COleVariant(_T("c:\\test.pdf")));

set.SetItem(_T("Collate"), COleVariant((long)1));
set.SetItem(_T("UserOrder"), COleVariant((long)0));
set.SetItem(_T("PrintToFile"), COleVariant((long)0));
set.SetItem(_T("NumCopy"), COleVariant((long)1));

// PDF 드라이버명 확인 필요
set.SetItem(_T("PrinterName"), COleVariant(_T("Hancom PDF")));

set.SetItem(_T("UsingPagenum"), COleVariant((long)1));
set.SetItem(_T("ReverseOrder"), COleVariant((long)0));
set.SetItem(_T("Pause"), COleVariant((long)0));
set.SetItem(_T("PrintImage"), COleVariant((long)1));
set.SetItem(_T("PrintDrawObj"), COleVariant((long)1));
set.SetItem(_T("PrintClickHere"), COleVariant((long)0));
set.SetItem(_T("PrintAutoFootnoteLtext"), COleVariant(_T("^f")));
set.SetItem(_T("PrintAutoFootnoteCtext"), COleVariant(_T("^t")));
set.SetItem(_T("PrintAutoFootnoteRtext"), COleVariant(_T("^P쪽 중 ^p쪽")));
set.SetItem(_T("PrintAutoHeadnoteLtext"), COleVariant(_T("^c")));
set.SetItem(_T("PrintAutoHeadnoteCtext"), COleVariant(_T("^n")));
set.SetItem(_T("PrintAutoHeadnoteRtext"), COleVariant(_T("^p")));
set.SetItem(_T("PrintFormObj"), COleVariant((long)1));
set.SetItem(_T("PrintMarkPen"), COleVariant((long)0));
set.SetItem(_T("PrintMemo"), COleVariant((long)0));
set.SetItem(_T("PrintMemoContents"), COleVariant((long)0));
set.SetItem(_T("PrintRevision"), COleVariant((long)1));
set.SetItem(_T("PrintBarcode"), COleVariant((long)1));
set.SetItem(_T("PrintPronounce"), COleVariant((long)0));

// 인쇄 방식
// 0 - 자동 인쇄, 1 - 공급용지에 맞추어, 2 - 나눠 찍기, 3 - 자동으로 모아 찍기
// 4 - 2쪽씩 모아 찍기, 5 - 3쪽씩 모아 찍기, 6 - 4쪽씩 모아 찍기, 7 - 6쪽씩 모아 찍기
// 8 - 8쪽씩 모아 찍기, 9 - 9쪽씩 모아 찍기, 10 - 16쪽씩 모아 찍기
set.SetItem(_T("PrintMethod"), COleVariant((long)0));

act.Execute(set);

나머지 인쇄 옵션은 원하시는 형식으로 지정하면 될 것 같습니다.

감사합니다.

3개의 좋아요

한글 2018 버전이며 공식홈페이지에서 최신 패치를 받아 설치한 상태에서 해당 현상이 발생하는데 받은 패치 파일은 20240624 패치입니다.

혹시 한글 버전을 올려야 될까요?

추가로 작업한 언어는 c#입니다.

2개의 좋아요

제가 잘 못 알고 있었네요. :sob:
최신 패치에서도 말씀하신 현상이 발생하는 것으로 확인했습니다.

3개의 좋아요

확인 감사합니다.
우회적인 방법으로 해결했네요…

GetTextFile 을 써서 본문 복사 후

clear 후 새문서를 만들어 SetTextFile 을 사용해 본문을 그대로 옮겨서 해결봤네요.
좋은 방법까진 아니지만 급한분들에게는 해결법이 되기를 바랍니다.

2개의 좋아요

완벽하게 제어되네요!
감사합니다^^

기존엔 PrintMethod 아이템을 몰라서
settings.xml의 PrintMethod 태그의 텍스트를
직접 0으로 바꿔서 해결한 적이 있었는데ㅜ
역시 적절한 방법이 있었군요ㅎ

2개의 좋아요

한컴pdf 가상프린터기로 pdf 문서를 생성하면 비규격 사이즈의 경우 원래 문서 크기가 아닌 걸로 저장됩니다.

저는 파이썬이긴 한데 기존 pdf로 저장하기 코드 앞에 아래와 같이 추가해주니까 '자동 인쇄’로 한 페이지씩 잘 저장이 됩니다.

            pset=hwp.HParameterSet.HPrint
            hwp.HAction.GetDefault("PrintToPDFEx", pset.HSet)
            pset.Collate = 1
            pset.UserOrder = 0
            pset.PrintToFile = 0
            pset.PrinterName = "Hancom PDF"
            pset.UsingPagenum = 0
            pset.ReverseOrder = 0
            pset.Pause = 0
            pset.PrintImage = 1
            pset.PrintDrawObj = 1
            pset.PrintClickHere = 0
            pset.PrintAutoFootnoteLtext = "^f"
            pset.PrintAutoFootnoteCtext = "^t"
            pset.PrintAutoFootnoteRtext = "^P쪽 중 ^p쪽"
            pset.PrintAutoHeadnoteLtext = "^c"
            pset.PrintAutoHeadnoteCtext = "^n"
            pset.PrintAutoHeadnoteRtext = "^p"
            pset.PrintFormObj = 1
            pset.PrintMarkPen = 0
            pset.PrintMemo = 0
            pset.PrintMemoContents = 0
            pset.PrintRevision = 1
            pset.PrintBarcode = 1
            pset.PrintPronounce = 0
            pset.PrintMethod=0

            hwp.HAction.Execute("PrintToPDFEx", pset.HSet)

대충 한컴pdf 프린터기를 선택해서 자동인쇄 함 날려주면서 자동인쇄로 프린터 설정을 옮기고(하지만 실제로 저장이나 프린터는 되지 않습니다)

pdf 저장하면서 한 쪽씩 저장되는 거 같습니다. ㅎ

1개의 좋아요