Skip to content

mumberrymountain/hwpxtemplater

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

78 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

HWPXTemplater

HWPXTemplater๋Š” HWPX ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ HWPX ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

ย 

๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ ๋ฌธ์„œ ์ƒ์„ฑ: HWPX ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์— ๋™์  ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
  • ๋‹ค์–‘ํ•œ ํƒœ๊ทธ ์ง€์›: ๊ธฐ๋ณธ ํƒœ๊ทธ, ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ์ด๋ฏธ์ง€, ํ…Œ์ด๋ธ” ํƒœ๊ทธ
  • ์œ ์—ฐํ•œ ์„ค์ •: ํ…œํ”Œ๋ฆฟ ๋ฌธ๋ฒ• ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๋ฐ ์ž๋™ ํŠธ๋ฆผ ์˜ต์…˜
  • ์ธํ„ฐ์…‰ํ„ฐ ์‹œ์Šคํ…œ: ๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง ์ „ ๊ฐ€๋กœ์ฑ„๊ธฐ ๋ฐ ๊ฐ€๊ณต
  • ํ’๋ถ€ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ: Text, Image, Table ๋“ฑ ํŠน์ˆ˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์ œ๊ณต

ย 

๐Ÿ“‹ ์š”๊ตฌ์‚ฌ์–‘

  • HWPXTemplater๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ Java8, ํ˜น์€ ๋†’์€ ๋ฒ„์ „์˜ ์ž๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜์…”์•ผ ๋ฉ๋‹ˆ๋‹ค.

ย 

๐Ÿ“ฆ ์„ค์น˜

๋นŒ๋“œ ๋„๊ตฌ๋กœ maven์„ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์˜ dependency๋ฅผ pom.xml ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

Maven

<dependency>
  <groupId>io.github.mumberrymountain</groupId>
  <artifactId>hwpxtemplater</artifactId>
</dependency>

gradle์„ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์˜ implementation์„ build.gradle ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

Gradle

implementation 'io.github.mumberrymountain:hwpxtemplater'

ย 

๐Ÿท๏ธ ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ

ย 

๊ธฐ๋ณธ ํƒœ๊ทธ

{{field_name}}

์šฉ๋„: ๊ธฐ๋ณธ์ ์ธ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ HWPX ํŒŒ์ผ์— ๋ Œ๋”๋งํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•:

  • ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์— {{name}} ํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Java ์ฝ”๋“œ์—์„œ ํ•ด๋‹น ํ‚ค์— ๋ฌธ์ž์—ด ๊ฐ’์„ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ Œ๋”๋ง ์‹œ ํƒœ๊ทธ๊ฐ€ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋กœ ์น˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

// ํ…œํ”Œ๋ฆฟ: {{name}}๋‹˜ ์•ˆ๋…•ํ•˜์„ธ์š”!
import javax.servlet.http.HttpServletResponse;
import io.github.mumberrymountain.HWPXTemplater;
import java.util.*;

HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
                    .parse("./hwpxtemplater.hwpx")
                    .render(new HashMap<String, Object>() {{
                        put("name", "ํ™๊ธธ๋™");
                    }})
                    .write(response.getOutputStream());

// ๊ฒฐ๊ณผ: ํ™๊ธธ๋™๋‹˜ ์•ˆ๋…•ํ•˜์„ธ์š”!

ย 

์กฐ๊ฑด๋ฌธ ํƒœ๊ทธ

{{?condition}}
  ์กฐ๊ฑด์ด ์ฐธ์ผ ๋•Œ ๋ Œ๋”๋ง๋  ๋‚ด์šฉ
{{/condition}}

์šฉ๋„: ์กฐ๊ฑด์— ๋”ฐ๋ผ ํƒœ๊ทธ ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ Œ๋”๋งํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค.

