In This Topic
You can add quotes from another file in your document using C1Word. You can use following code to add quotes to your document from a text file:
Note that two classes named WordUtils and DataAccess are used in the code given below. These classes are available in the product sample located at the following location on your system:
Documents\ComponentOne Samples\WPF\WordCreator
You can use these classes in your application from the mentioned location.
Dim titleFont As New Font("Arial", 24, RtfFontStyle.Bold)
Dim txtFont As New Font("Times New Roman", 10, RtfFontStyle.Italic)
' add title
Dim rcTop = WordUtils.RenderParagraph(word, word.Info.Title, titleFont, rcPage, rc)
rc = rcTop
' build document
For Each s As String In GetQuotes()
Dim authorQuote As String() = s.Split(ControlChars.Tab)
' render header (author)
Dim author = authorQuote(0)
rc.Y += 25
rc = WordUtils.RenderParagraph(word, author, hdrFont, rcPage, rc, True)
' render body text (quote)
Dim text As String = authorQuote(1)
rc.X = rcPage.X + 36
' << indent body text by 1/2 inch
rc.Width = rcPage.Width - 40
rc = WordUtils.RenderParagraph(word, text, txtFont, rcPage, rc)
rc.X = rcPage.X
' << restore indent
rc.Width = rcPage.Width
rc.Y += 12
' << add 12pt spacing after each quote
If rc.Y > rcPage.Height Then
word.PageBreak()
rc = rcTop
End If
Next
Private Shared Function GetQuotes() As List(Of String)
Dim list = New List(Of String)()
Using sr = New StreamReader(DataAccess.GetStream("quotes.txt"))
Dim quotes = sr.ReadToEnd()
For Each quote As String In quotes.Split("*"C)
Dim pos As Integer = quote.IndexOf(vbCr & vbLf)
If pos > -1 Then
Dim q = String.Format("{0}" & vbTab & "{1}", quote.Substring(0, pos), quote.Substring(pos + 2).Trim())
list.Add(q)
End If
Next
End Using
Return list
End Function
// calculate page rect (discounting margins)
Rect rcPage = WordUtils.PageRectangle(word);
Rect rc = rcPage;
// initialize output parameters
Font hdrFont = new Font("Arial", 14, RtfFontStyle.Bold);
Font titleFont = new Font("Arial", 24, RtfFontStyle.Bold);
Font txtFont = new Font("Times New Roman", 10, RtfFontStyle.Italic);
// add title
var rcTop = WordUtils.RenderParagraph(word, word.Info.Title, titleFont, rcPage, rc);
rc = rcTop;
// build document
foreach (string s in GetQuotes())
{
string[] authorQuote = s.Split('\t');
// render header (author)
var author = authorQuote[0];
rc.Y += 25;
rc = WordUtils.RenderParagraph(word, author, hdrFont, rcPage, rc, true);
// render body text (quote)
string text = authorQuote[1];
rc.X = rcPage.X + 36; // << indent body text by 1/2 inch
rc.Width = rcPage.Width - 40;
rc = WordUtils.RenderParagraph(word, text, txtFont, rcPage, rc);
rc.X = rcPage.X; // << restore indent
rc.Width = rcPage.Width;
rc.Y += 12; // << add 12pt spacing after each quote
if (rc.Y > rcPage.Height)
{
word.PageBreak();
rc = rcTop;
}
}
static List <string> GetQuotes()
{
var list = new List <string>();
using (var sr = new StreamReader(DataAccess.GetStream("quotes.txt")))
{
var quotes = sr.ReadToEnd();
foreach (string quote in quotes.Split('*'))
{
int pos = quote.IndexOf("\r\n");
if (pos > -1)
{
var q = string.Format("{0}\t{1}", quote.Substring(0, pos), quote.Substring(pos + 2).Trim());
list.Add(q);
}
}
}
return list;
}
The above code reads the quotes from a text file and writes them in a document. It adds title to the document at first, then renders the header and body text, and writes the text in the document.
The output of the above code will look similar to the image given below:
