들어 있는 기능
모든 기능이 똑같이 들어 있습니다. 항목을 누르면 데모나 사용법으로 이동합니다.
무엇이 다른가요
일반적인 국산 리포팅 툴과 FreeReport를 비교했습니다.
| 일반적인 리포팅 툴 | FreeReport | |
|---|---|---|
| 설치 | PC마다 인쇄 모듈·뷰어를 설치하는 구성이 많음 | 설치 없음, 웹 표준으로 동작 |
| 디자이너 | 데스크톱 프로그램(Windows) | 브라우저에서 바로 |
| 양식 파일 | 제품 전용 형식 | JSON |
| PDF·엑셀 생성 | 대개 서버에서 | 브라우저에서 |
| 가격 | 가격 비공개, 프로젝트별 견적 | 도메인당 연 50만 원 (개인 무료) |
몇 줄이면 충분합니다
패키지를 설치하고, 높이가 정해진 영역에 보고서 정의와 데이터를 넘기면 끝입니다.
import { createViewer, createReport } from '@freereportjs/core';
import '@freereportjs/core/styles.css';
// a report definition is plain JSON (made in the designer or by hand)
const definition = await fetch('/reports/sales.json').then(r => r.json());
const viewer = createViewer(document.getElementById('viewer'), {
definition,
data: { rows }, // detail rows plus any other values
params: { from: '2026-07-01' },
lang: 'ko',
onOutput: e => log(e), // every print and export; return false to cancel
});
// without a viewer: straight to PDF or Excel
const report = createReport(definition, { rows });
await report.ready();
const pdf = await report.toPdf(); // Blob
const xlsx = await report.toXlsx('form');// npm i @freereportjs/core @freereportjs/react
import { useRef, useState } from 'react';
import { FreeReportDesigner, FreeReportViewer, type ReportDefinition } from '@freereportjs/react';
import '@freereportjs/core/styles.css';
export function SalesReport({ definition, rows }) {
const ref = useRef(null); // { viewer, report }
return <FreeReportViewer ref={ref} definition={definition} data={{ rows }} lang="ko" style={{ height: 720 }} />;
}
export function SalesDesigner({ initial, rows, save }) {
const [def, setDef] = useState<ReportDefinition>(initial);
return <FreeReportDesigner definition={def} data={{ rows }} onChange={setDef} onSave={save} />;
}<!-- npm i @freereportjs/core @freereportjs/vue -->
<script setup>
import { ref } from 'vue';
import { FreeReportDesigner, FreeReportViewer } from '@freereportjs/vue';
import '@freereportjs/core/styles.css';
const props = defineProps(['initial', 'rows']);
const def = ref(props.initial);
const viewer = ref(null); // viewer.value.viewer / viewer.value.report
const save = d => fetch('/api/reports/sales', { method: 'PUT', body: JSON.stringify(d) });
</script>
<template>
<FreeReportViewer ref="viewer" :definition="def" :data="{ rows }" lang="ko" :height="720" />
<FreeReportDesigner v-model:definition="def" :data="{ rows }" @save="save" />
</template>자주 묻는 질문
FreeReport는 무엇인가요?
FreeReport는 웹 리포팅 툴입니다. 보고서 디자이너, 페이지 뷰어, 인쇄, PDF·엑셀·CSV 저장이 자바스크립트 패키지 하나에 들어 있습니다. 보고서는 제목, 페이지 머리글, 그룹, 상세, 요약, 페이지 바닥글 같은 밴드로 이루어진 JSON 정의입니다. 국내 업무 문서를 기준으로 만들었으며 OZ Report, ClipReport, UbiReport, Crystal Reports를 대신해 쓸 수 있습니다.
따로 설치해야 하는 것이 있나요?
없습니다. 디자이너, 뷰어, 인쇄, 저장이 모두 웹 표준으로 브라우저에서 동작하며 플러그인, ActiveX, 인쇄 모듈이 필요 없습니다. 창구나 사무실처럼 지정한 프린터로 바로 인쇄해야 하는 곳을 위해 서명된 Windows 프로그램을 선택 사항으로 제공합니다.
PDF에서 한글을 검색할 수 있나요?
네. 트루타입 글꼴(기본은 나눔고딕, 원하는 글꼴도 가능)을 부분 내장하므로 한글을 검색하고 복사할 수 있고, 어느 PC에서 열어도 똑같이 보입니다.
가격은 얼마인가요?
개인, 교육, 연구, 비상업적 용도는 무료입니다. 회사는 도메인당 연 500,000원, 또는 도메인당 900,000원에 영구 라이선스(1년 업데이트 포함)를 구매합니다. 부가세는 별도이며 개발자 수, 사용자 수, 출력 횟수에는 제한이 없습니다.
큰 보고서도 되나요?
네. 10만 건도 수천 페이지로 나누고, 뷰어는 화면에 보이는 페이지만 그립니다. 10만 건 데모에서 확인할 수 있습니다.
다른 리포팅 툴의 양식을 옮길 수 있나요?
아직 자동 변환 기능은 없습니다. 디자이너에서 다시 그리거나 JSON으로 작성해야 하며, 견적서·거래명세서·증명서 같은 일반 양식은 몇 시간이면 만들 수 있습니다.
React, Vue, 전자정부 프레임워크에서 쓸 수 있나요?
네. 코어 패키지는 지금도 어떤 프레임워크에서든 쓸 수 있습니다(아래 코드 참고). @freereportjs/react·vue·svelte·angular 패키지가 FreeReportViewer, FreeReportDesigner 컴포넌트를 제공하고, 전자정부 표준프레임워크(Spring + JSP) 프로젝트에 넣는 연동 예제도 제공합니다.