0

我是 C# 的新手,我的程序中有一个“保存到文件”选项,它将富文本框的输出保存在 Word 文档中,当用户选择此选项时,我使用了 saveFileDialogue 框供用户选择文件名和位置。

我想要的是,每次当用户选择此选项时,保存输出的 word 文档都有一个预定义的页眉和页脚图像......

非常感谢您提前提供的帮助!

下面是我的“保存到文件”代码。

    private void menuItem7_Click(object sender, EventArgs e)
    {
        // Create a SaveFileDialog to request a path and file name to save to.
        SaveFileDialog saveFile1 = new SaveFileDialog();

        // Initialize the SaveFileDialog to specify the RTF extension for the file.
        saveFile1.DefaultExt = "*.rtf";
        saveFile1.Filter = "RTF Files|*.rtf";

        // Determine if the user selected a file name from the saveFileDialog.
        if (saveFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
                saveFile1.FileName.Length > 0)
        {
            // Save the contents of the RichTextBox into the file.
            richTextBox1.SaveFile(saveFile1.FileName,
            RichTextBoxStreamType.PlainText);
        }
    }
4

3 回答 3

0

这是一个如何使用 Open XML SDK 的示例...

源代码

您必须在“此处为原始文本”的位置插入文本。

于 2012-07-30T15:56:24.607 回答
0

您为“新手”选择了一项非常艰巨的任务。要混合图像和文本,您将需要 PostScript、PDF、DocX 或 RTF 等复杂格式。控制分页,例如只指定一次页眉和页脚图像并让它们自动显示在每个页面的顶部和底部,是一项更加困难的任务。

你没有给我们足够的信息来告诉你从哪里开始。例如,什么是“我的程序”?它像文字处理器吗?您必须使用这些System.Drawing.Printing.PrintDocument类来定义打印文档、在到达每页的适当位置时绘制页眉和页脚、执行行布局、中断和分页。对于专业程序员来说,这是一项艰巨的工作。

或者您只是想生成另一个程序可以输出的带有页眉和页脚的文件?你可以输出 RTF;规范在这里。这是一个更容易的任务;您也许可以利用现有的RTF 解释器

或者您想在屏幕上显示这些文档?Han 建议通过自动化使用现有应用程序是一个很好的建议。

将您的任务分解为更小的需求并调查每个需求。

于 2012-07-30T16:24:34.447 回答
0

首先,创建一个函数来获取图像、宽度和高度并返回 rtf:

这是一个png

    public string GetImage(string path, int width, int height)
    {
        var stream = new MemoryStream();
        var img = Image.FromFile(path);
        img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);

        var bytes = stream.ToArray();

        var str = BitConverter.ToString(bytes, 0).Replace("-", string.Empty);

        var mpic = @"{\pict\pngblip\picw" + img.Width.ToString() + @"\pich" + img.Height.ToString() +
            @"\picwgoa" + width.ToString() + @"\pichgoa" + height.ToString() + 
            @"\hex " + str + "}";
        return mpic;
    }

现在您需要将此“图像”插入 rtf 中的正确位置。如果您在记事本中打开 rtf 文件,您应该会看到如下内容:

{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}} \viewkind4\uc1\pard\f0\fs17 MYTEXT\par }

如果你想要一个快速而肮脏的方法,那么从richTextBox 中获取rtf 到一个字符串中,然后在deflang2057 后面插入你的标题图像字符串,然后是'/par' 来创建一个新行。然后在结束 '}' 之前插入您的页脚图像字符串

像这样的东西:

    // Determine if the user selected a file name from the saveFileDialog.
    if (saveFile1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
            saveFile1.FileName.Length > 0)
    {
        var rtf = richTextBox1.Rtf.Insert(richTextBox1.Rtf.IndexOf("deflang2057") + 11, GetImage(@"c:\a.png", 5, 5) + @"\par");

        using (var rtfFile = new StreamWriter(saveFile1.FileName))
        {
            rtfFile.Write(rtf);
        }
    }

我希望这能让你开始。

于 2012-07-30T17:19:29.477 回答