Aspose.Pdf for .NET logo

We have introduced a new feature in Aspose.Pdf for .NET which allows developers to ensure that only numeric values are entered in form fields. The properties OnModifyCharacter and OnFormat properties have been added to Field.Actions. To validate a user entry, the AFNumber_Keystroke and AFNumber_Format Java script functions may be used. Please take a look over following code snippet.

// Load input PDF file
Document doc = new Document("c:/pdftest/ABFillablewfields.pdf");
TextBoxField field = (TextBoxField)doc.Form["husband name"];
// http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FormsAPIReference.pdf
// 2 digits after point
// No separator
// Neg style = minus
// No currency
field.Actions.OnModifyCharacter = new JavascriptAction("AFNumber_Keystroke(2, 1, 1, 0, \\"\\", true)");
field.Actions.OnFormat = new JavascriptAction("AFNumber_Format(2, 1, 1, 0, \\"\\", true)");
// Set initial field value
field.Value = "123";
// Save resultant PDF
doc.Save("c:/pdftest/Restricted_out.pdf");

Saving Images in Raster Format when Converting to HTML

Aspose.Pdf for .NET has great features for converting PDF files to DOC, DOCX, image, HTML and various other formats. During the PDF to HTML conversion process, images in PDF files are saved with SVG compression but you might want to save them in raster format - PNG or JPEG - instead to reduce image size.

// Source PDF file
Document doc = new Document("c:/input.pdf");
// Create HtmlSaveOption with tested feature
HtmlSaveOptions saveOptions = new HtmlSaveOptions();
saveOptions.FixedLayout = true;
saveOptions.SplitIntoPages = false;
saveOptions.RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.AsExternalPngFilesReferencedViaSvg;

string outFile = "c:/ResultantFile.pdf";
// Save the output in HTML format
doc.Save(outFile, saveOptions);

Split CSS to Pages During PDF to HTML Conversion

The HtmlSaveOptions class has a property, SplitIntoPages, which lets you split an HTML file to pages when generating the output. Recently, a customer had the requirement to split the CSS file based on individual pages instead of generating a single CSS file. To accomplish this requirement, we have introduced a new flag, SplitCssIntoPages, in the HtmlSaveOptions class. When the value of this property is set to true, the converter splits the CSS into parts/pages based on the individual HTML page created. Please take a look at the following code snippet.

//1) Clean-up target folders
string htmlFile = Path.GetFullPath("c:/pdftest/ResultantFile_files/" + "resultant.html");
string imagesDir = Path.GetDirectoryName(htmlFile) + @"\\35942_files";
string cssDir = Path.GetDirectoryName(htmlFile) + @"\\35942_css_files";
if (Directory.Exists(imagesDir)) { Directory.Delete(imagesDir, true); };
if (Directory.Exists(cssDir)) { Directory.Delete(cssDir, true); };

//2) Create document for conversion
Document pdfDocument = new Document("c:/pdftest/antrag.pdf");

//3) Tune conversion options
HtmlSaveOptions options = new HtmlSaveOptions();
options.RasterImagesSavingMode = HtmlSaveOptions.RasterImagesSavingModes.AsPngImagesEmbeddedIntoSvg;//<- to get compatibility with previous behavior and therefore same result of tests
// Split HTML output into pages
options.SplitIntoPages = true;
// Split CSS into pages
options.SplitCssIntoPages = true;
options.CustomCssSavingStrategy = new HtmlSaveOptions.CssSavingStrategy(Strategy_4_CSS_MULTIPAGE_SAVING_RIGHT_WAY);
options.CustomStrategyOfCssUrlCreation = new HtmlSaveOptions.CssUrlMakingStrategy(Strategy_5_CSS_MAKING_CUSTOM_URL_FOR_MULTIPAGING);
//3) Convert
pdfDocument.Save(htmlFile, options);

private static void Strategy_4_CSS_MULTIPAGE_SAVING_RIGHT_WAY(HtmlSaveOptions.CssSavingInfo partSavingInfo)
{
    string cssOutFolder = @"c:\\pdftest\\ResultantFile_files\\";
    if (!Directory.Exists(cssOutFolder))
    {
        Directory.CreateDirectory(cssOutFolder);
    }

    string outPath = cssOutFolder + "style_xyz_page" + partSavingInfo.HtmlPageNumber.ToString() + ".css";
    System.IO.BinaryReader reader = new BinaryReader(partSavingInfo.ContentStream);
    System.IO.File.WriteAllBytes(outPath, reader.ReadBytes((int)partSavingInfo.ContentStream.Length));
}
private static string Strategy_5_CSS_MAKING_CUSTOM_URL_FOR_MULTIPAGING(HtmlSaveOptions.CssUrlRequestInfo requestInfo)
{
    return "/document-viewer/GetCss?cssId=4544554445_page{0}";
}

Determine Field Properties

During PDF form creation, some fields are marked as mandatory and we might need to determine if a particular field is marked as such. Please try using the following code snippet to find out if a field is marked as required.

// Load source PDF file
Document pdf = new Document(@"c:\\pdftest\\RequiredField_output.pdf");
// Instantiate Form object
Aspose.Pdf.Facades.Form pdfForm = new Aspose.Pdf.Facades.Form(pdf);
// Iterate through each field inside PDF form
foreach (Field field in pdf.Form.Fields)
{
    // Determine if the field is marked as required or not
    bool isRequired = pdfForm.IsRequiredField(field.FullName);
    if (isRequired)
    {
        // Print either the field is marked as required or not
        Console.WriteLine("The field named " + field.FullName + " is required");
    }
}

Enhancements

We have enhanced numerous features. The following section highlights some of the enhancements introduced in this release

  • PDF to HTML conversion - Extract images, fonts and CSS in separate folders and create aliases.
  • PDF to HTML conversion - Convert non-vector SVG elements to PNG/JPG.
  • PDF to HTML conversion - Shorten font names.
  • Add JavaScript to push button using Aspose.Pdf.Generator.
  • Mark the Producer and Creator properties of DocumentInfo to read only.
  • PDF generation time is optimized compared to previous releases.
  • Better PDF to XPS and image rendering.

Explore the new features in Aspose.Pdf for .NET 8.7.0.