0

テンプレートとして使用したいプロジェクト フォルダーの 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);

新しいコンテンツをダウンロード可能なワードファイルとしてユーザーに返すことができるこのコードをどのように変更すればよいですか?

4

1 に答える 1

0

ここで解決策を見つけました!

このコードを使用すると、テンプレート ファイルを読み取って必要に応じて変更し、応答をダウンロード可能な添付ファイルとして送信できます。

于 2013-06-10T07:29:00.183 に答える