FreeReportv0.13.0한국어

Migrating from other tools

Map OZ Report, ClipReport, Crystal Reports, ActiveReports and JasperReports concepts to FreeReport, the migration steps, and moving forms with AI or paste.

There is no automatic converter for .ozr, .crf, .rpt, .rdlx or .jrxml files. Forms are rebuilt in the designer (or written as JSON), usually a few hours per form; the tables below show where each concept goes, and the AI assistant and paste from Excel/Hangul do most of the typing.

Korean tools: OZ Report and ClipReport

Names on the left are the general concepts of each product; check them against the version you use.

ConceptOZ ReportClipReportFreeReport
Form file.ozr form + .odi data module.crf formJSON definition (one file, versioned with your code)
BandsTitle, page header, data band, group header/footer, summary, page footerHeader, data and footer bands per datasetbands.title, pageHeader, columnHeader, groups[].header/footer, detail, summary, pageFooter, noData
DataODI with DB queries on the OZ serverDatasets from the report serverJSON from your own API: data or fetchData, or a REST source (definition.data)
FieldsData-bound labelsData fieldsfield element with expr: "name", "customer.name"
ParametersForm / ODI parametersReport parametersdefinition.params (text, number, date, select…) shown in the viewer panel; params.x in expressions
Viewer and printingOZ viewer (HTML5 or installed), print moduleViewer, print plug-increateViewer in the browser; browser printing at exact paper size; optional signed Windows agent for silent printing

Crystal Reports, ActiveReports, JasperReports

ConceptCrystal ReportsActiveReportsJasperReportsFreeReport
BandsReport Header, Page Header, Group Header #n, Details, Group Footer, Report Footer, Page FooterSection reports: ReportHeader, PageHeader, GroupHeader, Detail, …title, pageHeader, columnHeader, groupHeader/Footer, detail, columnFooter, summary, pageFooter, noDatatitle, pageHeader, columnHeader, groups[], detail, summary, pageFooter, noData
Fields{Table.Field}DataField / =Fields!Name.Value$F{name}field element, expr "name"
FormulasFormula fields (Crystal / Basic syntax)Expressions, scriptsJava/Groovy expressions, variables $V{}one safe expression language: price * qty, iif(), format(), koreanAmount(), date functions; no scripts
TotalsSummary fields, running totalsSummaryType / Sum()Variables with calculation and resetTypesum(amount), sum(amount, 'group' | 'page' | 'report'), count, avg, min, max
Parameters{?Param}Parameters$P{param}definition.params → params.param
Conditional displaySuppress formulasVisible expressionprintWhenExpressionvisible: expression; suppressRepeated
SubreportsSubreportSubReport controlsubreportsubreport element (ref to definition.subreports, rows: "row.items"), or nested tables
Cross-tabsCross-TabMatrix / Tablixcrosstabcrosstab element (rowKey, columnKey, value, totals)
ChartsChartChartchart (JFreeChart)chart element: bar, horizontal bar, line, area, pie, doughnut
ExportPDF, Excel, Word, …PDF, Excel, Word, …JRPdfExporter, JRXlsxExporter, …in the browser: PDF (Korean font subset, AES-256), Excel as printed or as data, CSV, HWPX, DOCX, PNG; on servers renderPdf / renderXlsx
Printing agentPrinter settings in the runtimePrint from the viewer or codeJRPrintServiceExporter (server side)browser print dialog; or agent.print(pdf, { printer, copies }) through the optional Windows program

Migration, step by step

  1. List the forms. For each: paper, bands, data source, parameters, totals, subreports, how it is printed (dialog, silent, batch) and which exports people use. Start with the most-printed forms.
  2. Turn the data into JSON. Move the queries from the report server (ODI, datasets, SQL commands) to your own API, which returns JSON: top-level values for the header ({ customer: {…} }) and an array for the detail rows ({ items: [...] }). See the backend examples. Backend examples
  3. Rebuild the layout. Start from a matching template, paste the form's table from Excel or Hangul, or ask the AI assistant; then fix positions in the designer. Templates
  4. Rewrite formulas. Crystal {Table.Field}, Jasper $F{name} and $P{name} become name and params.name; Sum({x}) becomes sum(x) with a scope; IIF and ToText become iif() and format(). Scripts that change the layout at run time become visible, canGrow and group options. Expressions
  5. Compare the output. Print or save a PDF of the old and the new form with the same data and lay them over each other. The designer's [Check] finds unknown fields and broken expressions.
  6. Switch the screens. Replace the old viewer tag or plug-in call with createViewer (or the React, Vue, Svelte, Angular component); for silent printing at counters, install the Windows program. Remove the old print module from PCs last. Windows print program

Moving forms with AI, Excel and Hangul

Two tools do most of the typing. Neither reads the old form file itself; you give them the layout.

  • Paste from Excel or Hangul: many forms already exist as an Excel or HWP table. Copy the table and press Ctrl+V in the designer: every cell becomes a text element with the same width, height, merged cells, borders, background and alignment. Then replace the value cells with field elements.
  • Designer AI assistant: when your application turns on the assistant option, describe the old form (bands, fields, formulas, totals) and the assistant writes or changes the definition; every answer is checked before you apply it. Without it, give any AI chat the description below together with llms-full.txt and paste the JSON into the designer's JSON view. Designer · Asking an AI assistant
Below is a report from our old reporting tool. Rebuild it as a FreeReport report definition (JSON).
- Paper: A4 portrait, 15 mm margins
- Top: title "Statement", supplier block (name, CEO, business number, address) and a seal
- Detail: items array (name, spec, qty, price, amount = qty * price)
- Bottom: total and the amount in Korean words
- Old formula: {Total} = Sum({Amount})  ->  rewrite as a FreeReport expression
Do not invent options that are not in https://freereport.app/llms-full.txt.

Check AI output with the designer's [Check] and a printout before using it: AI can misread positions and formulas. To show a converted form to us or other users, use the designer's [Share link] and post it in the forum. Forum