! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

FlexGrid를 PDF로 내보낼 때 한글 폰트를 적용하는 방법 > 온라인 스터디

본문 바로가기

FlexGrid FlexGrid를 PDF로 내보낼 때 한글 폰트를 적용하는 방법

페이지 정보

작성자 GrapeCity 작성일 2021-09-13 09:54 조회 1,690회 댓글 0건

본문

Wijmo의 FlexGrid에서는 Excel(xlsx) 뿐만 아니라 PDF와 같은 양식으로도 데이터를 내보낼 수 있습니다.

Excel 내보내기에 기능에 대해서 알아보기 위해서는, "서로 다른 멀티헤더 형식을 가진 다중 시트를 엑셀로 저장" 온라인 스터디 자료를 참고해 주세요.


이는 FlexGrid에서 PDF로 내보내는 기능을 제공하는 FlexGridPdfConverter클래스의 export 메서드를 이용하여 FlexGrid를 내보낼 수 있습니다. 


다만, FlexGrid에 입력된 한글이 PDF로 내보낸 뒤, 가독성을 높이고 한글 폰트 미지원으로 인하여 파일에서 깨지지 않고 정상적으로 보여지기 위해서는 별도의 과정을 필요로 합니다. 


아래 튜토리얼을 통해 FlexGrid를 PDF로 내보낼 때 한글 폰트를 적용하는 방법에 대해서 알아 보도록 하겠습니다.

 

실제로 구현된 화면은 아래와 같으며, 상단의 탭을 통해 소스코드를 확인하고 바로 수정해볼 수 있습니다.

샘플 링크 : https://codesandbox.io/s/wijmo-pdf-hangeul-ponteu-jeogyong-0wx7n?file=/index.html:1364-1519

 

Wijmo PDF 내보내기 할 때 한글 폰트 적용하기



1. 먼저 Wijmo 컨트롤을 사용하기 위해 HTML의 head 태그 안에 레퍼런스를 추가해줍니다.

FlexGrid 컨트롤을 PDF로 내보내기 위해서는 두 개의 추가 모듈을 어플리케이션에 포함해야 합니다:

  • wijmo.pdf.js: PDF 파일을 저장하고 로드하는 일반적인 방법을 제공합니다.
  • wijmo.grid.pdf.js: wijmo.pdf.js를 사용하여 FlexGrid 컨트롤을 PDF로 저장하는 FlexGridPdfConverter 클래스를 포함합니다.

FlexGrid를 PDF로 내보내려면,FlexGridPdfConverter.export 메서드를 호출하고 내보낼 그리드에 대한 참조, 파일 이름, 페이지 형식, 머리글과 바닥글, 스타일을 정의하는 추가 옵션을 제공합니다.

<link rel="stylesheet" href="https://cdn.grapecity.com/wijmo/5.20212.808/styles/wijmo.min.css" />
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"/>
    
<script src="https://cdn.grapecity.com/wijmo/5.20212.808/controls/wijmo.min.js"></script>
<script src="https://cdn.grapecity.com/wijmo/5.20212.808/controls/wijmo.grid.min.js"></script>
<script src="https://cdn.grapecity.com/wijmo/5.20212.808/controls/wijmo.pdf.min.js"></script>
<script src="https://cdn.grapecity.com/wijmo/5.20212.808/controls/wijmo.grid.pdf.min.js"></script>


2. Wijmo 컨트롤을 DOM 요소에 할당할 'flexgrid'라는 id를 가진 div 요소를 HTML 파일에 생성합니다.

  • body 태그 아래에 아래와 같이 export 이벤트를 처리할 버튼 또한 추가하여 주시길 바랍니다.
<!-- Export button -->
<button class="btn btn-default" id="btnExport">Export</button>
<!-- FlexGrid -->
<div id="flexGrid" class="grid"></div>


3. script 태그 안에 그리드에 추가할 랜덤 데이터 함수를 생성합니다.

function getData(count) {
        const countries = [
          "미국",
          "독일",
          "영국",
          "일본",
          "이탈리아",
          "그리스"
        ];
        const products = ["위젯", "가젯", "하키"];
        //
        let data = [];
        for (let i = 0; i < count; i++) {
          let countryId = Math.floor(Math.random() * countries.length),
            productId = Math.floor(Math.random() * products.length);
          let item = {
            id: i,
            country: countries[countryId],
            product: products[productId],
            discount: Math.random() / 4,
            active: i % 4 == 0
          };
          data.push(item);
        }
        return data;
}


4. 그리드의 인스턴스를 생성하고 itemsSource에 데이터를 할당해줍니다.

let flexGrid = new wijmo.grid.FlexGrid("#flexGrid", {
          autoGenerateColumns: false,
          selectionMode: wijmo.grid.SelectionMode.ListBox, //그리드 선택 모드
          headersVisibility: wijmo.grid.HeadersVisibility.All, //헤더 표시
          columns: [ // 그리드 열 설정
            { header: "ID", binding: "id" },
            { header: "Country", binding: "country" },
            { header: "Product", binding: "product" },
            { header: "Discount", binding: "discount", format: "p1" },
            { header: "Active", binding: "active" }
          ],
          itemsSource: getData(10)
        });

 
위의 과정으로 일반적인 그리드가 생성 되었습니다. 이제 그리드를 PDF로 내보내기 및 한글 적용 방법에 대해 단계별로 설명 드리도록 하겠습니다.

1. 위의 2번 단계에서 설정한 export 버튼에 addEventLister로 click 이벤트를 추가 해줍니다.
document.querySelector("#btnExport").addEventListener("click", () => {
          (...)
      })

2. 클릭 이벤트 내에 FlexGridPdfConverter 클래스의 메서드를 추가 해줍니다.

  • export 함수의 첫 번째 매개변수는 내보낼 FlexGrid 인스턴스, 두 번째 매개변수는 파일 이름, 마지막으로 export 설정입니다.
  • 아래 export 설정에서 documentOptions를 통해 header와 footer에 페이지 번호를 지정해 줍니다.
document.querySelector("#btnExport").addEventListener("click", () => {
          wijmo.grid.pdf.FlexGridPdfConverter.export(flexGrid, "FlexGrid.pdf", {
            documentOptions: {
              header: {
                declarative: {
                  text: "\t&[Page]\\&[Pages]"
                }
              },
              footer: {
                declarative: {
                  text: "\t&[Page]\\&[Pages]"
                }
              }
            },
          });
        });
      }
 

3. 본격적인 한글 폰트 적용을 위해서 우선 문서에 내장된 사용자 정의 폰트의 배열인 embeddedFonts에 PDF에 내장할 폰트에 대해 설정합니다.

  • embeddedFonst 내에서는 각각 글씨체 이름, 스타일, 굵기, 글씨체 소스 등을 설정하고 있습니다.
  • source에는 아래와 같이 폰트 파일(.ttf)이 위치한 경로를 설정해 주시면 됩니다.
document.querySelector("#btnExport").addEventListener("click", () => {
          wijmo.grid.pdf.FlexGridPdfConverter.export(flexGrid, "FlexGrid.pdf", {
           (..)
            //내장된 폰트 정보
            embeddedFonts: [
              {
                source: "https://assets.codepen.io/975719/BMHANNAPro.ttf",
                name: "BMHANNAPro",
                style: "normal",
                weight: "normal",
                sansSerif: true
              }
            ],
    
          });
        });

샘플의 경우, 폰트 파일의 소스가 별도로 저장되기 때문에 주소로 표시하였습니다.

아래와 같이 로컬에 폰트 파일을 적용하는 경우, 절대 경로로 글씨체의 소스를 설정하실 수 있습니다.

embeddedFonts: [
  {
    source: "./assets/Fonts/Dotum/Dotum.ttf",
   }
],

 

4. 마지막으로 내장된 폰트를 PDF로 내보내게 될 때 적용될 스타일을 나타내는 styles 속성의 cellStyle에 embeddedFonts로 내장된 폰트를 지정해주시면 완료됩니다.
document.querySelector("#btnExport").addEventListener("click", () => {
          wijmo.grid.pdf.FlexGridPdfConverter.export(flexGrid, "FlexGrid.pdf", {
           (..)
            //내장된 폰트 정보
            embeddedFonts: [
            (..)
            ],
            styles: {
              cellStyle: {
                backgroundColor: "#ffffff",
                borderColor: "white",
                //font-family 지정
                font: {
                  family: "BMHANNAPro"
                }
              },
              altCellStyle: { //FlexGrid 홀수 행에 적용되는 셀 스타일
                backgroundColor: "#f9f9f9"
              },
              groupCellStyle: { //그룹화된 행에 적용되는 셀 스타일
                backgroundColor: "#dddddd"
              },
              headerCellStyle: { //그룹화된 헤더에 적용되는 셀 스타일
                backgroundColor: "#eaeaea"
                color:"white"
              }
            }
          });
        });
      })

Export 전 기본 그리드와 Export 후 그리드를 비교해보시길 바랍니다. Export 전, 후로 폰트가 변경되신 것을 확인하실 수 있습니다.

<Export 전 기본 그리드>

<PDF Export 후 글꼴이 변경된 그리드>



이상으로 PDF 내보내기 할 때 한글을 적용하는 방법에 대한 튜토리얼을 끝마쳤습니다. Wijmo FlexGrid에서 한글이 적용된 PDF를 마음껏 내보내시길 바랍니다! FlexGrid의 PDF 이외에 Wijmo에서 제공하는 PDF와 폰트 문서에 대해서 궁금하시다면 여기를 클릭하여 주시길 바랍니다.




지금 바로 Wijmo를 다운로드하여 직접 테스트해보세요!

 
  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.