With the new release of GroupDocs.Merger for Java 19.8 you can take your document joining experience to the next level. What is special about this release? We are pleased to announce that you can now do image joining. And following are the supported image formats:
How easy is that? Let’s understand this with a use-case. We’ll join a BMP and TIFF file.
New Format Support API now fully supports HTML format.
We’d recommend you to download the latest release and integrate it in your application. In case you find any issue, feel free to post on forum.
GroupDocs.Viewer for .NET has been serving the developers in creating the document viewer applications for many years. With the efforts of our hard-working team and the support of our valuable customers, we are able to make the API stand among the top-ranked document viewer APIs. Since the Sky is the only limit, we always keep on enriching the API with more features, improving its performance, and making its usage easier for the developers. And today, I am excited to announce that we have introduced a new public API for GroupDocs.Viewer for .NET with major improvements.
In the latest version of the API (v19.8), we’ve improved the architecture of the API to simplify its usage and make it even easier to build applications. With the major product optimization, the API now consumes fewer resources as compared to the previous versions. Whereas, the document rendering speed has been improved significantly.
Let me give you a few reasons why you should switch to the v19.8 of GroupDocs.Viewer for .NET.
Memory usage – Significantly improved and optimized API’s memory usage (from 10% to 400% approx. depending on the document type ).
Improved rendering speed – The overall rendering speed has been improvedremarkably.
Code optimization – Optimized public API to make it even more intuitive and simple (with only a few lines of code you will be able to perform any action which required 20+ lines of code in the previous version).
Single entry point – A single class to manage the document rendering process for any supported file format.
Easy to use – API now gives more options to the developer in terms of usage and creativity.
With the major updates, the public API of GroupDocs.Viewer for .NET has undergone significant changes. As a result, the usage of the classes and their properties and functions has also been changed. Let’s now check the difference between the coding styles of the new and old version of the API.
This is how we used to get the HTML representation of the document with embedded resources using the old version:
Now, have a look at how we can perform the same operation using the new API.
Have you noticed that the code has been shrunk significantly to fewer lines of code in the coding style of the new API? Also, you don’t have to create separate handlers for HTML and image representation. Instead, just create a Viewerclass and control its behavior using the classes that extend ViewOptions i.e. HtmlViewOptions, PngViewOptions and so on.
Now, as a developer, it is obvious that you would think about how would you deal with breaking changes in code after upgrading to the version which contains the major updates. So let me make it easier for you. In the latest version, the legacy API has been moved into the Legacy namespace. Therefore, after you upgrade to version 19.8, it is required to make project-wide replacement of namespaces only. This means that the namespaces will be changed from GroupDocs.Viewer.* to GroupDocs.Viewer.Legacy.* to resolve build issues. And that’s it!
Alright! So now, its time to switch to the latest version. I would recommend you to first explore the documentation of the new API with the help of the source code examples. Once you try it yourself, you will get a better idea of how useful it’ll be for you to switch to the latest version. You can also consult the release notes as well as the migration notes.
In case you would find the migration process difficult for you, feel free to post on our forum.
GroupDocs.Annotation comes with an extensive set of tools that you can use to easily add common shapes to your documents as an annotation. The list of tools is not limited to area, point, text, polyline, etc. In this section, we will primarily discuss how the Ellipse annotation could be added in a PDF document by using GroupDocs.Annotation API.
While discussing the family of annotation types, we cannot ignore ellipse annotation. It could be regarded as a multi-purposed annotation type. For example, it could be used to display extra information on your graphs or you can use it to circle important information. AnnotationInfo could be used to set color, page, opacity, creator name and many more. At minimum following two properties of AnnotationInfo have to be set for drawing an ellipse, which determine the size and type of the annotation:
Fixed valueAnnotationType.Ellipse is always used as Type for adding an Ellipse Annotation.
Code Example for a PDF Document
For adding ellipse to a PDF document, first we will need to get the document in form of Stream by using following line of code:
Then the Ellipse annotation is added to the list of annotations: Finally, we will export the annotation and save the output file: This way we have added an Ellipse annotation to our PDF document using GroupDocs.Annotation API.
The complete C# code will look like this:
The code in Java will look like this: After adding Ellipse annotation the output document will looks like following screenshot:
Hello guys! It’s been a while since my last post about GroupDocs.Signature for Java. So, our Java community might have been waiting for something new regarding our e-signature API. Well, we have recently released version 19.7 of GroupDocs.Signature for Java and today, I shall give you an overview of something interesting that we have introduced in our latest release.
In the last couple of months, we introduced a quite valuable feature in the .NET variant related to the metadata signatures – signing documents with custom metadata. We have now introduced this feature in the Java API as well. So now, you can define and use the custom objects as metadata signatures using GroupDocs.Signature for Java.
Signing document with custom metadata objects becomes useful when you want to embed the metadata signatures containing the information/data of your own choice. For example, you may want to embed the information to the document about who did sign the document, the date when the document was signed and so on. In that case, you can not use the built-in metadata properties of the documents. This is where you can use the custom objects in metadata signatures.
For this, the following classes are extended with new public methodAddSignature.
WordsMetadataSignature – for Word documents
SlidesMetadataSignature – for Presentations
CellsMetadataSignature – for Spreadsheets
PdfMetadataSignature – for PDF documents
This method creates new metadata signature with passed arguments (name and value), adds the signature to list of metadata signatures and returns the newly created object as a result.
Let’s now check out how to add the custom object in the metadata signature. I am assuming that we have to sign the Word document, therefore, I’ll be using the classes that work with the Word documents.
The following is the custom class containing the data members that I want to embed as the metadata signature in the document.
And this is how we would create the object of the custom class and then add that object to the metadata signature collection of the input document.
Did you notice that I have done something extra in the code before signing the document? Yes, after adding the object to the signature collection, I have encrypted it to make it secure. So you can avoid the custom metadata signatures to be captured by the unauthorized persons by applying the encryption.
That is not the end yet! You can also search your custom objects within the metadata signature collection of the documents using SignatureHandler.search method. The following code snippet shows how to search the encrypted object that we have added before.
For adding and searching encrypted custom objects in other document formats, please visit the documentation.
In addition to the above-mentioned features, we have also added some improvements regarding .djvu file format as well as three bug fixes. For details, please have a look at the release notes.
If you are interested in using the newly arrived features in your e-signing application, just download and integrate the latest release. For working code samples, download or clone our examples project from GitHub repository.
In case you would have any questions or suggestions, just create a topic on our forum and we would love to have a conversation with you.
Usually, a searching software is able to achieve fast search responses because, instead of searching the text directly, it searches an index. This would be the equivalent of retrieving pages in a book related to a keyword by searching the index at the back of a book, as opposed to searching the words in each page of the book.
Using GroupDocs.Search for Indexing and Searching
Problem: Suppose you have 10 million documents of different file formats, e.g. MS Word, Spreadsheets, Presentations, etc. Due to limited memory size, you cannot store more than 5% of the entire data. Now the main issue is how to apply indexing and searching in this case.
Solution: The GroupDocs.Search for .NET provides many ways to perform search operations on any size of document collections. It is capable in indexing various types of documents and perform searches on it. The API supports searching for:
Basic metadata fields
Moreover, it allows searching on the basis of different search query types. The advanced search (e.g fuzzy search, synonyms search, boolean search) is also supported.
Let’s try the GroupDocs.Search API for indexing the bulk of documents of different file formats(see the supported formats list). Although, the Index can be created in memory, but here, let’s create it on disk. You just need to follow these simple steps:
Create a directory for Indexing
Create another directory and copy all the required documents into it.
Come to the code and firstly initialize Index object by passing the path of the index directory
Add documents using AddToIndex(“Documents_Folder_Path”) method of Index object.
The C# code will look like this:
Java guys can write the code like this:
After creating Index you will see the files in the Index folder like following screenshot:
Searching The Terms
The GroupDocs.Search allows various kinds of queries for search operations with more advance features. Please see this article for the detail.
Lets come to the code.
Suppose, the index has been already created as described in the above section. Let’s simply search a term. Follow the steps as written below:
Instantiate Index by passing index folder path
Search the term using Index.Search() method which will return SearchResults object.
Show list of searched files
The C# code will look like:
Java developers can write the code like this:
The output will be appeared like the following screenshot:
The complete ready to run code sample is available on GitHub.
We are always keen to make our APIs rich in features and enhance usability. When we talk about annotation types. One cannot neglect ellipse annotation. Its a multi purposed annotation type. For instance you can use it to display extra information on your gauge or capture graph hits against a target line. Previously, Ellipse annotation was implemented in .NET version and it seemed very useful. We are pleased to announce that Ellipse annotation is now added in GroupDocs.Annotation for Java 19.7. Java users can implement this annotation as follows:
This is how ellipse annotation will look like:
You can also set ellipse color, pen style (e.g. dash, dot, solid), pen width. AnnotationInfo class gives you access to such properties. You might be wondering, what documents are actually supported for the ellipse annotation? Currently, this annotation is supported for the following file formats only:
Setting Watermarks Angle We’ve added ability to set text watermark angle. The process is same as adding Watermark annotation, but you should additionally set Watermark rotation angle by setting AnnotationInfo.Angle property (in degrees).
Aside new features, we’ve also fixed some bugs:
Only first page is saved in output when Multi-Tiff file is annotated
Import annotations for Images doesn’t close stream
Annotation not apply if page number not defined in Words
We’d recommend you to download and integrate latest release of the API and share your concerns on forum.
Nested or the multi-level numbered lists allow you to group the items based on the parent item. Put it simply, you can separately list the items under each group. This becomes very useful when you have to list the items having multiple sub-items. Let’s have a look at the following figure which makes it simpler to understand the scenario.
In this figure, you can observe that there are listed 3 groups and each group further has multiple items listed under it. So, in such cases nested numbered list is used.
Lets now check out how could you populate a numbered list within your Word documents using GroupDocs.Assembly. Assume that you have the Order and Service classes defined in your application in such a way that each order instance has multiple services. The following template will be used to output the orders along with the services they have using the API:
The Word document that will be generated in the result of the above template will contain the following listing:
The perfect output, isn’t it? No, not at all. You would have noticed that the numbering of the list is disturbed. Yes, the numbering sequence is continued and it hasn’t restarted for the second list. Well, this is the expected behavior when you generate the numbered list using this template.
So how would you deal with such a situation when you want to restart the list’s numbering? Well, believe me, it is as simple as a pie. Just place a restartNum tag before the inner foreach and you are done.
This is how the updated version of the template will look like. We have now placed restartNum tag to restart the list numbering for each order.
And what we have got in the output is:
At the moment, you can restart the list numbering within the Word Processing documents as well as email messages with HTML and RTF bodies.
So if you want to have this feature in your application, just download and integrate v19.7 of GroupDocs.Assembly for .NET or Java. For working code samples, download or clone the examples project from the GitHub repository. Cheers!
Integrate GroupDocs.Comparison for .NET 19.6 in your project and take control of documents comparison sensitivity. Detecting source and target documents style changes or inserted/deleted items and then highlighting them in the resultant file is a common yet major feature.
But we have something new, something enormous for you. You can now get detailed comparison of the documents. In ComparisonSettings class we added SensitivityOfComparison method using that you can set sensitivity of documents comparison. Let’s see its implementation and then details.
This option defines limit in percentage, when element is detected as deleted or inserted. There are three values/percentages.
Minimal value Minimal value is 0, comparison process does not occur for any length of sequences of two compared objects.
Value by default The default percentage is 75, comparison occurs when the percentage of deleted or inserted elements in relation to all elements does not exceed 75%.
Maximum value That is 100%. Comparison occurs at any length of a common sub-sequence of two compared objects.
Now let’s understand this with a use-case. Suppose we have two words:
These two words have very small common sub-sequence. Therefore, when comparing them at 75% accuracy, it is not taken into account and we get a completely removed and inserted word as follows:
But at 100% accuracy, this sub-sequence will be treated or represented in a different way, despite the fact that it consists of two letters.
Isn’t it amazing? You can now get briefed comparison results by just controlling the sensitivity.
Let’s see the major issues that are now resolved in this release:
Duplicate Images in Result file in PDF
PDF comparison has overlapping and mangled output
Text got overlapped with other text or images
Merged Documents and then comparing them fails
You must give a try to GroupDocs.Comparison for .NET API and share your feedback and concerns on forum. Download latest version of the API here.
Getting image representation of document pages is one of the most successful feature that is already implemented in .NET version of the API. Keeping your interest in view, we’ve now implemented this feature for Java developers. GroupDocs.Comparison for Java 19.6 allows you to save document comparison results in image format as well. What does it take to implement such a feature? You just have to pass the output folder path to convertToImages method and API will take care of conversion mechanism itself. Let’s have a look at the implementation:
Is there a way to set document size when comparing image with different formats? We added a class OriginalSize using that you can set document size when comparing image with different formats, this size will be used when document is converted to the picture. Given below are the methods:
There are also bug fixes and improvements introduced in this release. Let’s have a look at the prominent ones.
Font detection exception
Word separation exception
Html MarkDeletedInsertedContentDeep Bug
Deleted items in comparison output is not as expected
Incorrect difference info in PDF
Improve HTML aligner
TableFormatSetter for Slides is improved now
Html Anchors comparing
StyleSheet Comparer for Html
We’d recommend you to download and integrate this release in your project and enhance your document comparison experience. Do share your feedback or concerns on forum.
CAD (Computer-Aided Design) files may contain 2D or 3D designs. They are generated by CAD software programs, which can be used to create models or architectural plans. 2D CAD files are often referred to as drawings, while 3D files are often called models, parts, or assemblies.
The AutoCAD is arguably the most prevalent CAD software on the market. It’s used by professionals and hobbyists alike. If you work with CAD, you’re likely to already be familiar with some of AutoCAD’s most common file formats, such as DWG and DXF.
Render the CAD Files using GroupDocs.Viewer
The CAD file formats such as .dwg, .dgn, .dxf, .dwf, .ifc and .stl are also included in the wide range of GroupDocs.Viewer API’s supported file formats
Let’s pick a .dwg file and discuss some of the cases to view the using GroupDocs.Viewer API.
When CAD documents are rendered, the size of the rendering result is adjusted by API automatically depending on the size of the initial document.
You can also adjust the size of the resulting document by setting CadOptions in the following way.
Set ImageOptions.CadOptions.Heightand ImageOptions.CadOptions.Width properties
The Following code sample demonstrates it.
Java guys will write the code like below:
Rendering CAD Model along with Layouts
When CAD documents are rendered, by default we get only Model representation. In order to render Model and all non-empty Layouts within CAD document, the property CadOptions.RenderLayouts of ImageOptions and HtmlOptions is used.
Following are the steps to render all the non-empty layouts along with the Model.
Set CadOptions.RenderLayouts of HtmlOptions/ImageOptions to true
The following code sample shows how to render layouts along with the Model of a CAD document.
Java guys will write the code like below:
Working with Layers
Using layers in CAD documents is a way of organizing objects in the drawing by associating them with a specific function or a purpose. For example, when we have a complex drawing of the building, all objects can be divided (associated) into several layers – e.g. electrical, water plumbing, furniture, walls and so on. According to your needs, you can temporarily hide or show some of the objects by turning off their layers. GroupDocs.Viewer allows you to get the list of layers from the drawing and supports rendering specified layers.
Getting List of Layers
The following are the steps to get the list of layer names from a CAD document.
Create ViewerHandler (ViewerHtmlHandler or ViewerImageHandler)
Get document’s information in DocumentInfoContainer object using GetDocumentInfo method
Cast the DocumentInfoContainer object returned by GetDocumentInfo with CadDocumentInfoContainer
Access each layer using CadDocumentInfoContainer.Layers collection
The following code sample shows how to get the list of the layers in a CAD document.
Java guys will write the code like below:
Rendering Specific Layers
After you have got the list of layers contained in the drawing, you can specify those that you want to render by adding layer names into the CadOptions.Layers property of corresponding RenderOptions (ImageOptions or HtmlOptions). Please note, when you do not specify layers, all layers are rendered.
The following code sample shows how to render a specific layer of a CAD document.
Java guys will write the code like below:
The complete ready to run code sample is available on GitHub.