๋™์ž‘ ์›๋ฆฌ:

  • ์กฐ๊ฑด๊ฐ’์ด true์ด๋ฉด ํƒœ๊ทธ ๋‚ด๋ถ€ ๋‚ด์šฉ์ด ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค
  • ์กฐ๊ฑด๊ฐ’์ด false์ด๋ฉด ํƒœ๊ทธ ๋‚ด๋ถ€ ๋‚ด์šฉ์ด ์™„์ „ํžˆ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค
  • ํƒœ๊ทธ ๋‚ด๋ถ€์— ๋‹ค๋ฅธ ๊ธฐ๋ณธ ํƒœ๊ทธ๋“ค๋„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์˜ˆ์‹œ:

// ํ…œํ”Œ๋ฆฟ: 
// ์ƒํƒœ: {{status}}
// {{?hasTrackingNumber}}
// ์šด์†ก์žฅ ๋ฒˆํ˜ธ: {{trackingNumber}}
// {{/hasTrackingNumber}}

import javax.servlet.http.HttpServletResponse;
import io.github.mumberrymountain.HWPXTemplater;
import java.util.*;

HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
                            .parse("./hwpxtemplater.hwpx")
                            .render(new HashMap<String, Object>() {{
                                put("status", "๋ฐฐ์†ก์ค‘");
                                put("hasTrackingNumber", true);
                                put("trackingNumber", "1234-5678-9012");
                            }})
                            .write(response.getOutputStream());

// ๊ฒฐ๊ณผ: 
// ์ƒํƒœ: ๋ฐฐ์†ก์ค‘
// ์šด์†ก์žฅ ๋ฒˆํ˜ธ: 1234-5678-9012

ย 

๋ฐ˜๋ณต๋ฌธ ํƒœ๊ทธ

