v8:문서유형 분석등록 및 추출_20260206
This commit is contained in:
26
templates/default/doc_types/briefing/config.json
Normal file
26
templates/default/doc_types/briefing/config.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"id": "briefing",
|
||||
"name": "기획서",
|
||||
"icon": "📋",
|
||||
"description": "1~2페이지 분량의 임원 보고용 문서",
|
||||
"features": [
|
||||
{"icon": "📌", "text": "헤더 + 제목 블록"},
|
||||
{"icon": "💡", "text": "핵심 요약 (Lead Box)"},
|
||||
{"icon": "📊", "text": "본문 섹션 + 첨부"}
|
||||
],
|
||||
"thumbnailType": "briefing",
|
||||
"enabled": true,
|
||||
"isDefault": true,
|
||||
"order": 1,
|
||||
"options": {
|
||||
"pageConfig": {
|
||||
"type": "radio-with-input",
|
||||
"choices": [
|
||||
{"value": "body-only", "label": "(본문) 1p"},
|
||||
{"value": "body-attach", "label": "(본문) 1p + (첨부)", "hasInput": true, "inputSuffix": "p", "inputDefault": 1, "inputMin": 1, "inputMax": 10, "default": true}
|
||||
]
|
||||
}
|
||||
},
|
||||
"createdAt": "2024-01-01T00:00:00Z",
|
||||
"updatedAt": "2025-01-30T00:00:00Z"
|
||||
}
|
||||
27
templates/default/doc_types/presentation/config.json
Normal file
27
templates/default/doc_types/presentation/config.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"id": "presentation",
|
||||
"name": "발표자료",
|
||||
"icon": "📊",
|
||||
"description": "슬라이드 형식의 프레젠테이션",
|
||||
"features": [
|
||||
{"icon": "🎯", "text": "슬라이드 레이아웃"},
|
||||
{"icon": "📈", "text": "차트/다이어그램"},
|
||||
{"icon": "🎨", "text": "비주얼 중심 구성"}
|
||||
],
|
||||
"thumbnailType": "ppt",
|
||||
"enabled": false,
|
||||
"isDefault": true,
|
||||
"order": 3,
|
||||
"badge": "준비중",
|
||||
"options": {
|
||||
"slideCount": [
|
||||
{"value": "auto", "label": "자동 (내용 기반)", "default": true},
|
||||
{"value": "5", "label": "5장 이내"},
|
||||
{"value": "10", "label": "10장 이내"},
|
||||
{"value": "20", "label": "20장 이내"}
|
||||
]
|
||||
},
|
||||
"generateFlow": "draft-first",
|
||||
"createdAt": "2024-01-01T00:00:00Z",
|
||||
"updatedAt": "2025-01-30T00:00:00Z"
|
||||
}
|
||||
26
templates/default/doc_types/report/config.json
Normal file
26
templates/default/doc_types/report/config.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"id": "report",
|
||||
"name": "보고서",
|
||||
"icon": "📄",
|
||||
"description": "다페이지 분량의 상세 보고서",
|
||||
"features": [
|
||||
{"icon": "📘", "text": "표지 (선택)"},
|
||||
{"icon": "📑", "text": "목차 자동 생성"},
|
||||
{"icon": "📝", "text": "챕터별 내지"}
|
||||
],
|
||||
"thumbnailType": "report",
|
||||
"enabled": true,
|
||||
"isDefault": true,
|
||||
"order": 2,
|
||||
"options": {
|
||||
"components": [
|
||||
{"id": "cover", "label": "표지", "icon": "📘", "default": true},
|
||||
{"id": "toc", "label": "목차", "icon": "📑", "default": true},
|
||||
{"id": "divider", "label": "간지", "icon": "📄", "default": false},
|
||||
{"id": "content", "label": "내지 (필수)", "icon": "📝", "default": true, "required": true}
|
||||
]
|
||||
},
|
||||
"generateFlow": "draft-first",
|
||||
"createdAt": "2024-01-01T00:00:00Z",
|
||||
"updatedAt": "2025-01-30T00:00:00Z"
|
||||
}
|
||||
@@ -1,343 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>HWP 변환 가이드 - 글벗 Light</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body { font-family: 'Noto Sans KR', sans-serif; }
|
||||
.gradient-bg { background: linear-gradient(135deg, #1a365d 0%, #2c5282 100%); }
|
||||
pre { background: #1e293b; color: #e2e8f0; padding: 1rem; border-radius: 0.5rem; overflow-x: auto; }
|
||||
code { font-family: 'Consolas', 'Monaco', monospace; }
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-gray-50 min-h-screen">
|
||||
<!-- 헤더 -->
|
||||
<header class="gradient-bg text-white py-6 shadow-lg">
|
||||
<div class="container mx-auto px-4">
|
||||
<div class="flex items-center justify-between">
|
||||
<div>
|
||||
<a href="/" class="text-blue-200 hover:text-white text-sm">← 메인으로</a>
|
||||
<h1 class="text-2xl font-bold mt-2">HWP 변환 가이드</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="container mx-auto px-4 py-8 max-w-4xl">
|
||||
<!-- 안내 -->
|
||||
<div class="bg-yellow-50 border border-yellow-200 rounded-xl p-6 mb-8">
|
||||
<h2 class="font-bold text-yellow-800 mb-2">⚠️ HWP 변환 요구사항</h2>
|
||||
<ul class="text-yellow-700 text-sm space-y-1">
|
||||
<li>• Windows 운영체제</li>
|
||||
<li>• 한글 프로그램 (한컴오피스) 설치</li>
|
||||
<li>• Python 3.8 이상</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- 설치 방법 -->
|
||||
<div class="bg-white rounded-xl shadow-md p-6 mb-6">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-4">1. 필요 라이브러리 설치</h2>
|
||||
<pre><code>pip install pyhwpx beautifulsoup4</code></pre>
|
||||
</div>
|
||||
|
||||
<!-- 사용 방법 -->
|
||||
<div class="bg-white rounded-xl shadow-md p-6 mb-6">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-4">2. 사용 방법</h2>
|
||||
<ol class="list-decimal list-inside space-y-2 text-gray-700">
|
||||
<li>글벗 Light에서 HTML 파일을 다운로드합니다.</li>
|
||||
<li>아래 Python 스크립트를 다운로드합니다.</li>
|
||||
<li>스크립트 내 경로를 수정합니다.</li>
|
||||
<li>스크립트를 실행합니다.</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- 스크립트 -->
|
||||
<div class="bg-white rounded-xl shadow-md p-6 mb-6">
|
||||
<div class="flex items-center justify-between mb-4">
|
||||
<h2 class="text-xl font-bold text-gray-800">3. HWP 변환 스크립트</h2>
|
||||
<button onclick="copyScript()" class="px-4 py-2 bg-blue-900 text-white rounded hover:bg-blue-800 text-sm">
|
||||
📋 복사
|
||||
</button>
|
||||
</div>
|
||||
<pre id="scriptCode"><code># -*- coding: utf-8 -*-
|
||||
"""
|
||||
글벗 Light - HTML → HWP 변환기
|
||||
Windows + 한글 프로그램 필요
|
||||
"""
|
||||
|
||||
from pyhwpx import Hwp
|
||||
from bs4 import BeautifulSoup
|
||||
import os
|
||||
|
||||
|
||||
class HtmlToHwpConverter:
|
||||
def __init__(self, visible=True):
|
||||
self.hwp = Hwp(visible=visible)
|
||||
self.colors = {}
|
||||
|
||||
def _init_colors(self):
|
||||
self.colors = {
|
||||
'primary-navy': self.hwp.RGBColor(26, 54, 93),
|
||||
'secondary-navy': self.hwp.RGBColor(44, 82, 130),
|
||||
'dark-gray': self.hwp.RGBColor(45, 55, 72),
|
||||
'medium-gray': self.hwp.RGBColor(74, 85, 104),
|
||||
'bg-light': self.hwp.RGBColor(247, 250, 252),
|
||||
'white': self.hwp.RGBColor(255, 255, 255),
|
||||
'black': self.hwp.RGBColor(0, 0, 0),
|
||||
}
|
||||
|
||||
def _mm(self, mm):
|
||||
return self.hwp.MiliToHwpUnit(mm)
|
||||
|
||||
def _font(self, size=10, color='black', bold=False):
|
||||
self.hwp.set_font(
|
||||
FaceName='맑은 고딕',
|
||||
Height=size,
|
||||
Bold=bold,
|
||||
TextColor=self.colors.get(color, self.colors['black'])
|
||||
)
|
||||
|
||||
def _align(self, align):
|
||||
actions = {'left': 'ParagraphShapeAlignLeft', 'center': 'ParagraphShapeAlignCenter', 'right': 'ParagraphShapeAlignRight'}
|
||||
if align in actions:
|
||||
self.hwp.HAction.Run(actions[align])
|
||||
|
||||
def _para(self, text='', size=10, color='black', bold=False, align='left'):
|
||||
self._align(align)
|
||||
self._font(size, color, bold)
|
||||
if text:
|
||||
self.hwp.insert_text(text)
|
||||
self.hwp.BreakPara()
|
||||
|
||||
def _exit_table(self):
|
||||
self.hwp.HAction.Run("Cancel")
|
||||
self.hwp.HAction.Run("CloseEx")
|
||||
self.hwp.HAction.Run("MoveDocEnd")
|
||||
self.hwp.BreakPara()
|
||||
|
||||
def _set_cell_bg(self, color_name):
|
||||
self.hwp.HAction.GetDefault("CellBorderFill", self.hwp.HParameterSet.HCellBorderFill.HSet)
|
||||
pset = self.hwp.HParameterSet.HCellBorderFill
|
||||
pset.FillAttr.type = self.hwp.BrushType("NullBrush|WinBrush")
|
||||
pset.FillAttr.WinBrushFaceStyle = self.hwp.HatchStyle("None")
|
||||
pset.FillAttr.WinBrushHatchColor = self.hwp.RGBColor(0, 0, 0)
|
||||
pset.FillAttr.WinBrushFaceColor = self.colors.get(color_name, self.colors['white'])
|
||||
pset.FillAttr.WindowsBrush = 1
|
||||
self.hwp.HAction.Execute("CellBorderFill", pset.HSet)
|
||||
|
||||
def _create_header(self, left_text, right_text):
|
||||
try:
|
||||
self.hwp.HAction.GetDefault("HeaderFooter", self.hwp.HParameterSet.HHeaderFooter.HSet)
|
||||
self.hwp.HParameterSet.HHeaderFooter.HSet.SetItem("HeaderFooterStyle", 0)
|
||||
self.hwp.HParameterSet.HHeaderFooter.HSet.SetItem("HeaderFooterCtrlType", 0)
|
||||
self.hwp.HAction.Execute("HeaderFooter", self.hwp.HParameterSet.HHeaderFooter.HSet)
|
||||
self._font(9, 'medium-gray')
|
||||
self.hwp.insert_text(left_text)
|
||||
self.hwp.insert_text("\t" * 12)
|
||||
self.hwp.insert_text(right_text)
|
||||
self.hwp.HAction.Run("CloseEx")
|
||||
except Exception as e:
|
||||
print(f"머리말 생성 실패: {e}")
|
||||
|
||||
def _create_footer(self, text):
|
||||
try:
|
||||
self.hwp.HAction.GetDefault("HeaderFooter", self.hwp.HParameterSet.HHeaderFooter.HSet)
|
||||
self.hwp.HParameterSet.HHeaderFooter.HSet.SetItem("HeaderFooterStyle", 0)
|
||||
self.hwp.HParameterSet.HHeaderFooter.HSet.SetItem("HeaderFooterCtrlType", 1)
|
||||
self.hwp.HAction.Execute("HeaderFooter", self.hwp.HParameterSet.HHeaderFooter.HSet)
|
||||
self._align('center')
|
||||
self._font(8.5, 'medium-gray')
|
||||
self.hwp.insert_text(text)
|
||||
self.hwp.HAction.Run("CloseEx")
|
||||
except Exception as e:
|
||||
print(f"꼬리말 생성 실패: {e}")
|
||||
|
||||
def _convert_lead_box(self, elem):
|
||||
content = elem.find("div")
|
||||
if not content:
|
||||
return
|
||||
text = ' '.join(content.get_text().split())
|
||||
self.hwp.create_table(1, 1, treat_as_char=True)
|
||||
self._set_cell_bg('bg-light')
|
||||
self._font(11.5, 'dark-gray', False)
|
||||
self.hwp.insert_text(text)
|
||||
self._exit_table()
|
||||
|
||||
def _convert_bottom_box(self, elem):
|
||||
left = elem.find(class_="bottom-left")
|
||||
right = elem.find(class_="bottom-right")
|
||||
if not left or not right:
|
||||
return
|
||||
left_text = ' '.join(left.get_text().split())
|
||||
right_text = right.get_text(strip=True)
|
||||
|
||||
self.hwp.create_table(1, 2, treat_as_char=True)
|
||||
self._set_cell_bg('primary-navy')
|
||||
self._font(10.5, 'white', True)
|
||||
self._align('center')
|
||||
self.hwp.insert_text(left_text)
|
||||
self.hwp.HAction.Run("MoveRight")
|
||||
self._set_cell_bg('bg-light')
|
||||
self._font(10.5, 'primary-navy', True)
|
||||
self._align('center')
|
||||
self.hwp.insert_text(right_text)
|
||||
self._exit_table()
|
||||
|
||||
def _convert_section(self, section):
|
||||
title = section.find(class_="section-title")
|
||||
if title:
|
||||
self._para("■ " + title.get_text(strip=True), 12, 'primary-navy', True)
|
||||
|
||||
ul = section.find("ul")
|
||||
if ul:
|
||||
for li in ul.find_all("li", recursive=False):
|
||||
keyword = li.find(class_="keyword")
|
||||
if keyword:
|
||||
kw_text = keyword.get_text(strip=True)
|
||||
full = li.get_text(strip=True)
|
||||
rest = full.replace(kw_text, '', 1).strip()
|
||||
self._font(10.5, 'primary-navy', True)
|
||||
self.hwp.insert_text(" • " + kw_text + " ")
|
||||
self._font(10.5, 'dark-gray', False)
|
||||
self.hwp.insert_text(rest)
|
||||
self.hwp.BreakPara()
|
||||
else:
|
||||
self._para(" • " + li.get_text(strip=True), 10.5, 'dark-gray')
|
||||
self._para()
|
||||
|
||||
def _convert_sheet(self, sheet, is_first_page=False):
|
||||
if is_first_page:
|
||||
header = sheet.find(class_="page-header")
|
||||
if header:
|
||||
left = header.find(class_="header-left")
|
||||
right = header.find(class_="header-right")
|
||||
left_text = left.get_text(strip=True) if left else ""
|
||||
right_text = right.get_text(strip=True) if right else ""
|
||||
if left_text or right_text:
|
||||
self._create_header(left_text, right_text)
|
||||
|
||||
footer = sheet.find(class_="page-footer")
|
||||
if footer:
|
||||
self._create_footer(footer.get_text(strip=True))
|
||||
|
||||
title = sheet.find(class_="header-title")
|
||||
if title:
|
||||
title_text = title.get_text(strip=True)
|
||||
if '[첨부]' in title_text:
|
||||
self._para(title_text, 15, 'primary-navy', True, 'left')
|
||||
else:
|
||||
self._para(title_text, 23, 'primary-navy', True, 'center')
|
||||
self._font(10, 'secondary-navy')
|
||||
self._align('center')
|
||||
self.hwp.insert_text("━" * 45)
|
||||
self.hwp.BreakPara()
|
||||
|
||||
self._para()
|
||||
|
||||
lead_box = sheet.find(class_="lead-box")
|
||||
if lead_box:
|
||||
self._convert_lead_box(lead_box)
|
||||
self._para()
|
||||
|
||||
for section in sheet.find_all(class_="section"):
|
||||
self._convert_section(section)
|
||||
|
||||
bottom_box = sheet.find(class_="bottom-box")
|
||||
if bottom_box:
|
||||
self._para()
|
||||
self._convert_bottom_box(bottom_box)
|
||||
|
||||
def convert(self, html_path, output_path):
|
||||
print(f"[입력] {html_path}")
|
||||
|
||||
with open(html_path, 'r', encoding='utf-8') as f:
|
||||
soup = BeautifulSoup(f.read(), 'html.parser')
|
||||
|
||||
self.hwp.FileNew()
|
||||
self._init_colors()
|
||||
|
||||
# 페이지 설정
|
||||
try:
|
||||
self.hwp.HAction.GetDefault("PageSetup", self.hwp.HParameterSet.HSecDef.HSet)
|
||||
sec = self.hwp.HParameterSet.HSecDef
|
||||
sec.PageDef.LeftMargin = self._mm(20)
|
||||
sec.PageDef.RightMargin = self._mm(20)
|
||||
sec.PageDef.TopMargin = self._mm(20)
|
||||
sec.PageDef.BottomMargin = self._mm(20)
|
||||
sec.PageDef.HeaderLen = self._mm(10)
|
||||
sec.PageDef.FooterLen = self._mm(10)
|
||||
self.hwp.HAction.Execute("PageSetup", sec.HSet)
|
||||
except Exception as e:
|
||||
print(f"페이지 설정 실패: {e}")
|
||||
|
||||
sheets = soup.find_all(class_="sheet")
|
||||
total = len(sheets)
|
||||
print(f"[변환] 총 {total} 페이지")
|
||||
|
||||
for i, sheet in enumerate(sheets, 1):
|
||||
print(f"[{i}/{total}] 페이지 처리 중...")
|
||||
self._convert_sheet(sheet, is_first_page=(i == 1))
|
||||
if i < total:
|
||||
self.hwp.HAction.Run("BreakPage")
|
||||
|
||||
self.hwp.SaveAs(output_path)
|
||||
print(f"✅ 저장 완료: {output_path}")
|
||||
|
||||
def close(self):
|
||||
try:
|
||||
self.hwp.Quit()
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
def main():
|
||||
# ====================================
|
||||
# 경로 설정 (본인 환경에 맞게 수정)
|
||||
# ====================================
|
||||
html_path = r"C:\Users\User\Downloads\report.html"
|
||||
output_path = r"C:\Users\User\Downloads\report.hwp"
|
||||
|
||||
print("=" * 50)
|
||||
print("글벗 Light - HTML → HWP 변환기")
|
||||
print("=" * 50)
|
||||
|
||||
try:
|
||||
converter = HtmlToHwpConverter(visible=True)
|
||||
converter.convert(html_path, output_path)
|
||||
print("\n✅ 변환 완료!")
|
||||
input("Enter를 누르면 HWP가 닫힙니다...")
|
||||
converter.close()
|
||||
except FileNotFoundError:
|
||||
print(f"\n[에러] 파일을 찾을 수 없습니다: {html_path}")
|
||||
except Exception as e:
|
||||
print(f"\n[에러] {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()</code></pre>
|
||||
</div>
|
||||
|
||||
<!-- 경로 수정 안내 -->
|
||||
<div class="bg-white rounded-xl shadow-md p-6">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-4">4. 경로 수정</h2>
|
||||
<p class="text-gray-700 mb-4">스크립트 하단의 <code class="bg-gray-100 px-2 py-1 rounded">main()</code> 함수에서 경로를 수정하세요:</p>
|
||||
<pre><code>html_path = r"C:\다운로드경로\report.html"
|
||||
output_path = r"C:\저장경로\report.hwp"</code></pre>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<script>
|
||||
function copyScript() {
|
||||
const code = document.getElementById('scriptCode').innerText;
|
||||
navigator.clipboard.writeText(code).then(() => {
|
||||
alert('스크립트가 클립보드에 복사되었습니다!');
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
302
templates/hwp_guide.md
Normal file
302
templates/hwp_guide.md
Normal file
@@ -0,0 +1,302 @@
|
||||
# A4 HTML 문서 레이아웃 가이드
|
||||
> 이 가이드는 글벗 doc_template_analyzer가 HWPX에서 추출한 구조를
|
||||
> A4 규격 HTML template.html로 변환할 때 참조하는 레이아웃 규격입니다.
|
||||
>
|
||||
> ★ 이 파일의 값은 코드에 하드코딩하지 않습니다.
|
||||
> ★ doc_template_analyzer._build_css(), _build_full_html() 등에서 이 파일을 읽어 적용합니다.
|
||||
> ★ 색상, 폰트 등 스타일은 HWPX에서 추출한 값을 우선 사용하고, 없으면 이 가이드의 기본값을 사용합니다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 페이지 규격 (Page Dimensions)
|
||||
|
||||
```yaml
|
||||
page:
|
||||
width: 210mm # A4 가로
|
||||
height: 297mm # A4 세로
|
||||
background: white
|
||||
boxSizing: border-box
|
||||
|
||||
margins:
|
||||
top: 20mm # 상단 여백 (머릿말 + 본문 시작)
|
||||
bottom: 20mm # 하단 여백 (꼬릿말 + 본문 끝)
|
||||
left: 20mm # 좌측 여백
|
||||
right: 20mm # 우측 여백
|
||||
|
||||
# 본문 가용 높이 = 297mm - 20mm(상) - 20mm(하) = 257mm ≈ 970px
|
||||
bodyMaxHeight: 970px
|
||||
```
|
||||
|
||||
## 2. HTML 골격 구조 (Page Structure)
|
||||
|
||||
각 페이지는 `.sheet` 클래스로 감싸며, 내부에 header/body/footer를 absolute로 배치합니다.
|
||||
|
||||
```html
|
||||
<!-- 페이지 단위 -->
|
||||
<div class="sheet">
|
||||
<!-- 머릿말: 상단 여백(20mm) 안, 위에서 10mm 지점 -->
|
||||
<div class="page-header">
|
||||
<!-- HWPX 머릿말 테이블 내용 -->
|
||||
</div>
|
||||
|
||||
<!-- 본문: 상하좌우 20mm 안쪽 -->
|
||||
<div class="body-content">
|
||||
<!-- 섹션 제목, 표, 개조식 등 -->
|
||||
</div>
|
||||
|
||||
<!-- 꼬릿말: 하단 여백(20mm) 안, 아래에서 10mm 지점 -->
|
||||
<div class="page-footer">
|
||||
<!-- HWPX 꼬릿말 테이블 내용 -->
|
||||
</div>
|
||||
</div>
|
||||
```
|
||||
|
||||
## 3. 핵심 CSS 레이아웃 (Layout CSS)
|
||||
|
||||
### 3.1 용지 (.sheet)
|
||||
```css
|
||||
.sheet {
|
||||
width: 210mm;
|
||||
height: 297mm;
|
||||
background: white;
|
||||
margin: 20px auto; /* 화면 미리보기용 */
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
box-sizing: border-box;
|
||||
box-shadow: 0 0 15px rgba(0,0,0,0.1);
|
||||
}
|
||||
```
|
||||
|
||||
### 3.2 인쇄 대응
|
||||
```css
|
||||
@media print {
|
||||
.sheet { margin: 0; break-after: page; box-shadow: none; }
|
||||
body { background: white; }
|
||||
}
|
||||
```
|
||||
|
||||
### 3.3 머릿말 (.page-header)
|
||||
```css
|
||||
.page-header {
|
||||
position: absolute;
|
||||
top: 10mm; /* 상단 여백(20mm)의 중간 */
|
||||
left: 20mm;
|
||||
right: 20mm;
|
||||
font-size: 9pt;
|
||||
padding-bottom: 5px;
|
||||
}
|
||||
```
|
||||
- 머릿말이 **테이블 형태**인 경우: `<table>` 사용, 테두리 없음
|
||||
- HWPX에서 추출한 열 수와 셀 내용을 placeholder로 배치
|
||||
- 다중행 셀은 `<br>`로 줄바꿈
|
||||
|
||||
### 3.4 꼬릿말 (.page-footer)
|
||||
```css
|
||||
.page-footer {
|
||||
position: absolute;
|
||||
bottom: 10mm; /* 하단 여백(20mm)의 중간 */
|
||||
left: 20mm;
|
||||
right: 20mm;
|
||||
font-size: 9pt;
|
||||
color: #555;
|
||||
border-top: 1px solid #eee;
|
||||
padding-top: 5px;
|
||||
}
|
||||
```
|
||||
- 꼬릿말이 **테이블 형태**인 경우: `<table>` 사용, 테두리 없음
|
||||
- 2열 이상일 때 `display: flex; justify-content: space-between` 패턴도 가능
|
||||
- 페이지 번호는 별도 `<span class="pg-num">` 으로
|
||||
|
||||
### 3.5 본문 영역 (.body-content)
|
||||
```css
|
||||
.body-content {
|
||||
position: absolute;
|
||||
top: 20mm;
|
||||
left: 20mm;
|
||||
right: 20mm;
|
||||
bottom: 20mm; /* 또는 auto + JS 제어 */
|
||||
}
|
||||
```
|
||||
|
||||
## 4. 타이포그래피 기본값 (Typography Defaults)
|
||||
|
||||
> HWPX에서 폰트/크기를 추출했으면 그 값을 사용합니다.
|
||||
> 추출 실패 시 아래 기본값을 적용합니다.
|
||||
|
||||
```yaml
|
||||
typography:
|
||||
fontFamily: "'Noto Sans KR', sans-serif"
|
||||
fontImport: "https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700;900&display=swap"
|
||||
|
||||
body:
|
||||
fontSize: 12pt
|
||||
lineHeight: 1.6
|
||||
textAlign: justify
|
||||
wordBreak: keep-all # 한글 단어 중간 끊김 방지
|
||||
|
||||
heading:
|
||||
h1: { fontSize: 20pt, fontWeight: 900 }
|
||||
h2: { fontSize: 18pt, fontWeight: 700 }
|
||||
h3: { fontSize: 14pt, fontWeight: 700 }
|
||||
|
||||
headerFooter:
|
||||
fontSize: 9pt
|
||||
|
||||
table:
|
||||
fontSize: 9.5pt
|
||||
thFontSize: 9pt
|
||||
```
|
||||
|
||||
## 5. 표 스타일 기본값 (Table Defaults)
|
||||
|
||||
```yaml
|
||||
table:
|
||||
width: "100%"
|
||||
borderCollapse: collapse
|
||||
tableLayout: fixed # colgroup 비율 적용 시 fixed 필수
|
||||
borderTop: "2px solid" # 상단 굵은 선 (색상은 HWPX 추출)
|
||||
|
||||
th:
|
||||
fontWeight: 900
|
||||
textAlign: center
|
||||
verticalAlign: middle
|
||||
whiteSpace: nowrap # 헤더 셀은 한 줄 유지
|
||||
wordBreak: keep-all
|
||||
padding: "6px 5px"
|
||||
|
||||
td:
|
||||
textAlign: center
|
||||
verticalAlign: middle
|
||||
wordBreak: keep-all
|
||||
wordWrap: break-word
|
||||
padding: "6px 5px"
|
||||
border: "1px solid #ddd"
|
||||
```
|
||||
|
||||
## 6. 머릿말/꼬릿말 테이블 (Header/Footer Table)
|
||||
|
||||
머릿말/꼬릿말이 HWPX에서 테이블로 구성된 경우:
|
||||
|
||||
```yaml
|
||||
headerFooterTable:
|
||||
border: none # 테두리 없음
|
||||
width: "100%"
|
||||
fontSize: 9pt
|
||||
|
||||
# 열 역할 패턴 (HWPX에서 추출)
|
||||
# 보통 3열: [소속정보 | 빈칸/로고 | 작성자/날짜]
|
||||
# 또는 2열: [제목 | 페이지번호]
|
||||
|
||||
cellStyle:
|
||||
padding: "2px 5px"
|
||||
verticalAlign: middle
|
||||
border: none
|
||||
```
|
||||
|
||||
## 7. 개조식 (Bullet Style)
|
||||
|
||||
```yaml
|
||||
bulletList:
|
||||
marker: "·" # 한국 문서 기본 불릿
|
||||
className: "bullet-list"
|
||||
|
||||
css: |
|
||||
.bullet-list {
|
||||
list-style: none;
|
||||
padding-left: 15px;
|
||||
margin: 5px 0;
|
||||
}
|
||||
.bullet-list li::before {
|
||||
content: "· ";
|
||||
font-weight: bold;
|
||||
}
|
||||
.bullet-list li {
|
||||
margin-bottom: 3px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
```
|
||||
|
||||
## 8. 색상 (Color Scheme)
|
||||
|
||||
> HWPX에서 추출한 색상을 CSS 변수로 주입합니다.
|
||||
> 추출 실패 시 아래 기본값을 사용합니다.
|
||||
|
||||
```yaml
|
||||
colors:
|
||||
# Navy 계열 (기본)
|
||||
primary: "#1a365d"
|
||||
accent: "#2c5282"
|
||||
lightBg: "#EBF4FF"
|
||||
|
||||
# 문서별 오버라이드 (HWPX 추출값)
|
||||
# doc_template_analyzer가 HWPX의 글자색/배경색을 분석하여
|
||||
# 이 값을 덮어씁니다.
|
||||
|
||||
css: |
|
||||
:root {
|
||||
--primary: #1a365d;
|
||||
--accent: #2c5282;
|
||||
--light-bg: #EBF4FF;
|
||||
--bg: #f5f5f5;
|
||||
}
|
||||
```
|
||||
|
||||
## 9. 페이지 분할 규칙 (Page Break Rules)
|
||||
|
||||
```yaml
|
||||
pageBreak:
|
||||
# H1(대제목)에서만 강제 페이지 분할
|
||||
h1Break: true
|
||||
|
||||
# H2/H3이 페이지 하단에 홀로 남지 않도록
|
||||
orphanControl: true
|
||||
orphanMinSpace: 90px # 이 공간 미만이면 다음 페이지로
|
||||
|
||||
# 표/그림은 분할하지 않음
|
||||
atomicBlocks:
|
||||
- table
|
||||
- figure
|
||||
- ".highlight-box"
|
||||
|
||||
# break-inside: avoid 적용 대상
|
||||
avoidBreakInside:
|
||||
- table
|
||||
- figure
|
||||
- ".atomic-block"
|
||||
```
|
||||
|
||||
## 10. 배경 (Preview Background)
|
||||
|
||||
```yaml
|
||||
preview:
|
||||
bodyBackground: "#525659" # 회색 배경 위에 흰색 용지
|
||||
# 인쇄 시 배경 제거 (@media print)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ★ 사용 방법 (How doc_template_analyzer uses this guide)
|
||||
|
||||
1. `doc_template_analyzer._build_full_html()` 호출 시:
|
||||
- 이 가이드 파일을 읽음
|
||||
- HWPX에서 추출한 스타일(색상, 폰트, 크기)이 있으면 오버라이드
|
||||
- 없으면 가이드 기본값 사용
|
||||
|
||||
2. CSS 생성 순서:
|
||||
```
|
||||
가이드 기본값 → HWPX 추출 스타일 오버라이드 → CSS 변수로 통합
|
||||
```
|
||||
|
||||
3. HTML 구조:
|
||||
```
|
||||
가이드의 골격(.sheet > .page-header + .body-content + .page-footer)
|
||||
+ HWPX에서 추출한 placeholder 배치
|
||||
= template.html
|
||||
```
|
||||
|
||||
4. 색상 결정:
|
||||
```
|
||||
HWPX headerTextColor → --primary
|
||||
HWPX headerBgColor → --light-bg
|
||||
없으면 → 가이드 기본값(Navy 계열)
|
||||
```
|
||||
116
templates/hwp_html_defaults.json
Normal file
116
templates/hwp_html_defaults.json
Normal file
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"_comment": "A4 HTML 문서 레이아웃 기본값 - hwp_html_guide.md 참조. HWPX 추출값이 있으면 오버라이드됨",
|
||||
|
||||
"page": {
|
||||
"width": "210mm",
|
||||
"height": "297mm",
|
||||
"background": "white"
|
||||
},
|
||||
|
||||
"margins": {
|
||||
"top": "20mm",
|
||||
"bottom": "20mm",
|
||||
"left": "20mm",
|
||||
"right": "20mm"
|
||||
},
|
||||
|
||||
"headerPosition": {
|
||||
"top": "10mm",
|
||||
"left": "20mm",
|
||||
"right": "20mm"
|
||||
},
|
||||
|
||||
"footerPosition": {
|
||||
"bottom": "10mm",
|
||||
"left": "20mm",
|
||||
"right": "20mm"
|
||||
},
|
||||
|
||||
"bodyContent": {
|
||||
"top": "20mm",
|
||||
"left": "20mm",
|
||||
"right": "20mm",
|
||||
"bottom": "20mm"
|
||||
},
|
||||
|
||||
"bodyMaxHeight": "970px",
|
||||
|
||||
"preview": {
|
||||
"bodyBackground": "#f5f5f5",
|
||||
"sheetMargin": "20px auto",
|
||||
"sheetShadow": "0 0 15px rgba(0,0,0,0.1)"
|
||||
},
|
||||
|
||||
"typography": {
|
||||
"fontFamily": "'Noto Sans KR', sans-serif",
|
||||
"fontImport": "https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700;900&display=swap",
|
||||
"body": {
|
||||
"fontSize": "10pt",
|
||||
"lineHeight": "1.6",
|
||||
"textAlign": "justify",
|
||||
"wordBreak": "keep-all"
|
||||
},
|
||||
"heading": {
|
||||
"h1": { "fontSize": "20pt", "fontWeight": "900" },
|
||||
"h2": { "fontSize": "16pt", "fontWeight": "700" },
|
||||
"h3": { "fontSize": "13pt", "fontWeight": "700" }
|
||||
},
|
||||
"headerFooter": {
|
||||
"fontSize": "9pt"
|
||||
}
|
||||
},
|
||||
|
||||
"colors": {
|
||||
"primary": "#1a365d",
|
||||
"accent": "#2c5282",
|
||||
"lightBg": "#EBF4FF",
|
||||
"text": "#000",
|
||||
"headerText": "#000",
|
||||
"footerText": "#555",
|
||||
"footerBorder": "#eee",
|
||||
"tableBorderTop": "#1a365d",
|
||||
"tableBorder": "#ddd",
|
||||
"tableHeaderBg": "#EBF4FF"
|
||||
},
|
||||
|
||||
"table": {
|
||||
"width": "100%",
|
||||
"borderCollapse": "collapse",
|
||||
"tableLayout": "fixed",
|
||||
"fontSize": "9.5pt",
|
||||
"th": {
|
||||
"fontSize": "9pt",
|
||||
"fontWeight": "900",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"whiteSpace": "nowrap",
|
||||
"padding": "6px 5px"
|
||||
},
|
||||
"td": {
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"wordBreak": "keep-all",
|
||||
"padding": "6px 5px"
|
||||
}
|
||||
},
|
||||
|
||||
"headerFooterTable": {
|
||||
"border": "none",
|
||||
"width": "100%",
|
||||
"fontSize": "9pt",
|
||||
"cellPadding": "2px 5px"
|
||||
},
|
||||
|
||||
"bulletList": {
|
||||
"marker": "·",
|
||||
"className": "bullet-list",
|
||||
"paddingLeft": "15px",
|
||||
"itemMargin": "3px 0"
|
||||
},
|
||||
|
||||
"pageBreak": {
|
||||
"h1Break": true,
|
||||
"orphanControl": true,
|
||||
"orphanMinSpace": "90px"
|
||||
}
|
||||
}
|
||||
2269
templates/index.html
2269
templates/index.html
File diff suppressed because it is too large
Load Diff
165
templates/user/doc_types/user_1770300969/config.json
Normal file
165
templates/user/doc_types/user_1770300969/config.json
Normal file
@@ -0,0 +1,165 @@
|
||||
{
|
||||
"id": "user_1770300969",
|
||||
"name": "3",
|
||||
"icon": "📄",
|
||||
"description": "3",
|
||||
"features": [
|
||||
{
|
||||
"icon": "📋",
|
||||
"text": "발표 기획서"
|
||||
},
|
||||
{
|
||||
"icon": "🎯",
|
||||
"text": "특정 주제에 대한 발표 내용..."
|
||||
},
|
||||
{
|
||||
"icon": "👥",
|
||||
"text": "상위 결재자 또는 발표 승인권자"
|
||||
},
|
||||
{
|
||||
"icon": "📄",
|
||||
"text": "약 2p"
|
||||
}
|
||||
],
|
||||
"thumbnailType": "custom",
|
||||
"enabled": true,
|
||||
"isDefault": false,
|
||||
"order": 100,
|
||||
"template_id": "tpl_1770300969",
|
||||
"context": {
|
||||
"documentDefinition": "발표를 하기 위한 기획서",
|
||||
"documentType": "발표 기획서",
|
||||
"purpose": "특정 주제에 대한 발표 내용과 구성을 사전에 계획하고 승인받기 위함",
|
||||
"perspective": "발표할 내용을 체계적으로 구조화하여 청중에게 효과적으로 전달할 수 있도록 기획하는 관점",
|
||||
"audience": "상위 결재자 또는 발표 승인권자",
|
||||
"tone": "제안형"
|
||||
},
|
||||
"layout": {
|
||||
"hasHeader": true,
|
||||
"headerLayout": {
|
||||
"structure": "테이블",
|
||||
"colCount": 3,
|
||||
"rowCount": 1,
|
||||
"cellTexts": [
|
||||
"총괄기획실 기술기획팀",
|
||||
"",
|
||||
"2025. 2. 5(목)"
|
||||
],
|
||||
"cellLines": [
|
||||
[
|
||||
"총괄기획실",
|
||||
"기술기획팀"
|
||||
],
|
||||
[],
|
||||
[
|
||||
"2025. 2. 5(목)"
|
||||
]
|
||||
]
|
||||
},
|
||||
"hasFooter": true,
|
||||
"footerLayout": {
|
||||
"structure": "테이블",
|
||||
"colCount": 3,
|
||||
"rowCount": 1,
|
||||
"cellTexts": [
|
||||
"기술 로 사람 과 자연 이 함께하는 세상을 만들어 갑니다.",
|
||||
"",
|
||||
""
|
||||
],
|
||||
"cellLines": [
|
||||
[
|
||||
"기술 로 사람 과 자연 이",
|
||||
"함께하는 세상을 만들어 갑니다."
|
||||
],
|
||||
[],
|
||||
[]
|
||||
]
|
||||
},
|
||||
"titleBlock": {
|
||||
"type": "테이블",
|
||||
"colCount": 2,
|
||||
"text": "AI 업무 활용 적용 사례 발표 계획(안)"
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"name": "개요",
|
||||
"hasBulletIcon": true,
|
||||
"hasTable": false,
|
||||
"tableIndex": null
|
||||
},
|
||||
{
|
||||
"name": "발표 구성(안)",
|
||||
"hasBulletIcon": true,
|
||||
"hasTable": false,
|
||||
"tableIndex": null
|
||||
},
|
||||
{
|
||||
"name": "발표 내용",
|
||||
"hasBulletIcon": true,
|
||||
"hasTable": true,
|
||||
"tableIndex": 0
|
||||
}
|
||||
],
|
||||
"overallStyle": {
|
||||
"writingStyle": "개조식",
|
||||
"bulletType": "-",
|
||||
"tableUsage": "보통"
|
||||
}
|
||||
},
|
||||
"structure": {
|
||||
"sectionGuides": [
|
||||
{
|
||||
"name": "개요",
|
||||
"role": "발표의 목적과 배경을 명확히 제시하여 청중의 이해를 돕는 섹션",
|
||||
"writingStyle": "개조식",
|
||||
"contentGuide": "발표 주제, 발표 목적, 대상 청중, 핵심 메시지를 간결하게 나열. 불릿 포인트로 구성하여 핵심 내용을 한눈에 파악할 수 있도록 작성",
|
||||
"hasTable": false
|
||||
},
|
||||
{
|
||||
"name": "발표 구성(안)",
|
||||
"role": "발표의 전체 흐름과 구조를 미리 보여주어 발표 진행 방향을 안내하는 섹션",
|
||||
"writingStyle": "개조식",
|
||||
"contentGuide": "발표 제목과 부제목을 명시하고, 발표의 전체적인 틀을 제시. 청중이 발표 흐름을 예측할 수 있도록 구성",
|
||||
"hasTable": false
|
||||
},
|
||||
{
|
||||
"name": "발표 내용",
|
||||
"role": "실제 발표에서 다룰 구체적인 내용을 체계적으로 정리하여 발표 준비를 완성하는 핵심 섹션",
|
||||
"writingStyle": "개조식",
|
||||
"contentGuide": "발표 순서에 따라 각 단계별 내용을 상세히 기술. 표를 활용하여 구조화된 정보 제공",
|
||||
"hasTable": true,
|
||||
"tableStructure": {
|
||||
"columns": 3,
|
||||
"columnDefs": [
|
||||
{
|
||||
"name": "구분",
|
||||
"role": "발표 단계나 주제를 구분하는 분류 기준",
|
||||
"style": "간결한 키워드나 단계명으로 작성"
|
||||
},
|
||||
{
|
||||
"name": "내용",
|
||||
"role": "각 구분별 구체적인 발표 내용과 세부사항",
|
||||
"style": "상세한 설명과 하위 항목을 포함한 개조식 나열"
|
||||
},
|
||||
{
|
||||
"name": "비고",
|
||||
"role": "추가 정보나 참고사항, 시간 배분 등 부가적인 안내",
|
||||
"style": "간략한 메모나 시간, 페이지 수 등의 보조 정보"
|
||||
}
|
||||
],
|
||||
"rowGuide": "각 행은 발표의 논리적 흐름에 따라 순차적으로 배열되며, 하나의 발표 단계나 주요 주제를 나타냄"
|
||||
}
|
||||
}
|
||||
],
|
||||
"writingPrinciples": [
|
||||
"발표자와 청중 모두가 이해하기 쉽도록 개조식으로 간결하게 작성",
|
||||
"발표의 논리적 흐름을 고려하여 구조화된 정보 제공",
|
||||
"표를 활용하여 복잡한 내용을 체계적으로 정리",
|
||||
"각 섹션은 발표 준비와 실행에 필요한 실용적 정보 중심으로 구성"
|
||||
],
|
||||
"pageEstimate": 2
|
||||
},
|
||||
"options": {},
|
||||
"createdAt": "2026-02-05T23:16:09Z",
|
||||
"updatedAt": "2026-02-05T23:16:09Z"
|
||||
}
|
||||
267
templates/user/doc_types/user_1770300969/content_prompt.json
Normal file
267
templates/user/doc_types/user_1770300969/content_prompt.json
Normal file
@@ -0,0 +1,267 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"document": {
|
||||
"paper": "A4",
|
||||
"layout": "landscape",
|
||||
"margins": {
|
||||
"top": "10.0mm",
|
||||
"bottom": "10.0mm",
|
||||
"left": "20.0mm",
|
||||
"right": "20.0mm",
|
||||
"header": "15.0mm",
|
||||
"footer": "15.0mm",
|
||||
"gutter": "0.0mm"
|
||||
},
|
||||
"purpose_hint": "",
|
||||
"audience_hint": "",
|
||||
"tone_hint": ""
|
||||
},
|
||||
"placeholders": {
|
||||
"HEADER_R1_C1_LINE_1": {
|
||||
"type": "department",
|
||||
"pattern": "조직명",
|
||||
"example": "총괄기획실",
|
||||
"location": "header"
|
||||
},
|
||||
"HEADER_R1_C1_LINE_2": {
|
||||
"type": "team",
|
||||
"pattern": "팀명",
|
||||
"example": "기술기획팀",
|
||||
"location": "header"
|
||||
},
|
||||
"HEADER_R1_C2": {
|
||||
"type": "empty",
|
||||
"pattern": "빈 셀 (로고/여백)",
|
||||
"example": "",
|
||||
"location": "header"
|
||||
},
|
||||
"HEADER_R1_C3": {
|
||||
"type": "date",
|
||||
"pattern": "날짜 (YYYY. M. D)",
|
||||
"example": "2025. 2. 5(목)",
|
||||
"location": "header"
|
||||
},
|
||||
"FOOTER_R1_C1_LINE_1": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "기술 로 사람 과 자연 이",
|
||||
"location": "footer"
|
||||
},
|
||||
"FOOTER_R1_C1_LINE_2": {
|
||||
"type": "slogan",
|
||||
"pattern": "회사 슬로건/비전",
|
||||
"example": "함께하는 세상을 만들어 갑니다.",
|
||||
"location": "footer"
|
||||
},
|
||||
"FOOTER_R1_C2": {
|
||||
"type": "empty",
|
||||
"pattern": "빈 셀 (로고/여백)",
|
||||
"example": "",
|
||||
"location": "footer"
|
||||
},
|
||||
"FOOTER_R1_C3": {
|
||||
"type": "empty",
|
||||
"pattern": "빈 셀 (로고/여백)",
|
||||
"example": "",
|
||||
"location": "footer"
|
||||
},
|
||||
"TITLE_R1_C2": {
|
||||
"type": "doc_title",
|
||||
"pattern": "문서 제목",
|
||||
"example": "AI 업무 활용 적용 사례 발표 계획(안)",
|
||||
"location": "title_block"
|
||||
},
|
||||
"SECTION_1_TITLE": {
|
||||
"type": "section_title",
|
||||
"pattern": "섹션 제목",
|
||||
"example": "",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_1": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image1",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_1_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " 개요",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_2": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image2",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_2_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " AI를 활용한 “업무 효율성 개선 사례”와 이를 구현한 방식에 대한 공유",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_1": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "삼안의 임원 대상 「글벗」 소개와 이를 구현한 방식에 대한 예시 시연",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_3": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image1",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_3_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " 발표 구성(안)",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_4": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image2",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_4_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " 제목 : AI 활용 문서 업무 개선 사례 -「글벗」(사용자의 글쓰기를 돕는 친구) -",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_5": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image2",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_5_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " 발표 내용 ",
|
||||
"location": "body"
|
||||
},
|
||||
"TABLE_1_H_C1": {
|
||||
"type": "table_header",
|
||||
"pattern": "표 열 제목",
|
||||
"example": "구분",
|
||||
"location": "table_1"
|
||||
},
|
||||
"TABLE_1_H_C2": {
|
||||
"type": "table_header",
|
||||
"pattern": "표 열 제목",
|
||||
"example": "내용",
|
||||
"location": "table_1"
|
||||
},
|
||||
"TABLE_1_H_C3": {
|
||||
"type": "table_header",
|
||||
"pattern": "표 열 제목",
|
||||
"example": "비고",
|
||||
"location": "table_1"
|
||||
},
|
||||
"TABLE_1_BODY": {
|
||||
"type": "table_body",
|
||||
"pattern": "표 데이터 행들 (HTML <tr> 반복)",
|
||||
"example": "",
|
||||
"location": "table_1"
|
||||
}
|
||||
},
|
||||
"table_guide": {
|
||||
"1": {
|
||||
"col_headers": [
|
||||
"구분",
|
||||
"내용",
|
||||
"비고"
|
||||
],
|
||||
"col_count": 3,
|
||||
"row_count": 5,
|
||||
"merge_pattern": {
|
||||
"col_0": "col_span",
|
||||
"col_3": "row_group"
|
||||
},
|
||||
"bullet_chars": [
|
||||
"- ",
|
||||
"· "
|
||||
],
|
||||
"example_rows": [
|
||||
[
|
||||
"소개",
|
||||
"개요",
|
||||
"- 현황 및 문제점 : 인적 오류와 추가적 리소스(인력, 시간) 투입 · 동일한 원천데이터로 산출물 형식만 달라짐 (제안서, 보고서 등) ...",
|
||||
"1p"
|
||||
],
|
||||
[
|
||||
"글벗 소개",
|
||||
"- 글벗 기능 소개 · (Input) 로컬, 링크, HTML 구조 · (Process) 목차 구성 및 문서 작성 / (Edit) 편집기 ·..."
|
||||
],
|
||||
[
|
||||
"시연",
|
||||
"글벗 시연",
|
||||
"- (기능 1) (Input) 업로드한 문서 기반 목차 정리 / 작성 - (기능 2) (Process) 웹 편집기 - (기능 3) (Exp...",
|
||||
"글벗 & Visual Studio"
|
||||
]
|
||||
],
|
||||
"col_types": [
|
||||
{
|
||||
"col": 0,
|
||||
"type": "category",
|
||||
"header": "구분"
|
||||
},
|
||||
{
|
||||
"col": 1,
|
||||
"type": "content",
|
||||
"header": "내용"
|
||||
},
|
||||
{
|
||||
"col": 2,
|
||||
"type": "note",
|
||||
"header": "비고"
|
||||
}
|
||||
],
|
||||
"row_bf_pattern": [
|
||||
{
|
||||
"col": 0,
|
||||
"bf_class": "bf-12",
|
||||
"colSpan": 1,
|
||||
"rowSpan": 2
|
||||
},
|
||||
{
|
||||
"col": 1,
|
||||
"bf_class": "bf-8",
|
||||
"colSpan": 1,
|
||||
"rowSpan": 1
|
||||
},
|
||||
{
|
||||
"col": 2,
|
||||
"bf_class": "bf-7",
|
||||
"colSpan": 1,
|
||||
"rowSpan": 1
|
||||
},
|
||||
{
|
||||
"col": 3,
|
||||
"bf_class": "bf-19",
|
||||
"colSpan": 1,
|
||||
"rowSpan": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"writing_guide": {
|
||||
"bullet_styles": [
|
||||
"- ",
|
||||
"· "
|
||||
],
|
||||
"numbering_patterns": [
|
||||
[
|
||||
"^1.",
|
||||
"^2.",
|
||||
"^3)"
|
||||
]
|
||||
],
|
||||
"avg_line_length": 16,
|
||||
"font_primary": "돋움",
|
||||
"font_size_body": "10.0pt"
|
||||
}
|
||||
}
|
||||
184
templates/user/doc_types/user_1770301063/config.json
Normal file
184
templates/user/doc_types/user_1770301063/config.json
Normal file
@@ -0,0 +1,184 @@
|
||||
{
|
||||
"id": "user_1770301063",
|
||||
"name": "55",
|
||||
"icon": "📄",
|
||||
"description": "55",
|
||||
"features": [
|
||||
{
|
||||
"icon": "📋",
|
||||
"text": "평가보고서"
|
||||
},
|
||||
{
|
||||
"icon": "🎯",
|
||||
"text": "완성된 제품/솔루션의 현황을..."
|
||||
},
|
||||
{
|
||||
"icon": "👥",
|
||||
"text": "개발팀, 관리자, 의사결정권자"
|
||||
},
|
||||
{
|
||||
"icon": "📄",
|
||||
"text": "약 2p"
|
||||
}
|
||||
],
|
||||
"thumbnailType": "custom",
|
||||
"enabled": true,
|
||||
"isDefault": false,
|
||||
"order": 100,
|
||||
"template_id": "tpl_1770301063",
|
||||
"context": {
|
||||
"documentDefinition": "개발된 솔루션을 검토하고 개선방향을 제시하기 위한 평가보고서",
|
||||
"documentType": "평가보고서",
|
||||
"purpose": "완성된 제품/솔루션의 현황을 정리하고, 장단점을 분석하여 향후 개선방향을 제시",
|
||||
"perspective": "객관적 평가와 건설적 개선안 도출 관점으로 재구성",
|
||||
"audience": "개발팀, 관리자, 의사결정권자",
|
||||
"tone": "분석형/제안형"
|
||||
},
|
||||
"layout": {
|
||||
"hasHeader": false,
|
||||
"headerLayout": {
|
||||
"structure": "없음"
|
||||
},
|
||||
"hasFooter": false,
|
||||
"footerLayout": {
|
||||
"structure": "없음"
|
||||
},
|
||||
"titleBlock": {
|
||||
"type": "없음"
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"name": "1. (스마트설계팀) SamanPro(V3.0)",
|
||||
"hasBulletIcon": false,
|
||||
"hasTable": false,
|
||||
"tableIndex": null
|
||||
},
|
||||
{
|
||||
"name": "내용 요약",
|
||||
"hasBulletIcon": true,
|
||||
"hasTable": false,
|
||||
"tableIndex": null
|
||||
},
|
||||
{
|
||||
"name": "주요 기능",
|
||||
"hasBulletIcon": true,
|
||||
"hasTable": false,
|
||||
"tableIndex": null
|
||||
},
|
||||
{
|
||||
"name": "관련 의견",
|
||||
"hasBulletIcon": true,
|
||||
"hasTable": false,
|
||||
"tableIndex": null
|
||||
},
|
||||
{
|
||||
"name": "장점",
|
||||
"hasBulletIcon": true,
|
||||
"hasTable": false,
|
||||
"tableIndex": null
|
||||
},
|
||||
{
|
||||
"name": "확인 필요 지점",
|
||||
"hasBulletIcon": true,
|
||||
"hasTable": false,
|
||||
"tableIndex": null
|
||||
},
|
||||
{
|
||||
"name": "개선 방향 제안",
|
||||
"hasBulletIcon": true,
|
||||
"hasTable": false,
|
||||
"tableIndex": null
|
||||
}
|
||||
],
|
||||
"overallStyle": {
|
||||
"writingStyle": "혼합",
|
||||
"bulletType": "·",
|
||||
"tableUsage": "보통"
|
||||
}
|
||||
},
|
||||
"structure": {
|
||||
"sectionGuides": [
|
||||
{
|
||||
"name": "1. (스마트설계팀) SamanPro(V3.0)",
|
||||
"role": "평가 대상 솔루션의 제목과 개발팀 정보를 명시하는 헤더 섹션",
|
||||
"writingStyle": "제목식",
|
||||
"contentGuide": "순번, 개발팀명(괄호), 솔루션명, 버전 정보를 포함한 간결한 제목 형식",
|
||||
"hasTable": false
|
||||
},
|
||||
{
|
||||
"name": "내용 요약",
|
||||
"role": "솔루션의 핵심 목적과 AI 활용 방식을 간략히 개괄하는 섹션",
|
||||
"writingStyle": "서술식",
|
||||
"contentGuide": "솔루션의 주요 목적, AI 기술 활용 방법, 전체적인 접근 방식을 2-3문장으로 요약",
|
||||
"hasTable": false
|
||||
},
|
||||
{
|
||||
"name": "주요 기능",
|
||||
"role": "솔루션에서 제공하는 구체적인 기능들을 카테고리별로 나열하는 섹션",
|
||||
"writingStyle": "개조식",
|
||||
"contentGuide": "기능 카테고리별로 구분하여 나열하며, 각 기능의 세부 사항과 활용 방법을 불릿 포인트로 정리. 부가 설명은 각주나 괄호로 표기",
|
||||
"hasTable": false
|
||||
},
|
||||
{
|
||||
"name": "관련 의견",
|
||||
"role": "솔루션에 대한 전반적인 평가와 특징을 제시하는 섹션",
|
||||
"writingStyle": "개조식",
|
||||
"hasTable": true,
|
||||
"contentGuide": "솔루션의 핵심 특징과 접근 방식을 평가자 관점에서 서술. 표를 통해 구체적 내용을 보완",
|
||||
"tableStructure": {
|
||||
"columns": 3,
|
||||
"columnDefs": [
|
||||
{
|
||||
"name": "좌측 여백",
|
||||
"role": "여백 또는 표시자",
|
||||
"style": "빈 칸"
|
||||
},
|
||||
{
|
||||
"name": "주요 내용",
|
||||
"role": "평가 의견의 핵심 내용",
|
||||
"style": "서술식 문장"
|
||||
},
|
||||
{
|
||||
"name": "우측 여백",
|
||||
"role": "여백 또는 추가 정보",
|
||||
"style": "빈 칸 또는 보조 정보"
|
||||
}
|
||||
],
|
||||
"rowGuide": "평가자의 관점에서 본 솔루션의 특징과 의의를 중앙 열에 기술"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "장점",
|
||||
"role": "솔루션의 긍정적인 측면들을 구체적으로 나열하는 섹션",
|
||||
"writingStyle": "개조식",
|
||||
"contentGuide": "솔루션의 우수한 점들을 불릿 포인트로 나열하며, 정량적 성과나 구체적 사례를 포함하여 설득력 있게 작성",
|
||||
"hasTable": false
|
||||
},
|
||||
{
|
||||
"name": "확인 필요 지점",
|
||||
"role": "솔루션 운영 시 검토가 필요한 사항들을 질문 형태로 제시하는 섹션",
|
||||
"writingStyle": "개조식",
|
||||
"contentGuide": "운영상 고려해야 할 이슈들을 질문 형태로 제기하고, 화살표(→)를 사용하여 해결 방향이나 고려사항을 제안",
|
||||
"hasTable": false
|
||||
},
|
||||
{
|
||||
"name": "개선 방향 제안",
|
||||
"role": "솔루션의 향후 발전 방향과 개선 사항들을 구체적으로 제안하는 섹션",
|
||||
"writingStyle": "개조식",
|
||||
"contentGuide": "개선 영역별로 구분하여 제안사항을 나열하며, 번호나 괄호를 사용하여 세부 항목을 정리. 예시나 구체적 방안을 포함하여 실행 가능한 제안으로 작성",
|
||||
"hasTable": false
|
||||
}
|
||||
],
|
||||
"writingPrinciples": [
|
||||
"기술적 세부사항과 업무 프로세스를 정확히 이해하고 전문적으로 평가",
|
||||
"장점과 개선점을 균형있게 제시하여 객관적 평가 유지",
|
||||
"구체적 사례와 정량적 데이터를 활용하여 설득력 있는 평가 작성",
|
||||
"실무진이 실제 적용할 수 있는 구체적이고 실행 가능한 개선 방안 제시",
|
||||
"기술 발전과 업무 효율성 측면에서 솔루션의 가치를 다각도로 분석"
|
||||
],
|
||||
"pageEstimate": 2
|
||||
},
|
||||
"options": {},
|
||||
"createdAt": "2026-02-05T23:17:43Z",
|
||||
"updatedAt": "2026-02-05T23:17:43Z"
|
||||
}
|
||||
295
templates/user/doc_types/user_1770301063/content_prompt.json
Normal file
295
templates/user/doc_types/user_1770301063/content_prompt.json
Normal file
@@ -0,0 +1,295 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"document": {
|
||||
"paper": "A4",
|
||||
"layout": "landscape",
|
||||
"margins": {
|
||||
"top": "10.0mm",
|
||||
"bottom": "10.0mm",
|
||||
"left": "20.0mm",
|
||||
"right": "20.0mm",
|
||||
"header": "15.0mm",
|
||||
"footer": "15.0mm",
|
||||
"gutter": "0.0mm"
|
||||
},
|
||||
"purpose_hint": "",
|
||||
"audience_hint": "",
|
||||
"tone_hint": ""
|
||||
},
|
||||
"placeholders": {
|
||||
"SECTION_1_TITLE": {
|
||||
"type": "section_title",
|
||||
"pattern": "섹션 제목",
|
||||
"example": "1. (스마트설계팀) SamanPro(V3.0)",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_1": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image9",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_1_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " 내용 요약",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_2": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image10",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_2_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " 반복적 도로 설계 계산 작업과 행정의 자동화를 위한 통합 설계 플랫폼 구축",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_1": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "AI는 앱 개발 과정에서 코드 생성과 에러 해결을 위한 방식으로 활용",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_3": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image10",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_3_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " 주요 기능",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_2": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "계산, 외부 데이터 확인(API) 및 제안서 작성 시 활용할 수 있는 프롬프트 등",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_3": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": " · 포장설계, 동결심도, 수리계산, 확폭계산, 편경사계산 등 설계 관련 계산 기능과 착수 일자와 과업기간 입력 시, 중공일자 표출되는 준공계 보조 계산 기능 등",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_4": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": " · 한국은행 API를 활용하여 (연도별/분기별) 건설투자 GDP 제공",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_5": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": " · 제안서 작성 시 AI에게 입력할 발주처(도로공사, 국토관리청, 지자체)별 기초 프롬프트*",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_6": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": " ※ 프롬프트 구성 : 역학과 목표, 입력 정의, 산출물 요구사항, 작업절차 단계, 출력 형식 등",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_7_RUN_1": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "야근일자 계산기, 모니터 끄기, 자동종료 및 재시작, 계산기, pc 클리너 기능",
|
||||
"location": "body",
|
||||
"run_index": 1
|
||||
},
|
||||
"PARA_7_RUN_2": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "*",
|
||||
"location": "body",
|
||||
"run_index": 2
|
||||
},
|
||||
"PARA_8": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": " ※ GUI 기반의 앱으로 시간에 맞추어 자동종료, 재시작, PC 클린 등 수행",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_4": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image9",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_4_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " 관련 의견",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_9": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "※ 도로배수시설 설계 및 유지관리지침, 설계유량(합리식(Rational formula), 흐름해석(Manning 공식) 등 반영",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_5": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image10",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_5_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " 장점",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_10": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "비개발자가 AI를 통해 개발 및 사내에 공유 (경영진 92회 포함 총 712회 사용 등)",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_11": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "(제안서 프롬프트) 질문-수집-생성 파이프라인까지 체계적으로 구축",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_6": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image10",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_6_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " 확인 필요 지점 ",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_12": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "지침 개정 시, 계산 로직 또는 기준값 등을 사람이 확인, 반영하는 것?",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_13": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": " → 개정 반영 표준화 또는 파이프라인 등을 통하여 운영 체계를 구축하는 것에 대한 고려",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_7": {
|
||||
"type": "image",
|
||||
"pattern": "이미지",
|
||||
"example_ref": "image10",
|
||||
"location": "body"
|
||||
},
|
||||
"IMAGE_7_CAPTION": {
|
||||
"type": "image_caption",
|
||||
"pattern": "이미지 캡션",
|
||||
"example": " 개선 방향 제안",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_14": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "(제안서 프롬프트) ① 상용 AI 모델의 업데이트 상황에 따른 품질 변동, ② 특정 모델에 최적화, ③ 단일 프롬프트에 모든 단계를 포함하여 중간 결과물의 유실될 가능성(단계를 ",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_15": {
|
||||
"type": "slogan",
|
||||
"pattern": "회사 슬로건/비전",
|
||||
"example": "(수리 계산 기준 표출) 기준과 버전 사항들도 함께 계산기 내에서 표출될 필요",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_16": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": " (예) 수리계산(Box/Pipe) : 도로배수시설 설계 및 유지관리지침(2025) 반영 ",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_17": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "(계산 결과 출력) 기준, 입력 변수, 산식, 출력 결과값 등이 바로 활용될 수 있도록 한글(HWP), 엑셀이나 특정 템플릿 등으로 출력을 고려",
|
||||
"location": "body"
|
||||
},
|
||||
"PARA_18": {
|
||||
"type": "text",
|
||||
"pattern": "자유 텍스트",
|
||||
"example": "(향후 로드맵) AI 기반 설계 검토와 BIM 연동 등은 지금 기술 대비 난이도가 크게 상승(AI API 적용, 파이프라인 구축 등), 단계별 검증과 구체적 마일스톤 수립이 필요",
|
||||
"location": "body"
|
||||
},
|
||||
"TABLE_1_BODY": {
|
||||
"type": "table_body",
|
||||
"pattern": "표 데이터 행들 (HTML <tr> 반복)",
|
||||
"example": "",
|
||||
"location": "table_1"
|
||||
}
|
||||
},
|
||||
"table_guide": {
|
||||
"1": {
|
||||
"col_headers": [],
|
||||
"col_count": 3,
|
||||
"row_count": 3,
|
||||
"merge_pattern": {},
|
||||
"bullet_chars": [],
|
||||
"example_rows": [
|
||||
[
|
||||
"",
|
||||
"",
|
||||
""
|
||||
],
|
||||
[
|
||||
"",
|
||||
"지침 기반의 정형 계산 * 과 행정 보조를 GUI 앱으로 통합해 반복 업무를 자동화한 실무 도구",
|
||||
""
|
||||
],
|
||||
[
|
||||
"",
|
||||
"",
|
||||
""
|
||||
]
|
||||
],
|
||||
"col_types": [],
|
||||
"row_bf_pattern": [
|
||||
{
|
||||
"col": 0,
|
||||
"bf_class": "bf-4",
|
||||
"colSpan": 1,
|
||||
"rowSpan": 1
|
||||
},
|
||||
{
|
||||
"col": 1,
|
||||
"bf_class": "bf-5",
|
||||
"colSpan": 1,
|
||||
"rowSpan": 1
|
||||
},
|
||||
{
|
||||
"col": 2,
|
||||
"bf_class": "bf-6",
|
||||
"colSpan": 1,
|
||||
"rowSpan": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"writing_guide": {
|
||||
"bullet_styles": [
|
||||
"- "
|
||||
],
|
||||
"numbering_patterns": [
|
||||
[
|
||||
"^1.",
|
||||
"^2.",
|
||||
"^3)"
|
||||
]
|
||||
],
|
||||
"avg_line_length": 57,
|
||||
"font_primary": "돋움",
|
||||
"font_size_body": "10.0pt"
|
||||
}
|
||||
}
|
||||
15
templates/user/templates/tpl_1770300969/meta.json
Normal file
15
templates/user/templates/tpl_1770300969/meta.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"id": "tpl_1770300969",
|
||||
"name": "3 양식",
|
||||
"original_file": "sample.hwpx",
|
||||
"file_type": ".hwpx",
|
||||
"description": "3에서 추출한 문서 양식",
|
||||
"features": [
|
||||
"폰트: 돋움",
|
||||
"머릿말: 3열",
|
||||
"꼬릿말: 3열",
|
||||
"표: 5x4"
|
||||
],
|
||||
"created_at": "2026-02-05T23:16:09Z",
|
||||
"source": "doc_template_analyzer"
|
||||
}
|
||||
222
templates/user/templates/tpl_1770300969/semantic_map.json
Normal file
222
templates/user/templates/tpl_1770300969/semantic_map.json
Normal file
@@ -0,0 +1,222 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"table_roles": {
|
||||
"0": {
|
||||
"role": "footer_table",
|
||||
"match_source": "footer",
|
||||
"matched_texts": [
|
||||
"기술 로 사람 과 자연 이 함께하는 세상을 만들어 갑니다."
|
||||
]
|
||||
},
|
||||
"1": {
|
||||
"role": "header_table",
|
||||
"match_source": "header",
|
||||
"matched_texts": [
|
||||
"2025. 2. 5(목)",
|
||||
"총괄기획실 기술기획팀"
|
||||
]
|
||||
},
|
||||
"2": {
|
||||
"role": "title_block",
|
||||
"title_text": "AI 업무 활용 적용 사례 발표 계획(안)"
|
||||
},
|
||||
"3": {
|
||||
"role": "data_table",
|
||||
"header_row": 0,
|
||||
"col_headers": [
|
||||
"구분",
|
||||
"내용",
|
||||
"비고"
|
||||
],
|
||||
"row_count": 5,
|
||||
"col_count": 4
|
||||
}
|
||||
},
|
||||
"body_tables": [
|
||||
3
|
||||
],
|
||||
"title_table": 2,
|
||||
"sections": [],
|
||||
"style_mappings": {
|
||||
"char_pr": {},
|
||||
"border_fill": {
|
||||
"1": {
|
||||
"css_class": "bf-1",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"2": {
|
||||
"css_class": "bf-2",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"3": {
|
||||
"css_class": "bf-3",
|
||||
"bg": "",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #000000",
|
||||
"border-right": "0.12mm solid #000000",
|
||||
"border-top": "0.12mm solid #000000",
|
||||
"border-bottom": "0.12mm solid #000000"
|
||||
}
|
||||
},
|
||||
"4": {
|
||||
"css_class": "bf-4",
|
||||
"bg": "",
|
||||
"borders": {
|
||||
"border-bottom": "0.7mm solid #3057B9"
|
||||
}
|
||||
},
|
||||
"5": {
|
||||
"css_class": "bf-5",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"6": {
|
||||
"css_class": "bf-6",
|
||||
"bg": "",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.12mm solid #BBBBBB",
|
||||
"border-bottom": "0.3mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"7": {
|
||||
"css_class": "bf-7",
|
||||
"bg": "",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.12mm solid #BBBBBB",
|
||||
"border-bottom": "0.12mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"8": {
|
||||
"css_class": "bf-8",
|
||||
"bg": "#EDEDED",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.12mm solid #BBBBBB",
|
||||
"border-bottom": "0.12mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"9": {
|
||||
"css_class": "bf-9",
|
||||
"bg": "#EDEDED",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.12mm solid #BBBBBB",
|
||||
"border-bottom": "0.3mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"10": {
|
||||
"css_class": "bf-10",
|
||||
"bg": "#DCDCDC",
|
||||
"borders": {
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.3mm solid #BBBBBB",
|
||||
"border-bottom": "0.12mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"11": {
|
||||
"css_class": "bf-11",
|
||||
"bg": "#EDEDED",
|
||||
"borders": {
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.5mm solid #BBBBBB",
|
||||
"border-bottom": "0.3mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"12": {
|
||||
"css_class": "bf-12",
|
||||
"bg": "#EDEDED",
|
||||
"borders": {
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.12mm solid #BBBBBB",
|
||||
"border-bottom": "0.5mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"13": {
|
||||
"css_class": "bf-13",
|
||||
"bg": "#DCDCDC",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.3mm solid #BBBBBB",
|
||||
"border-bottom": "0.12mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"14": {
|
||||
"css_class": "bf-14",
|
||||
"bg": "#DCDCDC",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-top": "0.3mm solid #BBBBBB",
|
||||
"border-bottom": "0.12mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"15": {
|
||||
"css_class": "bf-15",
|
||||
"bg": "#EDEDED",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.5mm solid #BBBBBB",
|
||||
"border-bottom": "0.12mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"16": {
|
||||
"css_class": "bf-16",
|
||||
"bg": "#EDEDED",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.12mm solid #BBBBBB",
|
||||
"border-bottom": "0.5mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"17": {
|
||||
"css_class": "bf-17",
|
||||
"bg": "",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.5mm solid #BBBBBB",
|
||||
"border-bottom": "0.12mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"18": {
|
||||
"css_class": "bf-18",
|
||||
"bg": "",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-right": "0.12mm solid #999999",
|
||||
"border-top": "0.12mm solid #BBBBBB",
|
||||
"border-bottom": "0.5mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"19": {
|
||||
"css_class": "bf-19",
|
||||
"bg": "",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-top": "0.12mm solid #BBBBBB",
|
||||
"border-bottom": "0.5mm solid #BBBBBB"
|
||||
}
|
||||
},
|
||||
"20": {
|
||||
"css_class": "bf-20",
|
||||
"bg": "",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #999999",
|
||||
"border-top": "0.5mm solid #BBBBBB",
|
||||
"border-bottom": "0.3mm solid #BBBBBB"
|
||||
}
|
||||
}
|
||||
},
|
||||
"para_pr": {}
|
||||
}
|
||||
}
|
||||
4688
templates/user/templates/tpl_1770300969/style.json
Normal file
4688
templates/user/templates/tpl_1770300969/style.json
Normal file
File diff suppressed because it is too large
Load Diff
590
templates/user/templates/tpl_1770300969/template.html
Normal file
590
templates/user/templates/tpl_1770300969/template.html
Normal file
@@ -0,0 +1,590 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Template</title>
|
||||
<style>
|
||||
@page {
|
||||
size: 210.0mm 297.0mm;
|
||||
margin: 10.0mm 20.0mm 10.0mm 20.0mm;
|
||||
}
|
||||
@media screen {
|
||||
@page { margin: 0; }
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 10.0pt;
|
||||
line-height: 180%;
|
||||
color: #000000;
|
||||
margin: 0; padding: 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 170mm;
|
||||
margin: 0 auto;
|
||||
padding: 10.0mm 20.0mm 10.0mm 20.0mm;
|
||||
}
|
||||
|
||||
/* 헤더/푸터 */
|
||||
.doc-header { margin-bottom: 4.5mm; }
|
||||
.doc-footer { margin-top: 6.0mm; }
|
||||
.doc-header table, .doc-footer table {
|
||||
width: 100%; border-collapse: collapse;
|
||||
}
|
||||
.doc-header td { padding: 2px 4px; vertical-align: middle; }
|
||||
.doc-footer td { padding: 2px 4px; vertical-align: middle; }
|
||||
|
||||
/* 제목 블록 */
|
||||
.title-block { margin-bottom: 4mm; }
|
||||
.title-table { width: 100%; border-collapse: collapse; }
|
||||
.title-block h1 {
|
||||
font-family: 'HY헤드라인M', sans-serif;
|
||||
font-size: 15.0pt;
|
||||
font-weight: normal;
|
||||
color: #000000;
|
||||
text-align: justify;
|
||||
line-height: 180%;
|
||||
margin: 0; padding: 4mm 0;
|
||||
}
|
||||
|
||||
/* 섹션 */
|
||||
.section-title {
|
||||
font-size: 13.0pt;
|
||||
font-weight: normal;
|
||||
color: #000000;
|
||||
margin-bottom: 3mm;
|
||||
}
|
||||
.section { margin-bottom: 6mm; }
|
||||
.section-content { text-align: justify; }
|
||||
/* 이미지/문단 (content_order) */
|
||||
.img-wrap { text-align: center; margin: 3mm 0; }
|
||||
.img-wrap img { max-width: 100%; height: auto; }
|
||||
.img-caption { font-size: 9pt; color: #666; margin-top: 1mm; }
|
||||
|
||||
/* 데이터 표 */
|
||||
.data-table {
|
||||
width: 100%; border-collapse: collapse; margin: 4mm 0;
|
||||
}
|
||||
.data-table th, .data-table td {
|
||||
border: none;
|
||||
font-size: 10.0pt;
|
||||
line-height: 180%;
|
||||
text-align: justify;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.data-table th {
|
||||
font-weight: bold; text-align: center;
|
||||
}
|
||||
|
||||
/* borderFill → CSS 클래스 */
|
||||
.bf-1 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-2 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-3 {
|
||||
border-left: 0.12mm solid #000000;
|
||||
border-right: 0.12mm solid #000000;
|
||||
border-top: 0.12mm solid #000000;
|
||||
border-bottom: 0.12mm solid #000000;
|
||||
}
|
||||
.bf-4 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: 0.7mm solid #3057B9;
|
||||
}
|
||||
.bf-5 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-6 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.12mm solid #BBBBBB;
|
||||
border-bottom: 0.3mm solid #BBBBBB;
|
||||
}
|
||||
.bf-7 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.12mm solid #BBBBBB;
|
||||
border-bottom: 0.12mm solid #BBBBBB;
|
||||
}
|
||||
.bf-8 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.12mm solid #BBBBBB;
|
||||
border-bottom: 0.12mm solid #BBBBBB;
|
||||
background-color: #EDEDED;
|
||||
}
|
||||
.bf-9 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.12mm solid #BBBBBB;
|
||||
border-bottom: 0.3mm solid #BBBBBB;
|
||||
background-color: #EDEDED;
|
||||
}
|
||||
.bf-10 {
|
||||
border-left: none;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.3mm solid #BBBBBB;
|
||||
border-bottom: 0.12mm solid #BBBBBB;
|
||||
background-color: #DCDCDC;
|
||||
}
|
||||
.bf-11 {
|
||||
border-left: none;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.5mm solid #BBBBBB;
|
||||
border-bottom: 0.3mm solid #BBBBBB;
|
||||
background-color: #EDEDED;
|
||||
}
|
||||
.bf-12 {
|
||||
border-left: none;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.12mm solid #BBBBBB;
|
||||
border-bottom: 0.5mm solid #BBBBBB;
|
||||
background-color: #EDEDED;
|
||||
}
|
||||
.bf-13 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.3mm solid #BBBBBB;
|
||||
border-bottom: 0.12mm solid #BBBBBB;
|
||||
background-color: #DCDCDC;
|
||||
}
|
||||
.bf-14 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: none;
|
||||
border-top: 0.3mm solid #BBBBBB;
|
||||
border-bottom: 0.12mm solid #BBBBBB;
|
||||
background-color: #DCDCDC;
|
||||
}
|
||||
.bf-15 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.5mm solid #BBBBBB;
|
||||
border-bottom: 0.12mm solid #BBBBBB;
|
||||
background-color: #EDEDED;
|
||||
}
|
||||
.bf-16 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.12mm solid #BBBBBB;
|
||||
border-bottom: 0.5mm solid #BBBBBB;
|
||||
background-color: #EDEDED;
|
||||
}
|
||||
.bf-17 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.5mm solid #BBBBBB;
|
||||
border-bottom: 0.12mm solid #BBBBBB;
|
||||
}
|
||||
.bf-18 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: 0.12mm solid #999999;
|
||||
border-top: 0.12mm solid #BBBBBB;
|
||||
border-bottom: 0.5mm solid #BBBBBB;
|
||||
}
|
||||
.bf-19 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: none;
|
||||
border-top: 0.12mm solid #BBBBBB;
|
||||
border-bottom: 0.5mm solid #BBBBBB;
|
||||
}
|
||||
.bf-20 {
|
||||
border-left: 0.12mm solid #999999;
|
||||
border-right: none;
|
||||
border-top: 0.5mm solid #BBBBBB;
|
||||
border-bottom: 0.3mm solid #BBBBBB;
|
||||
}
|
||||
|
||||
/* charPr → CSS 클래스 (글자 모양) */
|
||||
.cpr-0 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 10.0pt;
|
||||
}
|
||||
.cpr-1 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 9.0pt;
|
||||
letter-spacing: -0.45pt;
|
||||
transform: scaleX(0.95);
|
||||
display: inline-block;
|
||||
}
|
||||
.cpr-2 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 8.0pt;
|
||||
}
|
||||
.cpr-3 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 9.0pt;
|
||||
}
|
||||
.cpr-4 {
|
||||
font-family: 'HY헤드라인M', sans-serif;
|
||||
font-size: 15.0pt;
|
||||
}
|
||||
.cpr-5 {
|
||||
font-family: '한양중고딕', sans-serif;
|
||||
font-size: 8.0pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
.cpr-6 {
|
||||
font-family: 'HY헤드라인M', sans-serif;
|
||||
font-size: 10.0pt;
|
||||
}
|
||||
.cpr-7 {
|
||||
font-family: '휴먼고딕', sans-serif;
|
||||
font-size: 8.0pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
.cpr-8 {
|
||||
font-family: '휴먼고딕', sans-serif;
|
||||
font-size: 8.0pt;
|
||||
}
|
||||
.cpr-9 {
|
||||
font-family: '휴먼고딕', sans-serif;
|
||||
font-size: 8.0pt;
|
||||
font-weight: bold;
|
||||
color: #0000FF;
|
||||
}
|
||||
.cpr-10 {
|
||||
font-family: '휴먼고딕', sans-serif;
|
||||
font-size: 8.0pt;
|
||||
font-weight: bold;
|
||||
color: #FF0000;
|
||||
}
|
||||
.cpr-11 {
|
||||
font-family: '휴먼고딕', sans-serif;
|
||||
font-size: 8.0pt;
|
||||
font-weight: bold;
|
||||
color: #008000;
|
||||
}
|
||||
.cpr-12 {
|
||||
font-family: '휴먼고딕', sans-serif;
|
||||
font-size: 8.0pt;
|
||||
letter-spacing: -0.4pt;
|
||||
transform: scaleX(0.9);
|
||||
display: inline-block;
|
||||
}
|
||||
.cpr-13 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 9.0pt;
|
||||
}
|
||||
.cpr-14 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 10.0pt;
|
||||
}
|
||||
.cpr-15 {
|
||||
font-family: 'HY헤드라인M', sans-serif;
|
||||
font-size: 15.0pt;
|
||||
}
|
||||
.cpr-16 {
|
||||
font-family: '휴먼명조', sans-serif;
|
||||
font-size: 9.0pt;
|
||||
letter-spacing: -0.18pt;
|
||||
transform: scaleX(0.95);
|
||||
display: inline-block;
|
||||
}
|
||||
.cpr-17 {
|
||||
font-family: '휴먼명조', sans-serif;
|
||||
font-size: 10.0pt;
|
||||
letter-spacing: -0.2pt;
|
||||
transform: scaleX(0.95);
|
||||
display: inline-block;
|
||||
}
|
||||
.cpr-18 {
|
||||
font-family: '-윤고딕130', sans-serif;
|
||||
font-size: 13.0pt;
|
||||
letter-spacing: -0.65pt;
|
||||
transform: scaleX(0.98);
|
||||
display: inline-block;
|
||||
}
|
||||
.cpr-19 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 13.0pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
.cpr-20 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 10.0pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
.cpr-21 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 11.0pt;
|
||||
}
|
||||
.cpr-22 {
|
||||
font-family: '휴먼명조', sans-serif;
|
||||
font-size: 11.0pt;
|
||||
letter-spacing: -0.22pt;
|
||||
transform: scaleX(0.95);
|
||||
display: inline-block;
|
||||
}
|
||||
.cpr-23 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 10.0pt;
|
||||
letter-spacing: -1.0pt;
|
||||
}
|
||||
.cpr-24 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 10.0pt;
|
||||
letter-spacing: -1.7pt;
|
||||
}
|
||||
.cpr-25 {
|
||||
font-family: '한양견명조', sans-serif;
|
||||
font-size: 16.0pt;
|
||||
}
|
||||
.cpr-26 {
|
||||
font-family: '돋움', sans-serif;
|
||||
font-size: 11.0pt;
|
||||
}
|
||||
|
||||
/* paraPr → CSS 클래스 (문단 모양) */
|
||||
.ppr-0 {
|
||||
text-align: justify;
|
||||
line-height: 130%;
|
||||
text-indent: -4.6mm;
|
||||
}
|
||||
.ppr-1 {
|
||||
text-align: justify;
|
||||
line-height: 160%;
|
||||
}
|
||||
.ppr-2 {
|
||||
text-align: justify;
|
||||
line-height: 150%;
|
||||
}
|
||||
.ppr-3 {
|
||||
text-align: justify;
|
||||
line-height: 180%;
|
||||
}
|
||||
.ppr-4 {
|
||||
text-align: center;
|
||||
line-height: 180%;
|
||||
}
|
||||
.ppr-5 {
|
||||
text-align: justify;
|
||||
line-height: 110%;
|
||||
}
|
||||
.ppr-6 {
|
||||
text-align: right;
|
||||
line-height: 110%;
|
||||
}
|
||||
.ppr-7 {
|
||||
text-align: justify;
|
||||
line-height: 100%;
|
||||
}
|
||||
.ppr-8 {
|
||||
text-align: justify;
|
||||
line-height: 180%;
|
||||
margin-left: 1.8mm;
|
||||
margin-right: 1.8mm;
|
||||
}
|
||||
.ppr-9 {
|
||||
text-align: justify;
|
||||
line-height: 180%;
|
||||
}
|
||||
.ppr-10 {
|
||||
text-align: justify;
|
||||
line-height: 180%;
|
||||
margin-left: 1.8mm;
|
||||
}
|
||||
.ppr-11 {
|
||||
text-align: left;
|
||||
line-height: 180%;
|
||||
}
|
||||
.ppr-12 {
|
||||
text-align: justify;
|
||||
line-height: 170%;
|
||||
text-indent: -4.3mm;
|
||||
margin-left: 1.8mm;
|
||||
margin-bottom: 1.8mm;
|
||||
}
|
||||
.ppr-13 {
|
||||
text-align: justify;
|
||||
line-height: 140%;
|
||||
margin-left: 2.8mm;
|
||||
margin-top: 0.7mm;
|
||||
margin-bottom: 1.1mm;
|
||||
}
|
||||
.ppr-14 {
|
||||
text-align: justify;
|
||||
line-height: 155%;
|
||||
margin-top: 2.1mm;
|
||||
}
|
||||
.ppr-15 {
|
||||
text-align: justify;
|
||||
line-height: 160%;
|
||||
margin-top: 4.2mm;
|
||||
margin-bottom: 1.8mm;
|
||||
}
|
||||
.ppr-16 {
|
||||
text-align: left;
|
||||
line-height: 180%;
|
||||
}
|
||||
.ppr-17 {
|
||||
text-align: justify;
|
||||
line-height: 140%;
|
||||
text-indent: -4.9mm;
|
||||
margin-left: 2.8mm;
|
||||
margin-bottom: 1.1mm;
|
||||
}
|
||||
.ppr-18 {
|
||||
text-align: justify;
|
||||
line-height: 140%;
|
||||
margin-left: 2.8mm;
|
||||
margin-top: 1.8mm;
|
||||
margin-bottom: 1.1mm;
|
||||
}
|
||||
.ppr-19 {
|
||||
text-align: justify;
|
||||
line-height: 160%;
|
||||
margin-top: 3.5mm;
|
||||
margin-bottom: 1.8mm;
|
||||
}
|
||||
.ppr-20 {
|
||||
text-align: center;
|
||||
line-height: 160%;
|
||||
}
|
||||
.ppr-21 {
|
||||
text-align: justify;
|
||||
line-height: 180%;
|
||||
margin-bottom: 3.0mm;
|
||||
}
|
||||
.ppr-22 {
|
||||
text-align: justify;
|
||||
line-height: 140%;
|
||||
margin-left: 2.8mm;
|
||||
margin-top: 1.8mm;
|
||||
margin-bottom: 1.1mm;
|
||||
}
|
||||
|
||||
/* named styles */
|
||||
/* .sty-0 '바탕글' = cpr-0 + ppr-3 */
|
||||
/* .sty-1 '머리말' = cpr-3 + ppr-2 */
|
||||
/* .sty-2 '쪽 번호' = cpr-2 + ppr-1 */
|
||||
/* .sty-3 '각주' = cpr-1 + ppr-0 */
|
||||
/* .sty-4 '미주' = cpr-1 + ppr-0 */
|
||||
/* .sty-5 '표위' = cpr-6 + ppr-4 */
|
||||
/* .sty-6 '표옆' = cpr-0 + ppr-8 */
|
||||
/* .sty-7 '표내용' = cpr-0 + ppr-10 */
|
||||
/* .sty-8 '주)' = cpr-13 + ppr-9 */
|
||||
/* .sty-9 '#큰아이콘' = cpr-18 + ppr-14 */
|
||||
/* .sty-10 '개요1' = cpr-25 + ppr-21 */
|
||||
/* .sty-11 'xl63' = cpr-26 + ppr-20 */
|
||||
|
||||
/* 표 상세 (tools 추출값) */
|
||||
.tbl-1 col:nth-child(1) { width: 11%; }
|
||||
.tbl-1 col:nth-child(2) { width: 20%; }
|
||||
.tbl-1 col:nth-child(3) { width: 58%; }
|
||||
.tbl-1 col:nth-child(4) { width: 11%; }
|
||||
.tbl-1 td, .tbl-1 th {
|
||||
padding: 1.5mm 0.5mm 1.5mm 0.5mm;
|
||||
}
|
||||
.tbl-1 thead th { height: 6.5mm; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<div class="doc-header">
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width:25%">
|
||||
<col style="width:17%">
|
||||
<col style="width:58%">
|
||||
</colgroup>
|
||||
<tr>
|
||||
<td class="bf-5">{{HEADER_R1_C1_LINE_1}}<br>{{HEADER_R1_C1_LINE_2}}</td>
|
||||
<td class="bf-5"></td>
|
||||
<td class="bf-5">{{HEADER_R1_C3}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="title-block">
|
||||
<table class="title-table">
|
||||
<colgroup>
|
||||
<col style="width:2%">
|
||||
<col style="width:98%">
|
||||
</colgroup>
|
||||
<tr>
|
||||
<td class="bf-4"></td>
|
||||
<td class="bf-4">{{TITLE_R1_C2}}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="img-wrap ppr-15">
|
||||
{{IMAGE_1}}
|
||||
<p class="img-caption">{{IMAGE_1_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<div class="img-wrap ppr-12">
|
||||
{{IMAGE_2}}
|
||||
<p class="img-caption">{{IMAGE_2_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<p class="ppr-18"><span class="cpr-22">{{PARA_1}}</span></p>
|
||||
|
||||
<div class="img-wrap ppr-19">
|
||||
{{IMAGE_3}}
|
||||
<p class="img-caption">{{IMAGE_3_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<div class="img-wrap ppr-12">
|
||||
{{IMAGE_4}}
|
||||
<p class="img-caption">{{IMAGE_4_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<div class="img-wrap ppr-12">
|
||||
{{IMAGE_5}}
|
||||
<p class="img-caption">{{IMAGE_5_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<table class="data-table tbl-1">
|
||||
<colgroup>
|
||||
<col style="width:11%">
|
||||
<col style="width:20%">
|
||||
<col style="width:58%">
|
||||
<col style="width:11%">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="bf-10" colspan="2">{{TABLE_1_H_C1}}</th>
|
||||
<th class="bf-13">{{TABLE_1_H_C2}}</th>
|
||||
<th class="bf-14">{{TABLE_1_H_C3}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{TABLE_1_BODY}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="doc-footer">
|
||||
<table>
|
||||
<colgroup>
|
||||
<col style="width:35%">
|
||||
<col style="width:6%">
|
||||
<col style="width:59%">
|
||||
</colgroup>
|
||||
<tr>
|
||||
<td class="bf-5">{{FOOTER_R1_C1_LINE_1}}<br>{{FOOTER_R1_C1_LINE_2}}</td>
|
||||
<td class="bf-5"></td>
|
||||
<td class="bf-5"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
13
templates/user/templates/tpl_1770301063/meta.json
Normal file
13
templates/user/templates/tpl_1770301063/meta.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"id": "tpl_1770301063",
|
||||
"name": "55 양식",
|
||||
"original_file": "발표자료복사본.hwpx",
|
||||
"file_type": ".hwpx",
|
||||
"description": "55에서 추출한 문서 양식",
|
||||
"features": [
|
||||
"폰트: 돋움",
|
||||
"표: 3x3"
|
||||
],
|
||||
"created_at": "2026-02-05T23:17:43Z",
|
||||
"source": "doc_template_analyzer"
|
||||
}
|
||||
94
templates/user/templates/tpl_1770301063/semantic_map.json
Normal file
94
templates/user/templates/tpl_1770301063/semantic_map.json
Normal file
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"version": "1.0",
|
||||
"table_roles": {
|
||||
"0": {
|
||||
"role": "data_table",
|
||||
"header_row": null,
|
||||
"col_headers": [],
|
||||
"row_count": 3,
|
||||
"col_count": 3
|
||||
}
|
||||
},
|
||||
"body_tables": [
|
||||
0
|
||||
],
|
||||
"title_table": null,
|
||||
"sections": [
|
||||
{
|
||||
"index": 1,
|
||||
"title": "1. (스마트설계팀) SamanPro(V3.0)",
|
||||
"pattern_type": "numbered"
|
||||
}
|
||||
],
|
||||
"style_mappings": {
|
||||
"char_pr": {},
|
||||
"border_fill": {
|
||||
"1": {
|
||||
"css_class": "bf-1",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"2": {
|
||||
"css_class": "bf-2",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"3": {
|
||||
"css_class": "bf-3",
|
||||
"bg": "",
|
||||
"borders": {
|
||||
"border-left": "0.12mm solid #000000",
|
||||
"border-right": "0.12mm solid #000000",
|
||||
"border-top": "0.12mm solid #000000",
|
||||
"border-bottom": "0.12mm solid #000000"
|
||||
}
|
||||
},
|
||||
"4": {
|
||||
"css_class": "bf-4",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"5": {
|
||||
"css_class": "bf-5",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"6": {
|
||||
"css_class": "bf-6",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"7": {
|
||||
"css_class": "bf-7",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"8": {
|
||||
"css_class": "bf-8",
|
||||
"bg": "#F3F3F3",
|
||||
"borders": {}
|
||||
},
|
||||
"9": {
|
||||
"css_class": "bf-9",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"10": {
|
||||
"css_class": "bf-10",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"11": {
|
||||
"css_class": "bf-11",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
},
|
||||
"12": {
|
||||
"css_class": "bf-12",
|
||||
"bg": "",
|
||||
"borders": {}
|
||||
}
|
||||
},
|
||||
"para_pr": {}
|
||||
}
|
||||
}
|
||||
3355
templates/user/templates/tpl_1770301063/style.json
Normal file
3355
templates/user/templates/tpl_1770301063/style.json
Normal file
File diff suppressed because it is too large
Load Diff
507
templates/user/templates/tpl_1770301063/template.html
Normal file
507
templates/user/templates/tpl_1770301063/template.html
Normal file
@@ -0,0 +1,507 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Template</title>
|
||||
<style>
|
||||
@page {
|
||||
size: 210.0mm 297.0mm;
|
||||
margin: 10.0mm 20.0mm 10.0mm 20.0mm;
|
||||
}
|
||||
@media screen {
|
||||
@page { margin: 0; }
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 10.0pt;
|
||||
line-height: 180%;
|
||||
color: #000000;
|
||||
margin: 0; padding: 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 170mm;
|
||||
margin: 0 auto;
|
||||
padding: 10.0mm 20.0mm 10.0mm 20.0mm;
|
||||
}
|
||||
|
||||
/* 헤더/푸터 */
|
||||
.doc-header { margin-bottom: 4.5mm; }
|
||||
.doc-footer { margin-top: 6.0mm; }
|
||||
.doc-header table, .doc-footer table {
|
||||
width: 100%; border-collapse: collapse;
|
||||
}
|
||||
.doc-header td { padding: 2px 4px; vertical-align: middle; }
|
||||
.doc-footer td { padding: 2px 4px; vertical-align: middle; }
|
||||
|
||||
/* 제목 블록 */
|
||||
.title-block { margin-bottom: 4mm; }
|
||||
.title-table { width: 100%; border-collapse: collapse; }
|
||||
.title-block h1 {
|
||||
font-size: 15pt; font-weight: normal;
|
||||
text-align: center; margin: 0; padding: 4mm 0;
|
||||
}
|
||||
|
||||
/* 섹션 */
|
||||
.section-title {
|
||||
font-size: 13.0pt;
|
||||
font-weight: normal;
|
||||
color: #000000;
|
||||
margin-bottom: 3mm;
|
||||
}
|
||||
.section { margin-bottom: 6mm; }
|
||||
.section-content { text-align: justify; }
|
||||
/* 이미지/문단 (content_order) */
|
||||
.img-wrap { text-align: center; margin: 3mm 0; }
|
||||
.img-wrap img { max-width: 100%; height: auto; }
|
||||
.img-caption { font-size: 9pt; color: #666; margin-top: 1mm; }
|
||||
|
||||
/* 데이터 표 */
|
||||
.data-table {
|
||||
width: 100%; border-collapse: collapse; margin: 4mm 0;
|
||||
}
|
||||
.data-table th, .data-table td {
|
||||
border: none;
|
||||
font-size: 10.0pt;
|
||||
line-height: 180%;
|
||||
text-align: justify;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.data-table th {
|
||||
font-weight: bold; text-align: center;
|
||||
}
|
||||
|
||||
/* borderFill → CSS 클래스 */
|
||||
.bf-1 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-2 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-3 {
|
||||
border-left: 0.12mm solid #000000;
|
||||
border-right: 0.12mm solid #000000;
|
||||
border-top: 0.12mm solid #000000;
|
||||
border-bottom: 0.12mm solid #000000;
|
||||
}
|
||||
.bf-4 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-5 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-6 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-7 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-8 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
background-color: #F3F3F3;
|
||||
}
|
||||
.bf-9 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-10 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-11 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
.bf-12 {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-top: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
/* charPr → CSS 클래스 (글자 모양) */
|
||||
.cpr-0 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 10.0pt;
|
||||
}
|
||||
.cpr-1 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 9.0pt;
|
||||
letter-spacing: -0.45pt;
|
||||
transform: scaleX(0.95);
|
||||
display: inline-block;
|
||||
}
|
||||
.cpr-2 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 8.0pt;
|
||||
}
|
||||
.cpr-3 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 9.0pt;
|
||||
}
|
||||
.cpr-4 {
|
||||
font-family: 'HY헤드라인M', sans-serif;
|
||||
font-size: 10.0pt;
|
||||
}
|
||||
.cpr-5 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 9.0pt;
|
||||
}
|
||||
.cpr-6 {
|
||||
font-family: '-윤고딕130', sans-serif;
|
||||
font-size: 13.0pt;
|
||||
letter-spacing: -0.65pt;
|
||||
transform: scaleX(0.98);
|
||||
display: inline-block;
|
||||
}
|
||||
.cpr-7 {
|
||||
font-family: '한양견명조', sans-serif;
|
||||
font-size: 16.0pt;
|
||||
}
|
||||
.cpr-8 {
|
||||
font-family: '돋움', sans-serif;
|
||||
font-size: 11.0pt;
|
||||
}
|
||||
.cpr-9 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 1.0pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
.cpr-10 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 11.0pt;
|
||||
letter-spacing: -0.55pt;
|
||||
}
|
||||
.cpr-11 {
|
||||
font-family: '나눔명조', sans-serif;
|
||||
font-size: 11.0pt;
|
||||
}
|
||||
.cpr-12 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 13.0pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
.cpr-13 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 11.0pt;
|
||||
}
|
||||
.cpr-14 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 11.0pt;
|
||||
font-weight: bold;
|
||||
}
|
||||
.cpr-15 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 9.0pt;
|
||||
letter-spacing: -0.18pt;
|
||||
transform: scaleX(0.95);
|
||||
display: inline-block;
|
||||
}
|
||||
.cpr-16 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 11.0pt;
|
||||
letter-spacing: -0.22pt;
|
||||
transform: scaleX(0.95);
|
||||
display: inline-block;
|
||||
}
|
||||
.cpr-17 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 11.0pt;
|
||||
letter-spacing: -0.22pt;
|
||||
transform: scaleX(0.95);
|
||||
display: inline-block;
|
||||
}
|
||||
.cpr-18 {
|
||||
font-family: '맑은 고딕', sans-serif;
|
||||
font-size: 11.0pt;
|
||||
letter-spacing: -0.44pt;
|
||||
}
|
||||
|
||||
/* paraPr → CSS 클래스 (문단 모양) */
|
||||
.ppr-0 {
|
||||
text-align: justify;
|
||||
line-height: 130%;
|
||||
text-indent: -4.6mm;
|
||||
}
|
||||
.ppr-1 {
|
||||
text-align: justify;
|
||||
line-height: 160%;
|
||||
}
|
||||
.ppr-2 {
|
||||
text-align: justify;
|
||||
line-height: 150%;
|
||||
}
|
||||
.ppr-3 {
|
||||
text-align: justify;
|
||||
line-height: 180%;
|
||||
}
|
||||
.ppr-4 {
|
||||
text-align: center;
|
||||
line-height: 180%;
|
||||
}
|
||||
.ppr-5 {
|
||||
text-align: justify;
|
||||
line-height: 180%;
|
||||
margin-left: 1.8mm;
|
||||
margin-right: 1.8mm;
|
||||
}
|
||||
.ppr-6 {
|
||||
text-align: justify;
|
||||
line-height: 180%;
|
||||
}
|
||||
.ppr-7 {
|
||||
text-align: justify;
|
||||
line-height: 180%;
|
||||
margin-left: 1.8mm;
|
||||
}
|
||||
.ppr-8 {
|
||||
text-align: justify;
|
||||
line-height: 170%;
|
||||
text-indent: -4.3mm;
|
||||
margin-left: 1.8mm;
|
||||
margin-bottom: 1.8mm;
|
||||
}
|
||||
.ppr-9 {
|
||||
text-align: justify;
|
||||
line-height: 155%;
|
||||
margin-top: 2.1mm;
|
||||
}
|
||||
.ppr-10 {
|
||||
text-align: justify;
|
||||
line-height: 140%;
|
||||
text-indent: -4.9mm;
|
||||
margin-left: 2.8mm;
|
||||
margin-bottom: 1.1mm;
|
||||
}
|
||||
.ppr-11 {
|
||||
text-align: justify;
|
||||
line-height: 140%;
|
||||
margin-left: 2.8mm;
|
||||
margin-top: 1.8mm;
|
||||
margin-bottom: 1.1mm;
|
||||
}
|
||||
.ppr-12 {
|
||||
text-align: justify;
|
||||
line-height: 160%;
|
||||
margin-top: 3.5mm;
|
||||
margin-bottom: 1.8mm;
|
||||
}
|
||||
.ppr-13 {
|
||||
text-align: center;
|
||||
line-height: 160%;
|
||||
}
|
||||
.ppr-14 {
|
||||
text-align: justify;
|
||||
line-height: 180%;
|
||||
margin-bottom: 3.0mm;
|
||||
}
|
||||
.ppr-15 {
|
||||
text-align: justify;
|
||||
line-height: 140%;
|
||||
margin-left: 2.8mm;
|
||||
margin-bottom: 1.8mm;
|
||||
}
|
||||
.ppr-16 {
|
||||
text-align: center;
|
||||
line-height: 170%;
|
||||
text-indent: -4.3mm;
|
||||
margin-left: 1.8mm;
|
||||
margin-bottom: 1.8mm;
|
||||
}
|
||||
.ppr-17 {
|
||||
text-align: justify;
|
||||
line-height: 170%;
|
||||
text-indent: -4.3mm;
|
||||
margin-left: 1.8mm;
|
||||
margin-top: 1.8mm;
|
||||
margin-bottom: 1.8mm;
|
||||
}
|
||||
.ppr-18 {
|
||||
text-align: justify;
|
||||
line-height: 140%;
|
||||
margin-left: 2.8mm;
|
||||
margin-bottom: 1.8mm;
|
||||
}
|
||||
.ppr-19 {
|
||||
text-align: justify;
|
||||
line-height: 160%;
|
||||
text-indent: -6.1mm;
|
||||
margin-left: 2.8mm;
|
||||
margin-bottom: 1.1mm;
|
||||
}
|
||||
.ppr-20 {
|
||||
text-align: justify;
|
||||
line-height: 160%;
|
||||
text-indent: -7.9mm;
|
||||
margin-left: 2.8mm;
|
||||
margin-bottom: 1.1mm;
|
||||
}
|
||||
.ppr-21 {
|
||||
text-align: justify;
|
||||
line-height: 160%;
|
||||
margin-top: 1.8mm;
|
||||
margin-bottom: 1.1mm;
|
||||
}
|
||||
.ppr-22 {
|
||||
text-align: justify;
|
||||
line-height: 160%;
|
||||
margin-bottom: 1.8mm;
|
||||
}
|
||||
|
||||
/* named styles */
|
||||
/* .sty-0 '바탕글' = cpr-0 + ppr-3 */
|
||||
/* .sty-1 '머리말' = cpr-3 + ppr-2 */
|
||||
/* .sty-2 '쪽 번호' = cpr-2 + ppr-1 */
|
||||
/* .sty-3 '각주' = cpr-1 + ppr-0 */
|
||||
/* .sty-4 '미주' = cpr-1 + ppr-0 */
|
||||
/* .sty-5 '표위' = cpr-4 + ppr-4 */
|
||||
/* .sty-6 '표옆' = cpr-0 + ppr-5 */
|
||||
/* .sty-7 '표내용' = cpr-0 + ppr-7 */
|
||||
/* .sty-8 '주)' = cpr-5 + ppr-6 */
|
||||
/* .sty-9 '#큰아이콘' = cpr-6 + ppr-9 */
|
||||
/* .sty-10 '개요1' = cpr-7 + ppr-14 */
|
||||
/* .sty-11 'xl63' = cpr-8 + ppr-13 */
|
||||
|
||||
/* 표 상세 (tools 추출값) */
|
||||
.tbl-1 col:nth-child(1) { width: 1%; }
|
||||
.tbl-1 col:nth-child(2) { width: 99%; }
|
||||
.tbl-1 col:nth-child(3) { width: 1%; }
|
||||
.tbl-1 td, .tbl-1 th {
|
||||
padding: 0.6mm 0.0mm 0.0mm 0.0mm;
|
||||
}
|
||||
.tbl-1 thead th { height: 1.0mm; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- no header -->
|
||||
|
||||
<div class="section" data-section="1">
|
||||
<p class="section-title ppr-22 cpr-12">{{SECTION_1_TITLE}}</p>
|
||||
|
||||
<div class="img-wrap ppr-12">
|
||||
{{IMAGE_1}}
|
||||
<p class="img-caption">{{IMAGE_1_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<div class="img-wrap ppr-8">
|
||||
{{IMAGE_2}}
|
||||
<p class="img-caption">{{IMAGE_2_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<p class="ppr-15"><span class="cpr-13">{{PARA_1}}</span></p>
|
||||
|
||||
<div class="img-wrap ppr-8">
|
||||
{{IMAGE_3}}
|
||||
<p class="img-caption">{{IMAGE_3_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<p class="ppr-15"><span class="cpr-13">{{PARA_2}}</span></p>
|
||||
|
||||
<p class="ppr-19"><span class="cpr-13">{{PARA_3}}</span></p>
|
||||
|
||||
<p class="ppr-20"><span class="cpr-13">{{PARA_4}}</span></p>
|
||||
|
||||
<p class="ppr-20"><span class="cpr-13">{{PARA_5}}</span></p>
|
||||
|
||||
<p class="ppr-10"><span class="cpr-15">{{PARA_6}}</span></p>
|
||||
|
||||
<p class="ppr-11"><span class="cpr-16">{{PARA_7_RUN_1}}</span><span class="cpr-17">{{PARA_7_RUN_2}}</span></p>
|
||||
|
||||
<p class="ppr-10"><span class="cpr-15">{{PARA_8}}</span></p>
|
||||
|
||||
<div class="img-wrap ppr-12">
|
||||
{{IMAGE_4}}
|
||||
<p class="img-caption">{{IMAGE_4_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<table class="data-table tbl-1">
|
||||
<colgroup>
|
||||
<col style="width:1%">
|
||||
<col style="width:99%">
|
||||
<col style="width:1%">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="bf-4">{{TABLE_1_H_C1}}</th>
|
||||
<th class="bf-5">{{TABLE_1_H_C2}}</th>
|
||||
<th class="bf-6">{{TABLE_1_H_C3}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{TABLE_1_BODY}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<p class="ppr-10"><span class="cpr-15">{{PARA_9}}</span></p>
|
||||
|
||||
<div class="img-wrap ppr-17">
|
||||
{{IMAGE_5}}
|
||||
<p class="img-caption">{{IMAGE_5_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<p class="ppr-15"><span class="cpr-13">{{PARA_10}}</span></p>
|
||||
|
||||
<p class="ppr-15"><span class="cpr-13">{{PARA_11}}</span></p>
|
||||
|
||||
<div class="img-wrap ppr-17">
|
||||
{{IMAGE_6}}
|
||||
<p class="img-caption">{{IMAGE_6_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<p class="ppr-15"><span class="cpr-13">{{PARA_12}}</span></p>
|
||||
|
||||
<p class="ppr-18"><span class="cpr-13">{{PARA_13}}</span></p>
|
||||
|
||||
<div class="img-wrap ppr-17">
|
||||
{{IMAGE_7}}
|
||||
<p class="img-caption">{{IMAGE_7_CAPTION}}</p>
|
||||
</div>
|
||||
|
||||
<p class="ppr-15"><span class="cpr-13">{{PARA_14}}</span></p>
|
||||
|
||||
<p class="ppr-15"><span class="cpr-13">{{PARA_15}}</span></p>
|
||||
|
||||
<p class="ppr-10"><span class="cpr-15">{{PARA_16}}</span></p>
|
||||
|
||||
<p class="ppr-15"><span class="cpr-13">{{PARA_17}}</span></p>
|
||||
|
||||
<p class="ppr-15"><span class="cpr-18">{{PARA_18}}</span></p>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<!-- no footer -->
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user