Skip to main content Skip to footer

What's New in Document Solutions for PDF v8

v8 - December 11, 2024

Document Solutions for PDF (DsPdf)

Optimize PDF Documents

Multiple enhancements have been made to optimize performance of loading and saving of PDF files as well as optimizing file size of the generated PDF. One of the enhancement is optimizing how DsPdf works with object streams. DsPdf introduces API that can help to load and save PDF with optimization options. A new SavePdfOptions class gives you precise control over how your code saves the PDFs in the optimal way for your application, instance of which can be passed to GcPdfDocument.Save(), Sign() and TimeStamp() methods. Saving a PDF with object streams (PDF 1.5) reduces file size, improves load times, and enhances compression efficiency by consolidating objects, making document handling faster and more efficient. The capabilities of these properties are defined below. Follow the links to know more about the enum options to optimize PDF file loading and saving as per your needs -

  • UseObjectStreams - Defines how to use object streams using various Enum options when saving a PDF document.
  • PdfStreamHandling - Defines how to process existing PDF streams in a loaded document. 

Using the new API, you can now re-save an existing PDF with whatever the desired compression settings affecting all streams. Following code helps to minimize the size of the PDF document -

GcPdfDocument doc = new GcPdfDocument();
FileStream fs = new FileStream("Original_doc.pdf", FileMode.Open);
doc.Load(fs);
doc.CompressionLevel = CompressionLevel.Optimal;
SavePdfOptions so = new SavePdfOptions(SaveMode.Default, PdfStreamHandling.MinimizeSize, UseObjectStreams.Multiple);
doc.Save("Optimized_doc.pdf", so);

Optimize PDF Documents using .NET, C#, VB.NET

Help | Demo

Optimize Font Format

In v8 release, DsPdf also adds PdfFontFormat property to GcPdfDocument and FontHandler classes that allows users to set the encoding type for the font formats representing a font in a PDF document.

PdfFontFormat enumeration provides the following options that define the encoding type:

  • Type0AutoOneByteEncoding - Saves the font as one or more Type0 PDF fonts, where each character is encoded by one byte.
  • Type0IdentityEncoding - Saves the font as a single Type0 font with Identity encoding, where each character is encoded with two bytes.

DsPdf uses a one-byte encoding format, i.e., Type0AutoOneByteEncoding, by default that produces smaller PDF content in most cases.

View Help

Include/Exclude Annotations or Form Fields on Image Export

You now have precise control over which annotations to include when exporting a PDF to images. The new DrawAnnotationFilter property of SaveAsImageOptions can call a delegate that can check whether to render a certain annotation or form field based on their type. Following code helps to accomplish the same -

GcPdfDocument doc = new GcPdfDocument();

SaveAsImageOptions options = new SaveAsImageOptions();
options.DrawAnnotationFilter = (GcPdfDocument d, Page p, AnnotationBase a, ref bool drawAnnotation) =>
{
  // render only CheckBoxes
  if (a is WidgetAnnotation wa)
  {
    if (wa.Field is CheckBoxField)
    {
      drawAnnotation = true;
      return;
    }
  }
  drawAnnotation = false;
};
doc.SaveAsPng("doc.png", null, options);

Help | Demo

Preserve Images on Redaction

If a part of an image is redacted, the image is replaced with the redacted version. However, if the same image is present at multiple locations, you may want either to apply the redact to all instances of the image, or to just the instance of the image at the redact location. You can now control this behavior with the new CopyImagesOnRedact property in RedactOptions class indicating whether images within the redacted area that also appear in other locations will be copied before applying the redact. When set to True, only the instance of the image in the redacted area will be modified, leaving the image unchanged in other locations. When set to false, all instances of the image across the document will be affected by the redaction. The default value is False.

Following code redacts an image only at one location, but the same images at other location will be preserved.

RedactOptions ro = new RedactOptions();
ro.CopyImagesOnRedact = true;
doc.Redact(ro);

Preserve images on redaction

Help | Demo

Document Solutions PDF Viewer (DsPdfViewer)

Replace text in PDF documents 

DsPdfViewer adds new Replace options in the UI to conveniently replace text in PDF documents. The expand icon in the Search bar can activate the text replacement mode where you can provide the text to search in the ‘Find in document' textbox, while the text to replace can be provided in the 'Replace’ textbox. Upon pressing Enter, the text will be replaced conveniently throughout the document. The text can also be replaced through ‘Replace Current’ and ‘Replace All’ buttons in the UI of the Search Bar. Additionally, a new keyboard shortcut, Ctrl+H, has been introduced, which opens the Search Bar with the text replacement mode already enabled. 

The text replacement mode is only available when the viewer is configured with the SupportApi, which is utilized for editing functionalities. This feature is accessible to users with a Professional license. The feature is currently not available in Wasm mode

Allow End Users to Find and Replace Text in PDFs with a JavaScript PDF Viewer Control

Help | Demo

Timestamp in PDF Viewer comments

In PDF document annotations, a timestamp records the exact date and time an annotation was created or modified. Timestamps provide a historical record of edits, helping collaborators track when specific feedback or changes were made. 

v8 release adds timestamp to any annotation added to the PDF document. This timestamp  is stored in the modificationDate property (which can be modified through code), which is a string type that can either be empty (indicating that the date and time are not specified) or contain the date and time in the internal PDF format which is 'D:YYYYMMDDHHmmSSOHH'mm'. 

In addition, a new property called "Modified" has been added to the properties panel of each annotation. This property automatically updates as you make changes to the annotation. 

View time stamps on comments within the JS PDF Viewer

Help | Demo

Enhanced Proximity Search

In the new DsPdfViewer v8 release, we’ve enhanced proximity search functionality with the introduction of two new operators: NEAR and ONEAR. These operators provide more flexibility in querying phrases, offering an improved search experience. 

The NEAR operator matches results where specified search terms are within close proximity, ignoring the order of the terms. The syntax for NEAR is as follows:

<expression> NEAR(n) <expression>

The ONEAR operator functions similarly to NEAR but preserves the order of the specified terms. The syntax for ONEAR is as follows:

<expression> ONEAR(n) <expression>

With the updated proximity search, users can also specify phrases within proximity queries by enclosing them in double quotes. For example, in the below example, multiple words in a phrase can be enclosed in double quotes. The two search terms are separated by 4 words, so we write search expression as - "Originally there were in excess" NEAR(4) "(2.3)"

Enhanced Proximity Search in PDFs

Help | Demo

Updates


v8 - December 11, 2024

Related Links


2024 Roadmap

Document Solutions Blogs

Demos

Documentation