2012-07-30 65 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