Category Archives: .Net

Use word template with Xceed.Docx


Xceed.Words.Net is a library for generating word file without using the office library. You need not to install the office for create word file from your C# application.

I have plenty of beautiful Microsoft template, which I used create reports. So what I need is to use those template with Xceed. The idea sound good, isn’t it.

Lets place all your templates inside folder, in your debug folder and use it in your Xceed code as follows

using (var document = Xceed.Words.NET.DocX.Create(fname))
{
 document.ApplyTemplate(@"doctemplates /CashLedger.dotx");
document.ReplaceText("[MyCompany]", ViewModels_Variables.ModelViews.CompanyProfile[0].company);
                    document.ReplaceText("[Clandmark]", " | " + ViewModels_Variables.ModelViews.CompanyProfile[0].lmark);
                    document.ReplaceText("[CCity]", " | " + ViewModels_Variables.ModelViews.CompanyProfile[0].place); 
document.Save();
document.Dispose();}

My template folder simply named templates and use @”doctemplates /CashLedger.dotx” to locate the application path folder.

Here is a sample document template

How to find sum from obervablecollection list in C#


This example shows how you can simply find aggregate functions like sum, average etc from a Obervablecollection list.

ObservableCollection and Model-View-ViewModel is a ideal for a typical WPF application, these are programmers two of the best tools.

In this example I am using a model class , and want to find sum of inventory qty from batch list.

double qty=_batches.Sum((b) => b.qty));

Here _batches is representing the ObservableCollection of Model batch.

How to use common folder paths in C#


Reading files from application path may be one of key requirement of any application. Actually we can place many place you love to have, on a installation machine there can be restriction as well.

Like wise in a Windows system, installer may want to put apps and other files to Programfiles. This folder intended to work with executable,configuration files etc. You can’t programmatically create new folder or files in Programfiles folder, which may require some admin rights. So where we kept those documents and other data ?

It is wise to store such files on Application data folder or even on your Document folder. For reports and other stuffs Document folder is enough.

Access Special Folders

We can use the Enironment.SpecialFolder to access the App data and Documents and also can fetch path to those folders using GetFolderPath method of Environment class.

datapath = Environment.GetFolderPath(Environment.SpecialFolder
.ApplicationData);
reportPath = Environment.GetFolderPath(Environment.
SpecialFolder.MyDocuments);

the first line will get the location of C:\Users\manoj\AppData\Roaming and the second will show the Document folder path .

Access application path

How to access application/executable path in C#. This can be done using Application.ExecutablePath and the GetFolderPath method

 Path.GetDirectoryName(Application.ExecutablePath);

C# Tips: Create Directory if not exist


Do you know that , In C#.Net it is possible to check directory is exist on a particular path on a system using System.IO library.

This will be great help when we want to implement the software on a system, with folder structure we are using to store out put or backup folder structure. The following simple function may help you

using System.IO;
public static void AutoCreateDirectory(string dpath)
{
try
{
if (!Directory.Exists(dpath))
{
Directory.CreateDirectory(dpath);
}
}
catch (Exception ee)
{
MessageBox.Show(ee.Message.ToString());
}
}
view raw autocreate_dir.cs hosted with ❤ by GitHub

How to set background image using ImageBrush in C# WPF


Back ground in WPF application can be set using XAML at design time or at run time. Using XAML we do it as follows

 <Window.Background>
        <ImageBrush ImageSource="images\abstract-art-artistic-background-1103970 (1).jpg"/>
    </Window.Background>

At Runtime

Using some code you can change back ground of WPF /C# application using ImageBrush and BitmapImage object as follows

  • Create Uri ,which defines the path of the image
  • Using Uri define a bitmap image object which can source for ImageBrush
  • Create a BitmapImage object and set the ImageBrush source
  • Set Background property with ImageBrush

All the above can be done with inline code as follows

 ImageBrush imageBrush = new ImageBrush(new BitmapImage(new Uri("D:\images\abstract-art-artistic-background-1103970 (1).jpg",UriKind.RelativeOrAbsolute)));
                this.Background = imageBrush;

Serialize Helper class for encrypt and serialize any C# object


Serialization is the process of storing objects / user defines classes into a disc files. It stores state of the object i.e. member variable values to disk. Deserialization is reverse of serialization i.e. it’s a process of reading objects from a file where they have been stored.

As you know encryption is to hide information from others .Encryption and decryption operations require a special key. Think of a key as a password for the encryption and decryption operations

Serialization and encryption

My Serialize Helper class assist you to serialize any object or object collection to binary data file and also it encrypt data using DESCryptoServiceProvider class. Using the BinaryFormatter we can serialize objects and save into a file. Like wise we can reverse the process too.

