IronWord에서 저장 시 헤더 사라짐

This article was translated from English: Does it need improvement?
Translated
View the article in English

참고해 주세요이 동작은 한 환경에서만 보고되었으며 IronWord의 변경 로그로 확인되지 않았습니다 — 다른 IronWord 가이드는 SaveAs()를 표준 저장 호출로 사용하며 헤더 손실이 보고되지 않았습니다. 확인된 제품 결함이 아니라 환경별 특이 사항일 수 있는 것으로 간주하고, 아래 해결 방법을 적용하기 전에 사용자 환경에서 확인하세요.

일부 환경에서는 IronWord로 DOCX 템플릿을 채우고 SaveAs()로 결과를 저장할 때, 자리 표시자가 올바르게 병합되더라도 생성된 파일에서 템플릿의 헤더가 사라지는 것이 관찰되었습니다.

Header (e.g. "City Attorney Cover Sheet") is visible in the original DOCX
but missing in the generated file after calling SaveAs().

교체되지 않은 자리 표시자와 헤더가 없는 Word 템플릿

이 문제가 관찰된 환경에서는 SaveAs() 대신 Save()로 문서를 작성했을 때 헤더가 유지되었습니다. 이는 다른 환경이나 IronWord의 변경 로그에서 확인되지 않았습니다 — 다른 IronWord 가이드는 SaveAs()를 표준 저장 호출로 사용해도 헤더 손실 문제가 없으므로, 확인된 제품 결함이 아니라 환경별 사항으로 간주하세요.

해결책

1. 템플릿 로드하기

WordDocument으로 소스 DOCX를 엽니다.

using IronWord;
using System.Collections.Generic;

var templatePath = @"C:\Templates\CityAttorneyCoverSheetTemplate.docx";
var outputPath   = @"C:\Output\merged.docx";

var doc = new WordDocument(templatePath);
using IronWord;
using System.Collections.Generic;

var templatePath = @"C:\Templates\CityAttorneyCoverSheetTemplate.docx";
var outputPath   = @"C:\Output\merged.docx";

var doc = new WordDocument(templatePath);
Imports IronWord
Imports System.Collections.Generic

Dim templatePath As String = "C:\Templates\CityAttorneyCoverSheetTemplate.docx"
Dim outputPath As String = "C:\Output\merged.docx"

Dim doc As New WordDocument(templatePath)
$vbLabelText   $csharpLabel

2. 자리 표시자 교체

템플릿 교체의 권장 접근 방식인 doc.Texts으로 값을 병합하세요.

var replacements = new Dictionary<string, string>
{
    ["{CaseNumber}"] = "2026-CR-12345",
    ["{DefendantName}"] = "John Doe",
    ["{DefendantAge}"] = "34",
    ["{DefendantAttorney}"] = "Jane Smith",
};

foreach (var kv in replacements)
{
    doc.Texts.ForEach(t => t.Replace(kv.Key, kv.Value));
}
var replacements = new Dictionary<string, string>
{
    ["{CaseNumber}"] = "2026-CR-12345",
    ["{DefendantName}"] = "John Doe",
    ["{DefendantAge}"] = "34",
    ["{DefendantAttorney}"] = "Jane Smith",
};

foreach (var kv in replacements)
{
    doc.Texts.ForEach(t => t.Replace(kv.Key, kv.Value));
}
Imports System.Collections.Generic

Dim replacements As New Dictionary(Of String, String) From {
    {"{CaseNumber}", "2026-CR-12345"},
    {"{DefendantName}", "John Doe"},
    {"{DefendantAge}", "34"},
    {"{DefendantAttorney}", "Jane Smith"}
}

For Each kv In replacements
    doc.Texts.ForEach(Sub(t) t.Replace(kv.Key, kv.Value))
Next
$vbLabelText   $csharpLabel

doc.Texts를 반복하여 텍스트 본문 전체에 있는 모든 자리 표시자 토큰을 병합 값으로 교체하세요.

3. SaveAs()가 아닌 Save()로 저장하기

이 문제가 관찰된 환경에서는 출력을 doc.Save(outputPath)로 작성하면 헤더가 그대로 유지되었고, doc.SaveAs(outputPath)는 이를 제거했습니다. 이를 시도해 볼 해결 방법으로 간주하고, 두 메서드 간의 확인된 보편적 동작 차이로 간주하지 마세요.

doc.Save(outputPath);
doc.Save(outputPath);
doc.Save(outputPath)
$vbLabelText   $csharpLabel

헤더가 유지되고 자리 표시자가 채워진 병합된 Word 문서

메모

작업 흐름에서 SaveAs()가 필요한 경우: 최신 IronWord 버전에서 헤더가 해당 환경에서 정상적으로 유지되는지 확인하세요. 문제가 다시 발생할 경우: 행동이 조사되는 동안 임시 완화책으로 이전에 작동하던 버전으로 고정하세요.

참고해 주세요자리 표시자는 헤더가 손실되었음에도 불구하고 반복 중에 여전히 찾아지고 교체되므로, 성공적인 병합만으로 헤더가 유지되었다는 확인을 의미하지 않습니다. 출력을 열고 확인하세요.

Curtis Chau
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

시작할 준비 되셨나요?
Nuget 다운로드 48,355 | 버전: 2026.7 방금 출시
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요? PM > Install-Package IronWord
샘플 실행 데이터를 워드 문서로 변환 확인.