Most of the time developers waste their 90% of time thinking how to generate Office format documents. Perhaps, that is what is being used by most of the companies and developers right now. Microsoft Word, PDF, Rich Text Format and other similar formats are in high demand now a days.
Creating custom interoperability service is a very time-consuming, and a less efficient function when enterprise is the solution type for your application. Third-party applications provide us with a very good solution to such tasks, which can enable us to kick-start our applications in a matter of few minutes.
Spire.Doc (by E-Iceblue) is one of them. I have personally tried the software library for .NET framework and it is kind of a helpful tool for .NET developers (no matter whether you are a Windows Form, Windows Presentation Foundation or ASP.NET developer) for generating cross-file format files.
Note: By cross-file format I mean you can generate the output in a number of formats, file based (under files, this library supports PDF, Microsoft Word, HTML web pages, Rich Text Format and more), it also supports that you can generate images for your documents and to get the streams for your document resources.
Spire.Doc API
I have used Spire.Doc (and other connected APIs and namespaces) to give it a quick look and start. If someone has a great understanding of how these documents are, what a paragraph is and what can be added to different components.
The very much basic document in Microsoft Word would require only
- Single document object
- Single section to contain the data. This is also the page of your application’s document.
- A number of paragraphs, depending on whether and what you want to add to the document.
The paragraph would allow you to add images or other stuff, such as text and characters; symbols in Unicode format you just need to pass the integer value for the Unicode character. - Tables are also added to the section object, if required.
Spire.Doc namespace also allows you to save the document, in any number of format, ranging from PDFs to a wide variety of Microsoft Word formats.
Note for E-Iceblue developers
I have had a few intuition problems using the product, for a .NET developer, adding a new element to the current child hierarchy is something like this,
var element = new Element(); // Any properties or similar editions parentElement.Children.Add(element);
Whereas, Spire.Doc supports adding the the objects to the document as,
var element = parentElement.AddChild(); // Child type is determined by the function called, AddParagraph, AddTable etc. // Then element is edited out.
Perhaps, this is just my opinion and intuition problem. I would believe that most of the readers would not agree to me on this point. Also, the API guide is a good one, I loved it. But it lacks the description of the class that is open at the moment.
Few code samples for readers
Since review-only posts are not my style, so I would provide a few code samples to the readers also, as if to show how easy it is to use Spire.Doc library for their personal use. As, already mentioned this is a library to .NET framework, the library is consumable by every framework (although, E-Iceblue also ships the library in different versions, one for every framework on .NET).
The same code sample would work on Windows Forms, Windows Presentation Foundation, SilverLight, ASP.NET and (as I have tested it enormous times on) Console application.
Documentation of the Spire.Doc is available along with the package when you download it (and IMO it is a very much great and intuitive documentation, with a pretty much style as that of MSDN). You can always use the documentation application, to read the API and continue where you get stuck while developing the application.
Loading a new document
Loading the new document is similar whether you are trying to create a new document, or load it from an existing file. Spire.Doc provides you with constructors that can be used to initialize the Document object.
// First method, new document var document = new Document(); // works // Second method, existing document var document = new Document("path", FileFormat.Docx);
In the above examples, there are two documents being generated (please ignore the document already exists in current context for a moment). First one is constructor used to generate a new document (perhaps for creating a new file), where as the second one is used to load existing file as a document object in your application. You can load files of any type discussed above.
Once loaded, you can then work with document to add new section, paragraph or other similar objects or to edit the existing objects in the document.
Editing the document
Editing the document is another key feature of this library, because it not only let you create new documents but also allows you to edit already existing documents and files; no matter what data type they hold. The key points are that you can edit the document (of any type) and save it (in any format).
You can add new paragraphs, or sections to your document which in turn allow you to add images and text to the document. (As already mentioned above) I do have a little problem with this process in Spire.Doc namespace, but still it is a great way of handle-oriented programmers, which have a great intuition for creating the object then saving the handle for further processes.
// Creating a document, adding a section and a new Paragraph var document = new Document(); var section = document.AddSection(); // update the section, if required var paragraph = section.AddParagraph(); // Update the paragraph, for example paragraph.AppendText("Love for all, hatred for none!"); paragraph.AppendPicture(imageObject); // accepts System.Drawing.Image object
Now the above code is enough to generate a very much simple document, that has 1 section (page in document), and a very basic paragraph followed by an image; please look into Windows Forms image controls for more on the System.Drawing.Image object.
Saving the document
Final stage is saving the document on the file system, or processing it for further processes. Mostly, web developers would want to send dynamically generated Word or PDF files to their clients on run-time. Spire.Doc is a great way to complete this task.
Spire.Doc exposes functions to store the generated document in a couple of formats, you can use just one function, pass the type and you’re done! See below, (Continuing the previous example of document)
// Continuing from the previous example document.SaveToFile("MyNewFile.pdf", FileFormat.PDF); // extension required
Above code would get the details from the document object, and would generate a PDF file with name MyNewFile. Um, you need to know that in this function you need to write the file extension also, otherwise it would generate a plain FILE in your file system.
Plus: Library also allows you to get results in Stream and Image formats. You should try them also!
Tested sample
The following code is a sample example of what I have discussed above (using the library for applications to generate PDFs and to send them to the clients on run-time using an SMTP server; for emails.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Spire.Doc; using Spire.Doc.Documents; using Spire.CompoundFile; using System.Net; using System.Net.Mail; namespace SpireConsoleApplication { class Program { static void Main(string[] args) { // Create the document var document = new Document(); // Add a section to document var section = document.AddSection(); // Add paragraph to the section var paragraph = section.AddParagraph(); paragraph.AppendText("Love for all, hatred for none!"); paragraph.AppendPicture( System.Drawing.Image.FromFile("E:\\j'[oj.jpg") ); document.SaveToFile(".pdf", FileFormat.PDF); new Program().SendEmail(".pdf"); } private void SendEmail(string fileName) { using (SmtpClient sc = new SmtpClient("smtp.gmail.com", 25)) { sc.Credentials = new NetworkCredential("", ""); sc.EnableSsl = true; var message = new MailMessage( "justin17862@gmail.com", "justin17862@gmail.com", "Spire.Doc PDF file", "Email contains the attachment." ); message.Attachments.Add(new Attachment(fileName)); sc.Send(message); } } } }
The above program would generate the PDF, and then send the PDF to the client; which is hard-coded in this example, you can use variables for giving out emails to the clients required.
The email was received,
Perhaps, this now shows how simple it was to use the library to generate run-time PDF documents and send them to client; yes, I love Cut the Rope game and the Om Nom character so I used his (or its perhaps, or maybe hers… Whatever) picture to be sent. The library can be used in WPF, Windows Forms, ASP.NET or other .NET framework applications, to generate the files on run-time, then they can be sent to the clients, opened as files on the desktop or shown to the users. I have personally enjoyed using it, ignore the intuition problems that I mentioned. 🙂
Pro tip: You can convert the Microsoft Word document to HTML format to show it in your web application also. So it solves the “How to show Microsoft word document in website” problem also.
Note: I did not use the license, you should use the license in order to remove the red watermark on the documents.
Review Excerpt
I would quote what I was saying to myself (while I was using the library to test the quality):
Spire.Doc is a very fast and efficient solution to enterprise applications for generating office documents in desktop and web applications on .NET framework. It removes the pain of interoperability from minds of .NET developers and provides a very agile solution to developers. A very much easy, recommended and efficient solution for cross-file format document generation.
References
The library is available on E-Iceblue’s website, you can also install the packages by executing the NuGet command in NuGet package manager console.
PM> Install-Package Spire.Doc
The packages (and other others by E-Iceblue for PDF and Excel based solutions) are available on the E-Iceblue’s account on NuGet.
You can also download the product from their website to use them in your own applications. I would leave the rest of application and resource up to you. Happy coding! 🙂