2012-07-30 46 views
0

在C#中的页脚与输出我是一个新手,C#,我有一个“保存到文件”在我的程序选项,它可以节省一个RichTextBox的输出在一个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); 
     } 
    } 
+1

RichTextBox不能替代文字处理器,这是一种支持页眉和页脚的程序。您需要考虑自动化,例如Microsoft Word。在C#中得到了Microsoft.Office.Interop.Word命名空间中的类的支持。 – 2012-07-30 16:01:14

+0

你的“页眉和页脚图片”是什么格式?像JPEG或BMP的图像?将这些保存到文本文件中不太可能有用;你想要保存文件的格式是什么? – 2012-07-30 16:03:32

+0

如果我将文件另存为docx文件,那么我需要的更改是什么?非常感谢您的帮助! – user1563401 2012-07-30 16:04:18

回答

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无衬线;}} \ viewkind4 \ UC1 \ PARD \ F0 \ fs17 MYTEXT \相提并论}

如果你想那么快速和肮脏的方法得到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); 
     } 
    } 

我希望得到你开始。

+0

谢谢你的帮助! – user1563401 2012-07-30 17:34:53

0

下面是一个例子如何使用Open XML SDK ...

Source Code

,你将不得不插件你的文字在那里说:“原始文字在这里”。

+0

你能否请一个例子来解释一下。我真的很感激! – user1563401 2012-07-30 15:58:32

+0

但是从目前为止的答案来看,对于你目前的技能水平来说,这可能会有点复杂(说实话)。 – Darek 2012-07-30 16:19:32

+0

是的@Darek - 我赞扬你的努力,特别是在保持[爱的夏天](http://blog.stackoverflow.com/2012/07/kicking-off-the-summer-of-love/),但我不知道我们能在这里帮到多少实际帮助... – 2012-07-30 16:25:24

0

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

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

或者你只是想产生一个文件到另一个程序可以输出,与页眉和页脚?你可以输出RTF;规格为here。这是一个更容易的任务;你可能能够利用现有的RTF interpreters

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

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

+0

我认为你已经决定了 - 因为在这个答案中有很多变量 - 全部都是有效的 - 我觉得我必须投票结束...... – 2012-07-30 16:27:50

+0

它是一个XML解析器。用户选择他们想要解析的文件,该工具解析并表示每一行。我想要将解析的数据保存在一个文件中,并在其上放置我的模板,用户随时可以访问 – user1563401 2012-07-30 16:34:11

+0

@ user1563401您为了实现目标而尝试了什么?同样,现在真的有相当多的信息让你去学习你正在指向的主题。我很抱歉,但是如果你希望有人向你发布一段可以做你想做的魔法代码,它不会发生。 – 2012-07-30 16:43:31