{{#loop}}
  {{item_field}}
{{/loop}}

์šฉ๋„: ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๋™์ผํ•œ ํŒจํ„ด์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค.

๋™์ž‘ ์›๋ฆฌ:

  • List๋‚˜ Array ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค
  • ๊ฐ ์š”์†Œ๋งˆ๋‹ค ํƒœ๊ทธ ๋‚ด๋ถ€ ๋‚ด์šฉ์„ ๋ฐ˜๋ณต ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค
  • ๋‚ด๋ถ€์˜ ๊ธฐ๋ณธ ํƒœ๊ทธ๋“ค์€ ๊ฐ ๋ฐฐ์—ด ์š”์†Œ์˜ ํ•„๋“œ๊ฐ’์œผ๋กœ ์น˜ํ™˜๋ฉ๋‹ˆ๋‹ค

์˜ˆ์‹œ:

import javax.servlet.http.HttpServletResponse;
import io.github.mumberrymountain.HWPXTemplater;
import java.util.*;

// ํ…œํ”Œ๋ฆฟ:
// {{#products}}
// - {{name}}: {{price}}์›
// {{/products}}

ArrayList<HashMap<String, Object>> products = new ArrayList<>();
products.add(new HashMap<String, Object>() {{
    put("name", "์‚ฌ๊ณผ");
    put("price", 1500);
}});
products.add(new HashMap<String, Object>() {{
    put("name", "๋ฐ”๋‚˜๋‚˜");
    put("price", 700);
}});

HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
        .parse("./hwpxtemplater.hwpx")
        .render(new HashMap<String, Object>() {{
            put("products", products);
        }})
        .write(response.getOutputStream());

// ๊ฒฐ๊ณผ:
// - ์‚ฌ๊ณผ: 1500์›
// - ๋ฐ”๋‚˜๋‚˜: 700์›

ย 

์ด๋ฏธ์ง€ ํƒœ๊ทธ

{{$image_field}}

์šฉ๋„: HWPX ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์— ์ด๋ฏธ์ง€๋ฅผ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•œ ์ „์šฉ ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค.

๋™์ž‘ ์›๋ฆฌ:

  • ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค
  • ํ•ด๋‹น ๊ฒฝ๋กœ์˜ ์ด๋ฏธ์ง€๋ฅผ HWPX ํŒŒ์ผ์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค
  • Image ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ํฌ๊ธฐ ์กฐ์ ˆ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค

์ง€์› ํ˜•์‹: PNG, JPG, GIF ๋“ฑ ์ผ๋ฐ˜์ ์ธ ์ด๋ฏธ์ง€ ํ˜•์‹

์˜ˆ์‹œ:

import javax.servlet.http.HttpServletResponse;
import io.github.mumberrymountain.HWPXTemplater;
import java.util.*;

// ํ…œํ”Œ๋ฆฟ: {{$flag}}

// ๋ฐฉ๋ฒ• 1: ๊ฒฝ๋กœ ๋ฌธ์ž์—ด ์‚ฌ์šฉ
HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
                    .parse("./hwpxtemplater.hwpx")
                    .render(new HashMap<String, Object>() {{
                        put("flag", "images/korea.png");
                    }})
                    .write(response.getOutputStream());

// ๋ฐฉ๋ฒ• 2: Image ๋ชจ๋ธ ์‚ฌ์šฉ (ํฌ๊ธฐ ์ง€์ • ๊ฐ€๋Šฅ)
HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
                    .parse("./hwpxtemplater.hwpx")
                    .render(new HashMap<String, Object>() {{
                        put("flag", new Image("images/korea.png").width(50).height(50));
                    }})
                    .write(response.getOutputStream());

ย 

ํ…Œ์ด๋ธ” ํƒœ๊ทธ

{{@table_field}}

์šฉ๋„: HWPX ํŒŒ์ผ์— ํ‘œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•œ ์ „์šฉ ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค.

๋™์ž‘ ์›๋ฆฌ:

  • ์˜ค์ง Table ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋งŒ์„ ๋ฐ์ดํ„ฐ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค
  • ์—ด(Column) ์ •์˜์™€ ํ–‰(Row) ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ‘œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
  • ๊ฐ ์—ด์˜ ๋„ˆ๋น„, ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋“ฑ์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

์˜ˆ์‹œ:

import javax.servlet.http.HttpServletResponse;
import io.github.mumberrymountain.HWPXTemplater;
import io.github.mumberrymountain.model.table.Col;
import io.github.mumberrymountain.model.table.Table;

// ํ…œํ”Œ๋ฆฟ: {{@scoreTable}}

Table table = Table.builder()
    .cols(Arrays.asList(
        new Col("์ด๋ฆ„").width(100),
        new Col("์ ์ˆ˜").width(80),
        new Col("๋“ฑ๊ธ‰").width(60)
    ))
    .row(new HashMap<String, Object>() {{
        put("์ด๋ฆ„", "ํ™๊ธธ๋™");
        put("์ ์ˆ˜", 95);
        put("๋“ฑ๊ธ‰", "A");
    }})
    .row(new HashMap<String, Object>() {{
        put("์ด๋ฆ„", "๊น€์ฒ ์ˆ˜");
        put("์ ์ˆ˜", 87);
        put("๋“ฑ๊ธ‰", "B");
    }})
    .create();

HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
                    .parse("./hwpxtemplater.hwpx")
                    .render(new HashMap<String, Object>() {{
                        put("scoreTable", table);
                    }})
                    .write(response.getOutputStream());

ย 

โš™๏ธ ๊ธฐ๋ณธ ์„ค์ •

ย 

ConfigOption.DELIM_PREFIX

HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
    .config(ConfigOption.DELIM_PREFIX, "[[")
    .parse("./template.hwpx")
    // ...

๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ ๋ฌธ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” {{ ๋ฐ์ดํ„ฐ }} ํ˜•ํƒœ์—์„œ {{๋ฅผ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋Œ€์ฒดํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

์ œ์•ฝ์‚ฌํ•ญ: ConfigOption.DELIM_PREFIX๋Š” ๋‘ ๋ฌธ์ž๋ณด๋‹ค ๊ธธ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ย 

ConfigOption.DELIM_SUFFIX

HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
    .config(ConfigOption.DELIM_PREFIX, "[[")
    .parse("./template.hwpx")
    // ...

๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ ๋ฌธ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” {{ ๋ฐ์ดํ„ฐ }} ํ˜•ํƒœ์—์„œ }}๋ฅผ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋Œ€์ฒดํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

์ œ์•ฝ์‚ฌํ•ญ: ConfigOption.DELIM_SUFFIX๋Š” ๋‘ ๋ฌธ์ž๋ณด๋‹ค ๊ธธ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ย 

ConfigOption.CHAR_ROLE_SETTER

CharRole charRole = new CharRole();
charRole.set(PlaceHolderType.CONDITION, '+');

HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
    .config(ConfigOption.CHAR_ROLE_SETTER, charRole)
    .parse("./template.hwpx")
    // ...

์กฐ๊ฑด๋ฌธ ํƒœ๊ทธ๋ฅผ ํŒ๋ณ„ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ?, ๋ฐ˜๋ณต๋ฌธ ํƒœ๊ทธ๋ฅผ ํŒ๋ณ„ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” # ๋“ฑ ํŠน์ • ํƒœ๊ทธ๊ฐ€ ์–ด๋–ค ํƒœ๊ทธ์ธ์ง€ ํŒ๋ณ„ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์—ญํ•  ์‹๋ณ„ ๋ฌธ์ž๋ฅผ ๋””ํดํŠธ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฌธ์ž๋กœ ์„ค์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

CharRole ๋ชจ๋ธ์„ ์ด์šฉํ•ด Key ๊ฐ’์œผ๋กœ PlaceHolderType๋ฅผ, Value ๊ฐ’์œผ๋กœ ๋ฌธ์ž๋ฅผ ๋„ฃ์–ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ ๋’ค ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ธฐ์ž…ํ•ด ํ•ด๋‹น ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธํŒ…ํ•  ์ˆ˜ ์žˆ๋Š” PlaceHolderType์œผ๋กœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

PlaceHolderType ํƒœ๊ทธ ๋””ํดํŠธ ์‹๋ณ„์ž
PlaceHolderType.CONDITION ์กฐ๊ฑด๋ฌธ ํƒœ๊ทธ ์‹๋ณ„์ž ?
PlaceHolderType.LOOP ๋ฐ˜๋ณต๋ฌธ ํƒœ๊ทธ ์‹๋ณ„์ž #
PlaceHolderType.CLOSURE ๋ฐ˜๋ณต๋ฌธ ํƒœ๊ทธ ์‹๋ณ„์ž /
PlaceHolderType.IMAGE_REPLACEMENT ์ด๋ฏธ์ง€ ํƒœ๊ทธ ์‹๋ณ„์ž $
PlaceHolderType.TABLE_REPLACEMENT ํ…Œ์ด๋ธ” ํƒœ๊ทธ ์‹๋ณ„์ž @

ย 

ConfigOption.AUTO_TRIM

HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
                .config(ConfigOption.AUTO_TRIM, true) // ๋ฐ์ดํ„ฐ๋ฅผ ์–‘์ชฝ์˜ ๊ณต๋ฐฑ์„ ์ž๋™์œผ๋กœ trim์ฒ˜๋ฆฌ
                .parse("./hwpxtemplater.hwpx")
                .render(new HashMap<String, Object>() {{
                    put("data", "    ๋ฐ์ดํ„ฐ     "); // ์–‘์ชฝ์˜ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ๋ Œ๋”๋งํ•จ
                    }}
                );

ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ ๋ฐ์ดํ„ฐ ์–‘์˜†์˜ ๊ณต๋ฐฑ์„ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•˜์—ฌ ๋ Œ๋”๋งํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

ย 

๐ŸŽฏ ์ธํ„ฐ์…‰ํ„ฐ

ย 

ValueInterceptor

๋ฐ์ดํ„ฐ ๋ Œ๋”๋ง ์ „ ๊ฐ’์„ ๊ฐ€๋กœ์ฑ„์–ด ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import io.github.mumberrymountain.HWPXTemplater;
import io.github.mumberrymountain.interceptor.Interceptor;
import io.github.mumberrymountain.interceptor.ValueInterceptor;

import java.text.NumberFormat;
import java.util.*;

Interceptor valueInterceptor = new ValueInterceptor() {
    @Override
    public String intercept(String value, String field) {
        if (field.equals("Salary")) {
            return NumberFormat.getNumberInstance(Locale.KOREA).format(Integer.parseInt(value)) + "๋งŒ์›";
        }
        return value;
    }
};

HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
    .interceptor(valueInterceptor)
    .parse("./template.hwpx")
    // ...

์ฝœ๋ฐฑ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ฆ„ ํƒ€์ž… ์„ค๋ช…
value String ํ˜„์žฌ ๋ Œ๋”๋ง์ด ์ด๋ค„์ง€๋Š” ํ•„๋“œ์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ ๊ฐ’
field String ํ˜„์žฌ ๋ Œ๋”๋ง์ด ์ด๋ค„์ง€๊ณ  ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ ๋‚ด ํ•„๋“œ

ย 

NullValueInterceptor

null ๊ฐ’์— ๋Œ€ํ•ด์„œ๋งŒ ํŠน๋ณ„ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import io.github.mumberrymountain.HWPXTemplater;
import io.github.mumberrymountain.interceptor.Interceptor;
import io.github.mumberrymountain.interceptor.NullValueInterceptor;

import java.text.NumberFormat;
import java.util.*;

Interceptor nullValueInterceptor = new NullValueInterceptor() {
    @Override
    public String intercept(String value, String field) {
        if (field.equals("note")) return "์—†์Œ";
        return value;
    }
};

HWPXTemplater hwpxTemplater = HWPXTemplater.builder()
        .interceptor(nullValueInterceptor)
        .parse("./hwpxtemplater.hwpx")
        
        ...

์ฝœ๋ฐฑ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž… ์„ค๋ช…
value String ํ˜„์žฌ ๋ Œ๋”๋ง์ด ์ด๋ค„์ง€๋Š” ํ•„๋“œ์— ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ ๊ฐ’
field String ํ˜„์žฌ ๋ Œ๋”๋ง์ด ์ด๋ค„์ง€๊ณ  ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ ๋‚ด ํ•„๋“œ

ย 

๐Ÿ“Š ๋ฐ์ดํ„ฐ ๋ชจ๋ธ

ย 

Text ๋ชจ๋ธ

ํ…์ŠคํŠธ์— ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

new Text("๋ฐ์ดํ„ฐ")
    .fontColor("#9C3B00")
    .backgroundColor("#FFEF99")
    .fontFamily("Noto Sans KR")
    .fontSize(20)

ย 

Image ๋ชจ๋ธ

์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

new Image("./korea.png")
    .width(50)
    .height(50)

ย 

Table ๋ชจ๋ธ

ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Table table = Table.builder()
    .cols(Arrays.asList(
        new Col("๋ฒˆํ˜ธ").width(60),
        new Col("์ด๋ฆ„").width(150),
        new Col("์ ์ˆ˜").width(150)
    ))
    .row(new HashMap<String, Object>() {{
        put("๋ฒˆํ˜ธ", 1);
        put("์ด๋ฆ„", "ํ™๊ธธ๋™");
        put("์ ์ˆ˜", 85);
    }})
    .create();

ย 

๐Ÿ“š ๋” ๋งŽ์€ ์ •๋ณด

์ž์„ธํ•œ ์‚ฌ์šฉ๋ฒ•๊ณผ API ๋ฌธ์„œ๋Š” ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”.

ย 

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

๋ฒ„๊ทธ ๋ฆฌํฌํŠธ๋‚˜ ๊ธฐ๋Šฅ ์ œ์•ˆ์€ ์ด์Šˆ ํŠธ๋ž˜์ปค๋ฅผ ํ†ตํ•ด ์ œ์ถœํ•ด์ฃผ์„ธ์š”.

About

template library to produce HWPX documents

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages