Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Markdown Studio

Markdown Studio는 Java Swing 기반의 문서 작성 프로그램입니다.
마크다운처럼 빠르게 작성하면서도, 보고서 작성에 필요한 A4 페이지 단위 미리보기PDF 내보내기를 함께 제공하는 것을 목표로 만들었습니다.

프로젝트 배경

기존 한글/Word 계열 프로그램은 서식 기능은 강력하지만 빠른 작성 흐름이 다소 무겁게 느껴질 수 있고,
Notion/Obsidian 계열 프로그램은 작성 경험은 좋지만 보고서처럼 A4 기준으로 어디서 페이지가 끊기는지 미리 보기 어렵다는 아쉬움이 있습니다.

이 프로젝트는 두 방향의 장점을 섞어 다음을 해결하고자 했습니다.

  • 마크다운 기반의 빠른 작성
  • A4 페이지 기준 미리보기
  • 사용자가 직접 \pagebreak를 넣어 쪽 나눔 제어
  • 목차 이동
  • 이미지 + 캡션
  • 하이라이트 / 글자색 / 코드 블록
  • PDF 저장

즉, **“마크다운처럼 쓰되, 보고서처럼 페이지를 의식하면서 작성할 수 있는 프로그램”**을 만드는 것이 핵심 목표입니다.

최근 수정 사항

최근 버전에서는 문서 작성 흐름과 보고서 미리보기 목적에 맞게 아래 내용을 보강했습니다.

  • 미리보기를 A4 비율의 고정 페이지로 수정
  • 페이지 사이를 구분하는 굵은 구분선 추가
  • 페이지 번호를 기본 우측 하단에 배치
  • 페이지 번호 위치를 왼쪽 / 가운데 / 오른쪽으로 선택 가능
  • 미리보기 상단의 불필요한 샘플 머리말 제거
  • 좌측 편집기를 안정적인 JTextArea 기반으로 바꿔, 입력 후 삭제 시 레이아웃이 깨지던 문제 완화
  • Ctrl + Z, Ctrl + Y 실행 취소 / 다시 실행 지원
  • 코드 블록 렌더링 구조를 정리해 Swing HTML 렌더링 깨짐 완화
  • run.bat를 수정해 이미 빌드된 JAR가 있으면 바로 실행되도록 개선

주요 기능

  • 마크다운 작성 기능
  • A4 페이지형 미리보기
  • 페이지 나누기 기능
  • 단 나누기 기능
  • 하이라이트 기능
  • 글자 색상 변경 기능
  • 이미지 삽입 기능
  • 이미지 캡션 기능
  • /목차 명령으로 목차 생성
  • 목차 클릭 시 해당 위치로 이동
  • 왼쪽 / 가운데 / 오른쪽 정렬
  • 코드 블록 작성 기능
  • 체크박스 리스트 기능
  • 표 작성 문법
  • 자동 저장 기능
  • 단어 수 / 글자 수 / 줄 수 표시
  • 리스트 자동 이어쓰기
  • Ctrl + Z, Ctrl + Y
  • 파일 새로 만들기 / 열기 / 저장 / 다른 이름으로 저장
  • Markdown 파일 저장
  • PDF 내보내기

실행 방법

1. 빌드

build.bat

빌드가 완료되면 아래 파일이 생성됩니다.

  • dist\MarkdownStudio.jar

2. 실행

run.bat

또는 직접 실행할 수도 있습니다.

java -jar dist\MarkdownStudio.jar

run.bat는 이미 dist\MarkdownStudio.jar가 있으면 재빌드 없이 바로 실행하고,
JAR가 없을 때만 자동으로 빌드를 시도합니다.

실행하면:

  • 왼쪽은 마크다운 입력창
  • 오른쪽은 A4 페이지형 미리보기
  • 페이지 사이에는 굵은 구분선이 표시됨
  • 아래 상태바 오른쪽에는 단어 수 / 글자 수 / 줄 수
  • 저장하지 않은 문서는 autosave\untitled-autosave.md
  • 한 번 저장한 문서는 이후 수정 시 3초 뒤 자동 저장

