用我的程序的输出在C#中添加页眉和页脚

用我的程序的输出在C#中添加页眉和页脚,c#,header,save,footer,C#,Header,Save,Footer,我是C#的新手,我的程序中有一个“保存到文件”选项,它将richtextbox的输出保存到word文档中,当用户选择此选项时,我使用SaveFileDialogBox让用户选择文件名和位置 我想要的是,每当用户选择此选项时,保存输出的word文档都有预定义的页眉和页脚图像 非常感谢您的帮助 下面是我的“保存到文件”代码 下面是一个如何使用OpenXMLSDK的示例 你必须将你的文本插入到显示“此处原始文本”的位置。你为“新手”选择了一项非常困难的任务“。要混合图像和文本,您需要复杂的格式,如P

我是C#的新手,我的程序中有一个“保存到文件”选项,它将richtextbox的输出保存到word文档中,当用户选择此选项时,我使用SaveFileDialogBox让用户选择文件名和位置

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

非常感谢您的帮助

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


下面是一个如何使用OpenXMLSDK的示例


你必须将你的文本插入到显示“此处原始文本”的位置。

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

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

或者您只是想生成一个其他程序可以输出的带有页眉和页脚的文件?您可以输出RTF;规格为。这是一项更容易的任务;你可以利用现有的资源

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


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

首先,创建一个函数,用于拍摄图像、宽度和高度并返回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文件,您将看到如下内容:

    // 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);
        }
    }
{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fnil\fcharset0 Microsoft无衬线;}}\viewkind4\uc1\pard\f0\fs17 MYTEXT\par}

如果您想要一个快速而肮脏的方法,那么将rtf从richTextBox转换成字符串, 并在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);
        }
    }

我希望这能让你开始。

你能举例说明一下吗。我会非常感激的!但从你们目前的回答来看,就你们目前的技能水平而言,这可能有点复杂(老实说)。是的@Darek-我对你们的努力表示赞赏,特别是在保持一致方面,但我不确定我们在这方面能提供多少帮助…谢谢@AndrasZoltan。。。OpenXMLSDK2.0生产力工具在生成示例方面帮助很大。RichTextBox不能替代支持页眉和页脚的文字处理器。你需要考虑自动化,比如说微软Word。Microsoft.Office.Interop.Word命名空间中的类在C#中得到很好的支持。您的“页眉和页脚图像”是什么格式?像JPEG或BMP这样的图像?将它们保存到文本文件不太可能提供任何有用的信息;你想保存什么格式的文件?如果我将文件保存为docx文件,那么我需要做哪些更改??非常感谢你的帮助!我的图像是.JPEG格式的。。。我可以用任何格式保存我的输出。我随机选择了.rtf格式。它可以是任何格式。我只需要页眉和页脚以及输出如果要将图像插入输出文件,要完成这项工作,你真的需要使用比一个
RichTextBox
复杂得多的东西——你不能只是把一些文本放在里面——你当然也不能使用
RichTextBoxStreamType.PlainText
——这样可以避免写出任何RTF格式。我想你已经下定决心了——因为有这么多这个答案中有很多变量——都是有效的——我觉得我必须投票才能关闭它……这是一个XML解析器。用户选择要解析的文件,工具解析并表示每一行。我希望解析后的数据保存在一个文件中,上面有我的模板,用户可以访问该文件anytime@user1563401为了实现你的目标,你尝试了什么?同样地,这里确实有很多信息供你去学习你所要学习的主题。我很抱歉,但是如果你希望有人给你发一段神奇的代码,它会满足你的需要;这不会发生的。我从来没有要求过一段代码!谢谢你提供的信息。它实际上帮助了我!我正在通过所有的链接张贴,并将张贴我的努力,让你看到!