Helper class

Our Helper class has following functions

  • public static void SerialiZe<T>(string path)
  • public static T DeserialiZe<T>(string path)
public static class SerializeHelper
{
static byte[] key = { 1, 2, 3, 4, 5, 6, 7, 8 };
static byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };
static DESCryptoServiceProvider des = new DESCryptoServiceProvider();
public static void SerialiZe<T>(T data, string path)
{
using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write))
using (var cryptoStream = new CryptoStream(fs, des.CreateEncryptor(key, iv), CryptoStreamMode.Write))
{
BinaryFormatter formatter = new BinaryFormatter();
// This is where you serialize the class
formatter.Serialize(cryptoStream, data);
}
}
public static T DeserialiZe<T>(string path)
{
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read))
using (var cryptoStream = new CryptoStream(fs, des.CreateDecryptor(key, iv), CryptoStreamMode.Read))
{
BinaryFormatter formatter = new BinaryFormatter();
var deserialized = (T)formatter.Deserialize(cryptoStream);
return deserialized;
}
}
}
//usage
ObservableCollection<CustomClass> obList = new ObservableCollection<CustomClass>();
CustomClass obj= new CustomClass();
obj=new CustomClass(Value);
obList.Add(obj);
//Serialize
SerializeHelper.SerialiZe<ObservableCollection<<CustomClass>>(obList, @"data.pk");
//deserialize
var List = SerializeHelper.DeserialiZe<ObservableCollection<PackageClass>>(@"data.pk");
view raw SeralizeHelper.cs hosted with ❤ by GitHub

As you note that , we are using generic parameter which is an arbitrary type of T. You can use any custom class/ type in place of T.

Generic type offers better performance and re-usability

How to use

Make use of the Helper class , add it to your project and just use the static class method.

that’s it

Convert Doc file to PDF,XPS,SVG,XML,HTML using Spire in C#


There are many useful libraries around Nuget which can be made your application more productive. We already learned how to create PDF files from a Word Document using Interop and Docx.

Free Spire.Doc offer high performance operation on word documents. You can check the project on Codeplex Achive

Spire offer following feature

  • *Convert Word to PDF
  • *Convert Word to HTML
  • *Convert Word to Image
  • *Convert Word to XML
  • *Convert Word to RTF
  • *Convert Word to EMF
  • *Convert Word to¬†XPS

How to Convert Doc to PDF

Add the library to your project using Nuget Package Manager

Visual Studio 2019 : Nuget Package Manager

How to convert a WordDocument to PDF in C#.Net


Word Document is an essential part of any application, it may help users to prepare reports etc. You can easily create Documents programamatically using Microsoft.Office.Interop.Word Library in C#.Net.

This Library also provide capability of converting document to two another monstly used file format, PDF and XPS. Let’s beggin

Reference Library

First up all add refrence to Microsoft.Office.Interop.Word and Include to the project

Microsoft Visual Studio Reference Manager

Start Converting

using Microsoft.Office.Interop.Word;

and do the following

  • Open the File want to convert with Document constructor
  • Use ExExportAsFixedFormat to convert document into pdf
 Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application();
                    var wordDocument = appWord.Documents.Open("mydoc.docx");
                    wordDocument.ExportAsFixedFormat("mydoc.pdf", Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF);
                    wordDocument.Close();
appWord.Quit();

In the similary way you can convert document to XPS too

Ask Masrshal to realease resources

Finally we are no need to hold the Word resources , ask Marshal to release them. Do this when ever you use file resources.

System.Runtime.InteropServices.Marshal.FinalReleaseComObject(appWord);

Reading and Writing Json objects in C#


JSON objects are fast to read. From Python to C# JSON objects are widely used for the database as well as data transaction purposes, some of them are simple, some others are complicated.

So let begins with a simple C# Projects

JSON STRINGS in C#
SERIALIZATION OF JSON STRINGS in C#

Todo

  1. Build a class for constructing JSON string
  2. Write to JSON text file
  3. Read from the file back to JSON class

C# WPF Tips : How to bind array/list elements


Binding is an ideal technique for displaying dybanic content in to application in WPF. Todays tips is about how to bind list/array elements in a C# WPF app.

In my C# code I have specified the binding as follows.

 List<string> myvalues = new List<string>() { "May 2020", "May", "Monday", "25/May/2020" };
txt_month.DataContext=myvalues;

I wan t to bind the second element, that means second element in the list (1th). So lets udjust the xaml bining

 <TextBlock  FontSize="14"   x:Name="txt_month" Text="{Binding [1]}" Foreground="Bisque"/>

We have used ‘[ ]’ to specify the element. If you have array of object you can use [ ] .<member> to specify the public member of the class too.