PDF 내보내기와 폰트사용법
PDF 폰트
PDF 형식으로 내보내기 위해 리포트 양식을 디자인하면서 사용된 폰트가 필요할 수 있습니다. 특히 한글 문자열이 포함된 리포트 양식은 반드시 한글 폰트를 포함해야 합니다.
RealReport의 PDF 내보내기 기술은 PDFKit 라이브러리를 사용하고 있습니다. 현재 RealReport 버전(v1.1)에서는 폰트파일의 타입에 제약을 두고 있으며 내보내기를 위한 폰트객체의 컨텐츠 타입은 base64로 인코딩된 문자열로 변환하여 넘겨주어야 합니다. 즉, .ttf
, .woff
, woff2
형식의 폰트 파일을 base64로 변환하여 PdfFont 타입 객체의 content
속성에 입력해서 넘겨주어야 합니다.
예를 들어 폰트파일을 변환하기 위해 아래와 같은 변환 함수를 이용할 수 있습니다.
async function base64convert (url, split) {
const data = await fetch(url);
const blob = await data.blob();
return new Promise(resolve => {
const reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = () => {
const base64data = reader.result;
resolve(split ? base64data.split(',')[1] : base64data);
}
});
}
무료 한글 폰트 다운로드
아래 링크는 PDF내보내기에 사용할 수 있는 폰트를 무료로 받을 수 있는 사이트입니다.
PDF 내보내기
RealReport로 디자인된 양식을 PDF문서로 내보내기 위해 ReportViewer.exportPdf()함수를 사용할 수 있습니다. 위에서 설명된 PDF폰트를 인자로 함수를 호출 합니다.
아래 코드는 변환 함수를 이용해 트루 타입 폰트(.ttf
)형식의 맑은고딕
폰트와 맑은고딕 볼드
폰트 파일을 base64로 인코딩된 문자열을 각각 PdfFont 객체로 만들어 PDF변환 함수에 인자로 넘겨주는 예제입니다.
base64convert('./js/pdffonts/malgun.ttf', true).then(regualrFont => {
base64convert('./js/pdffonts/malgunbd.ttf', true).then(async boldFont => {
if (regualrFont && boldFont) {
const fonts = [{
name: 'regular',
content: regualrFont,
style: 'normal',
weight: 'normal',
},
{
name: 'bold',
content: boldFont,
style: 'normal',
weight: 'bold',
}];
if (viewer) {
const oldZoom = viewer.zoom;
viewer.zoom = 1;
await viewer.exportPdf({fonts, filename: 'sample-pdf-filename.pdf', preview: false});
viewer.zoom = oldZoom;
}
}
});
});
PDF내보내기 파일명
현재 버전(v1.1)에서 PDF내보내기 파일명은 report name에 의존합니다. 다운로드 하면서 파일명을 변환 할 수 있도록 개선될 예정입니다.
제약사항
PDF내보내기 기능은 RealReport의 양식 모델들을 PDF 아이템으로 하나씩 변환하는 과정을 거쳐 작성됩니다. 그러므로 보다 정밀한 PDF출력이 가능한 장점이 있는 반면에 RealReport의 양식 디자인 능력을 온전하게 PDF문서로 내보내는데 약간의 제약이 있습니다. 특히, 표(Table)형식이나 밴드(Band)형식의 아이템을 또다른 밴드나 컨테이너(Container) 아이템에 포함하는 복잡한 중첩기능을 표현하는데 제약이 많습니다.
RealReport 개발팀은 동일한 디자인의 양식을, 좀더 단순하고 쉽게 디자인 할 수 있는 방법들이 언제나 존재한다고 믿고 있습니다. PDF로 변환시 스타일이 적용되지 않는 복잡한 양식에 대해 기술지원팀 (opens in a new tab)에 문의주시면 다른 방법이 없는지 같이 고민하겠습니다.
여러 양식 리포트에서 PDF 내보내기
이 기능은 현재 구현 중입니다.