Web Analytics

hwpers

⭐ 179 stars Korean by Indosaram

hwpers

Crates.io Documentation CI License

전체 레이아웃 렌더링 지원을 갖춘 한국어 한글 워드 프로세서(HWP) 파일 파싱을 위한 Rust 라이브러리입니다.

기능

파서 (HWP 파일 읽기)

작성기 (HWP 파일 생성) - v0.3.0 이상

빠른 시작

Cargo.toml에 다음을 추가하세요:

[dependencies]
hwpers = "0.3"

기본 사용법

use hwpers::HwpReader;

// Parse an HWP file let document = HwpReader::from_file("document.hwp")?;

// Extract text content let text = document.extract_text(); println!("{}", text);

// Access document properties if let Some(props) = document.get_properties() { println!("Pages: {}", props.total_page_count); }

// Iterate through sections and paragraphs for (i, section) in document.sections().enumerate() { println!("Section {}: {} paragraphs", i, section.paragraphs.len()); for paragraph in §ion.paragraphs { if let Some(text) = ¶graph.text { println!(" {}", text.content); } } }

시각적 레이아웃 렌더링

use hwpers::{HwpReader, render::{HwpRenderer, RenderOptions}};

let document = HwpReader::from_file("document.hwp")?;

// Create renderer with custom options let options = RenderOptions { dpi: 96, scale: 1.0, show_margins: false, show_baselines: false, };

let renderer = HwpRenderer::new(&document, options); let result = renderer.render();

// Export first page to SVG if let Some(svg) = result.to_svg(0) { std::fs::write("page1.svg", svg)?; }

println!("Rendered {} pages", result.pages.len());

문서 생성 (v0.3.0+)

use hwpers::writer::HwpWriter;
use hwpers::model::hyperlink::Hyperlink;

// Create a new document let mut writer = HwpWriter::new();

// Add formatted text writer.add_aligned_paragraph( "제목", hwpers::writer::style::ParagraphAlignment::Center )?;

// Add hyperlinks let link = Hyperlink::new_url("Rust", "https://rust-lang.org"); writer.add_paragraph_with_hyperlinks( "Visit Rust website", vec![link] )?;

// Configure page layout writer.set_custom_page_size(210.0, 297.0, // A4 size hwpers::model::page_layout::PageOrientation::Portrait)?; writer.set_page_margins_mm(20.0, 20.0, 20.0, 20.0);

// Add header and footer writer.add_header("Document Header"); writer.add_footer_with_page_number("Page ", hwpers::model::header_footer::PageNumberFormat::Numeric);

// Save the document writer.save_to_file("output.hwp")?;

고급 서식 접근 권한

// Access character and paragraph formatting
for section in document.sections() {
    for paragraph in §ion.paragraphs {
        // Get paragraph formatting
        if let Some(para_shape) = document.get_para_shape(paragraph.para_shape_id as usize) {
            println!("Indent: {}, Alignment: {}", 
                para_shape.indent, 
                para_shape.get_alignment()
            );
        }
        
        // Get character formatting runs
        if let Some(char_shapes) = ¶graph.char_shapes {
            for pos_shape in &char_shapes.char_positions {
                if let Some(char_shape) = document.get_char_shape(pos_shape.char_shape_id as usize) {
                    println!("Position {}: Size {}, Bold: {}", 
                        pos_shape.position,
                        char_shape.base_size / 100,
                        char_shape.is_bold()
                    );
                }
            }
        }
    }
}

지원 기능

문서 구조

콘텐츠 유형

레이아웃 및 렌더링

고급 기능

명령줄 도구

라이브러리에는 HWP 파일을 검사하기 위한 명령줄 도구가 포함되어 있습니다:

# Install the tool
cargo install hwpers

Inspect an HWP file

hwp_info document.hwp

형식 지원

이 라이브러리는 HWP 5.0 형식 파일을 지원합니다. 이전 HWP 형식의 경우, 먼저 형식 변환 도구 사용을 고려하세요.

작성기 기능 (v0.3.0+)

HWP 작성기 기능이 크게 개선되어 포괄적인 기능 지원을 제공합니다:

✅ 완전 구현

❌ 아직 구현되지 않음

🔧 알려진 문제

기여하기

기여는 언제나 환영합니다! 자유롭게 Pull Request를 제출해 주세요. 주요 변경 사항의 경우, 먼저 변경하고자 하는 내용을 논의하기 위해 이슈를 열어 주세요.

라이선스

이 프로젝트는 다음 중 하나의 라이선스 하에 있습니다.

선택에 따라 적용됩니다.

감사의 글

--- Tranlated By Open Ai Tx | Last indexed: 2026-03-13 ---