SetAsBackground(Int32,OcrPage) Method (PdfDocumentBuilder)
In This Topic
Sets the OCR page as background layer of PDF page with specified index.
Syntax
Parameters
- index
- The index of PDF page.
- ocrPage
- The OCR page, which must be set as background of PDF page.
Example
This C#/VB.NET code shows how to convert image collection to a searchable PDF document with MRC compression:
' Required assemblies to run this code:
' Vintasoft.Imaging.dll, Vintasoft.Imaging.Ocr.dll, Vintasoft.Imaging.Ocr.Tesseract.dll,
' Vintasoft.Imaging.Pdf.dll, Vintasoft.Imaging.Pdf.Ocr.dll, Vintasoft.Imaging.Pdf.Mrc.dll,
' Vintasoft.Imaging.Jbig2.dll, Vintasoft.Imaging.Jpeg2000.dll
Public Shared Sub ConvertToSearchablePdfWithMrcCompression(language As Vintasoft.Imaging.Ocr.OcrLanguage, images As Vintasoft.Imaging.ImageCollection, mrcResolution As Vintasoft.Imaging.Resolution, ocrResolution As Vintasoft.Imaging.Resolution, pdfFilename As String)
' create PDF MRC encoder
Dim encoder As New Vintasoft.Imaging.Codecs.Encoders.PdfMrcEncoder()
' set MRC compression settings
SetSetting_DocumentWithImagesHiQuality(encoder.MrcCompressionSettings)
' set MRC resolution (if source is PDF document)
images.SetRenderingSettings(New Vintasoft.Imaging.Codecs.Decoders.RenderingSettings(mrcResolution))
' handle ImageSaving event to set JBIG2 compression for black-white images
AddHandler encoder.ImageSaving, New System.EventHandler(Of Vintasoft.Imaging.ImageSavingEventArgs)(AddressOf images_ImageSaving)
' save images to PDF use MRC compression
System.Console.WriteLine("Encoding using PDF MRC compression...")
images.SaveSync(pdfFilename, encoder)
' open PDF document with MRC compression
Using document As New Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename, False)
System.Console.WriteLine("Create Tesseract OCR engine...")
Using tesseractOcr As New Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr()
System.Console.WriteLine("Initialize OCR engine...")
tesseractOcr.Init(New Vintasoft.Imaging.Ocr.OcrEngineSettings(language))
' create PDF document builder
Dim documentBuilder As New Vintasoft.Imaging.Pdf.Ocr.PdfDocumentBuilder(document)
' set OCR resolution (if source is PDF document)
images.SetRenderingSettings(New Vintasoft.Imaging.Codecs.Decoders.RenderingSettings(ocrResolution))
' foreach image
For i As Integer = 0 To images.Count - 1
System.Console.WriteLine("Recognize image...")
Dim page As Vintasoft.Imaging.Ocr.Results.OcrPage = tesseractOcr.Recognize(images(i))
System.Console.WriteLine("Set PDF page background...")
documentBuilder.SetAsBackground(i, page)
Next
' shutdown OCR engine
tesseractOcr.Shutdown()
System.Console.WriteLine("Pack PDF document...")
document.Pack()
System.Console.WriteLine("OK.")
End Using
End Using
End Sub
''' <summary>
''' Handles the ImageSaving event of the image collection.
''' </summary>
Private Shared Sub images_ImageSaving(sender As Object, e As Vintasoft.Imaging.ImageSavingEventArgs)
Dim encoder As Vintasoft.Imaging.Codecs.Encoders.PdfMrcEncoder = TryCast(sender, Vintasoft.Imaging.Codecs.Encoders.PdfMrcEncoder)
' set JBIG2 compression for black-white images
Dim isBlackWhiteImage As Boolean = e.Image.PixelFormat = Vintasoft.Imaging.PixelFormat.BlackWhite
If Not isBlackWhiteImage Then
Dim page As Vintasoft.Imaging.Pdf.Tree.PdfPage = Vintasoft.Imaging.Pdf.PdfDocumentController.GetPageAssociatedWithImage(e.Image)
If page IsNot Nothing AndAlso page.BackgroundImage IsNot Nothing Then
isBlackWhiteImage = page.BackgroundImage.PixelFormat = Vintasoft.Imaging.PixelFormat.BlackWhite
End If
If isBlackWhiteImage Then
e.Image.RenderingSettings.Resolution = page.DefaultResolution
End If
End If
If isBlackWhiteImage Then
encoder.MrcCompressionSettings.EnableMrcCompression = False
encoder.Settings.Compression = Vintasoft.Imaging.Codecs.Encoders.PdfImageCompression.Jbig2
System.Console.WriteLine(String.Format("Encoding image {0} using JBIG2 compression...", e.Image.SourceInfo.PageIndex))
Else
encoder.MrcCompressionSettings.EnableMrcCompression = True
System.Console.WriteLine(String.Format("Encoding image {0} using MRC compression...", e.Image.SourceInfo.PageIndex))
End If
End Sub
''' <summary>
''' Sets MRC compression settings to compress the document
''' images, which contain text and pictures, using MRC compression
''' algorithm and get the resulting images with high quality.
''' </summary>
Public Shared Sub SetSetting_DocumentWithImagesHiQuality(settings As Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings)
settings.CreateBackgroundLayer = True
settings.BackgroundLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg Or Vintasoft.Imaging.Pdf.PdfCompression.Zip
settings.BackgroundLayerCompressionSettings.JpegQuality = 60
settings.ImageSegmentation = New Vintasoft.Imaging.ImageProcessing.Info.ImageSegmentationCommand()
settings.CreateImagesLayer = False
settings.HiQualityMask = True
settings.MaskCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jbig2
settings.MaskCompressionSettings.Jbig2Settings.Lossy = True
settings.CreateFrontLayer = True
settings.HiQualityFrontLayer = True
settings.FrontLayerCompression = Vintasoft.Imaging.Pdf.PdfCompression.Jpeg2000
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 300 * 3
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType = Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy
End Sub
// Required assemblies to run this code:
// Vintasoft.Imaging.dll, Vintasoft.Imaging.Ocr.dll, Vintasoft.Imaging.Ocr.Tesseract.dll,
// Vintasoft.Imaging.Pdf.dll, Vintasoft.Imaging.Pdf.Ocr.dll, Vintasoft.Imaging.Pdf.Mrc.dll,
// Vintasoft.Imaging.Jbig2.dll, Vintasoft.Imaging.Jpeg2000.dll
public static void ConvertToSearchablePdfWithMrcCompression(
Vintasoft.Imaging.Ocr.OcrLanguage language,
Vintasoft.Imaging.ImageCollection images,
Vintasoft.Imaging.Resolution mrcResolution,
Vintasoft.Imaging.Resolution ocrResolution,
string pdfFilename)
{
// create PDF MRC encoder
Vintasoft.Imaging.Codecs.Encoders.PdfMrcEncoder encoder =
new Vintasoft.Imaging.Codecs.Encoders.PdfMrcEncoder();
// set MRC compression settings
SetSetting_DocumentWithImagesHiQuality(encoder.MrcCompressionSettings);
// set MRC resolution (if source is PDF document)
images.SetRenderingSettings(new Vintasoft.Imaging.Codecs.Decoders.RenderingSettings(mrcResolution));
// handle ImageSaving event to set JBIG2 compression for black-white images
encoder.ImageSaving +=
new System.EventHandler<Vintasoft.Imaging.ImageSavingEventArgs>(images_ImageSaving);
// save images to PDF use MRC compression
System.Console.WriteLine("Encoding using PDF MRC compression...");
images.SaveSync(pdfFilename, encoder);
// open PDF document with MRC compression
using (Vintasoft.Imaging.Pdf.PdfDocument document = new Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename, false))
{
System.Console.WriteLine("Create Tesseract OCR engine...");
using (Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr tesseractOcr =
new Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr())
{
System.Console.WriteLine("Initialize OCR engine...");
tesseractOcr.Init(new Vintasoft.Imaging.Ocr.OcrEngineSettings(language));
// create PDF document builder
Vintasoft.Imaging.Pdf.Ocr.PdfDocumentBuilder documentBuilder =
new Vintasoft.Imaging.Pdf.Ocr.PdfDocumentBuilder(document);
// set OCR resolution (if source is PDF document)
images.SetRenderingSettings(new Vintasoft.Imaging.Codecs.Decoders.RenderingSettings(ocrResolution));
// foreach image
for (int i = 0; i < images.Count; i++)
{
System.Console.WriteLine("Recognize image...");
Vintasoft.Imaging.Ocr.Results.OcrPage page = tesseractOcr.Recognize(images[i]);
System.Console.WriteLine("Set PDF page background...");
documentBuilder.SetAsBackground(i, page);
}
// shutdown OCR engine
tesseractOcr.Shutdown();
System.Console.WriteLine("Pack PDF document...");
document.Pack();
System.Console.WriteLine("OK.");
}
}
}
/// <summary>
/// Handles the ImageSaving event of the image collection.
/// </summary>
private static void images_ImageSaving(object sender, Vintasoft.Imaging.ImageSavingEventArgs e)
{
Vintasoft.Imaging.Codecs.Encoders.PdfMrcEncoder encoder =
sender as Vintasoft.Imaging.Codecs.Encoders.PdfMrcEncoder;
// set JBIG2 compression for black-white images
bool isBlackWhiteImage = e.Image.PixelFormat == Vintasoft.Imaging.PixelFormat.BlackWhite;
if (!isBlackWhiteImage)
{
Vintasoft.Imaging.Pdf.Tree.PdfPage page =
Vintasoft.Imaging.Pdf.PdfDocumentController.GetPageAssociatedWithImage(e.Image);
if (page != null && page.BackgroundImage != null)
isBlackWhiteImage = page.BackgroundImage.PixelFormat == Vintasoft.Imaging.PixelFormat.BlackWhite;
if (isBlackWhiteImage)
e.Image.RenderingSettings.Resolution = page.DefaultResolution;
}
if (isBlackWhiteImage)
{
encoder.MrcCompressionSettings.EnableMrcCompression = false;
encoder.Settings.Compression = Vintasoft.Imaging.Codecs.Encoders.PdfImageCompression.Jbig2;
System.Console.WriteLine(string.Format("Encoding image {0} using JBIG2 compression...", e.Image.SourceInfo.PageIndex));
}
else
{
encoder.MrcCompressionSettings.EnableMrcCompression = true;
System.Console.WriteLine(string.Format("Encoding image {0} using MRC compression...", e.Image.SourceInfo.PageIndex));
}
}
/// <summary>
/// Sets MRC compression settings to compress the document
/// images, which contain text and pictures, using MRC compression
/// algorithm and get the resulting images with high quality.
/// </summary>
public static void SetSetting_DocumentWithImagesHiQuality(
Vintasoft.Imaging.Codecs.Encoders.PdfMrcCompressionSettings settings)
{
settings.CreateBackgroundLayer = true;
settings.BackgroundLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg |
Vintasoft.Imaging.Pdf.PdfCompression.Zip;
settings.BackgroundLayerCompressionSettings.JpegQuality = 60;
settings.ImageSegmentation =
new Vintasoft.Imaging.ImageProcessing.Info.ImageSegmentationCommand();
settings.CreateImagesLayer = false;
settings.HiQualityMask = true;
settings.MaskCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jbig2;
settings.MaskCompressionSettings.Jbig2Settings.Lossy = true;
settings.CreateFrontLayer = true;
settings.HiQualityFrontLayer = true;
settings.FrontLayerCompression =
Vintasoft.Imaging.Pdf.PdfCompression.Jpeg2000;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionRatio = 300 * 3;
settings.FrontLayerCompressionSettings.Jpeg2000Settings.CompressionType =
Vintasoft.Imaging.Codecs.ImageFiles.Jpeg2000.Jpeg2000CompressionType.Lossy;
}
Requirements
Target Platforms: .NET9; .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5
See Also