テンプレートとして使用したいプロジェクト フォルダーの 1 つに Word 文書 (.docx) を保持しています。
このテンプレートには、ユーザー用のカスタム ヘッダーおよびフッター行が含まれています。ユーザーが自分のデータをワード形式でダウンロードできるようにしたい。このために、ユーザーデータを受け入れ、テンプレートを参照してテンプレートのプレースホルダーを置き換える新しい単語ファイルを作成し、ダウンロード用に新しいファイルを返す関数を作成したいと思います(サーバーに保存せずに)。つまり、テンプレートはテンプレートとして無傷である必要があります。
以下は私が試していることです。プレースホルダーを交換できました。ただし、作成したコンテンツをダウンロード可能なファイルとしてユーザーに提供する方法はわかりません。新しいコンテンツを別のワード ファイルとしてサーバーに再度保存したくありません。
public void GenerateWord(string userData)
{
string templateDoc = HttpContext.Current.Server.MapPath("~/App_Data/Template.docx");
// Open the new Package
Package pkg = Package.Open(templateDoc, FileMode.Open, FileAccess.ReadWrite);
// Specify the URI of the part to be read
Uri uri = new Uri("/word/document.xml", UriKind.Relative);
PackagePart part = pkg.GetPart(uri);
XmlDocument xmlMainXMLDoc = new XmlDocument();
xmlMainXMLDoc.Load(part.GetStream(FileMode.Open, FileAccess.Read));
xmlMainXMLDoc.InnerXml = ReplacePlaceHoldersInTemplate(userData, xmlMainXMLDoc.InnerXml);
// Open the stream to write document
StreamWriter partWrt = new StreamWriter(part.GetStream(FileMode.Open, FileAccess.Write));
xmlMainXMLDoc.Save(partWrt);
partWrt.Flush();
partWrt.Close();
pkg.Close();
}
private string ReplacePlaceHoldersInTemplate(string toReplace, string templateBody)
{
templateBody = templateBody.Replace("#myPlaceHolder#", toReplace);
return templateBody;
}
以下の行は、テンプレート ファイル自体に内容を保存していると思いますが、これは望ましくありません。
xmlMainXMLDoc.Save(partWrt);
新しいコンテンツをダウンロード可能なワードファイルとしてユーザーに返すことができるこのコードをどのように変更すればよいですか?