사용한 기술

  • Java 17
  • Java Swing
  • JTextArea 기반 마크다운 입력
  • JEditorPane 기반 HTML 문서 미리보기
  • Java PDF 프린터 기반 PDF 내보내기
  • 브라우저 헤드리스 출력 fallback

PDF 내보내기 안내

PDF 저장은 아래 순서로 시도합니다.

  1. Microsoft Print to PDF 또는 Hancom PDF 같은 PDF 프린터
  2. 실패 시 Microsoft Edge 또는 Google Chrome 헤드리스 출력 fallback

즉, Windows 기본 PDF 프린터가 있으면 가장 안정적으로 동작합니다.

둘 다 사용할 수 없으면 PDF 내보내기에서 안내 메시지가 표시됩니다.

마크다운 확장 문법

자세한 문법은 아래 문서를 참고하세요.

대표 예시는 다음과 같습니다.

\header 운영체제 과제 보고서
# 보고서 제목
/목차

## 소개
이 문장은 ==하이라이트== 와 {color:#d94841}글자 색상{/color}을 사용합니다.

- [ ] 아직 안 끝난 작업
- [x] 이미 끝난 작업

| 항목 | 설명 |
| :--- | :--- |
| 자동 저장 | 저장한 문서는 3초 뒤 자동 저장 |
| 상태바 | 단어 수와 글자 수 표시 |

\columns 2
왼쪽 단 내용
\column
오른쪽 단 내용
\columns-end

![실험 결과](images/result.png "그림 1. 실험 결과")

\`\`\`java
System.out.println("code block");
\`\`\`

\pagebreak
## 다음 페이지
::: align center
가운데 정렬 예시
:::

프로젝트 구조

src/com/turnproject/markdownstudio/
├─ Main.java
├─ MainFrame.java
├─ MainFrameActions.java
├─ EditorToolbarBuilder.java
├─ AppMenuBarBuilder.java
├─ AutoSaveClient.java
├─ AutoSaveManager.java
├─ DocumentStatistics.java
├─ EditorBehavior.java
├─ DocumentTemplateFactory.java
├─ DocumentSession.java
├─ MarkdownRenderer.java
├─ RenderedDocument.java
├─ PageNumberAlignment.java
├─ PdfExporter.java
├─ FileManager.java
├─ EditorUtils.java
├─ LineNumberView.java
└─ NoWrapTextPane.java

examples/
└─ sample_document.md

유지보수 포인트

  • UI 구성은 MainFrame, EditorToolbarBuilder, AppMenuBarBuilder로 역할을 분리했습니다.
  • 마크다운 렌더링은 MarkdownRenderer가 담당합니다.
  • 페이지 번호 위치 선택은 PageNumberAlignment가 담당합니다.
  • 파일 입출력은 FileManager, PDF 내보내기는 PdfExporter가 담당합니다.
  • 기본 문서 템플릿은 DocumentTemplateFactory에서 관리합니다.
  • 자동 리스트 이어쓰기는 EditorBehavior에서 관리합니다.
  • 자동 저장은 AutoSaveManager가 담당합니다.
  • 단어 수/글자 수 계산은 DocumentStatistics가 담당합니다.
  • 편집기 안정성 유지를 위해 좌측 편집 영역은 plain text 기반으로 유지했습니다.

제출용 체크 포인트

  • 실행 파일: dist\MarkdownStudio.jar
  • 문서: README.md, docs/SYNTAX_GUIDE.md, docs/ARCHITECTURE.md, SBOM.md
  • 예제 문서: examples/sample_document.md

참고

현재 버전은 **“마크다운 편집 + A4 문서 미리보기”**에 집중한 구조입니다.
즉, Word처럼 화면에서 직접 서식을 끌어다 놓는 완전 WYSIWYG 방식이 아니라,
마크다운을 작성하면 오른쪽에서 A4 페이지 형태 결과를 확인하는 방식입니다.

또한 현재는 내용이 자동으로 다음 페이지로 자연스럽게 넘어가는 완전한 조판 엔진은 아니며,
사용자가 \pagebreak를 넣어 쪽 나눔을 직접 맞추는 흐름을 중심으로 설계했습니다.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages