Extracts an attachment from an owner's file stored in a stream, and saves it to an output file.
public void ExtractAttachment(
Stream stream,
int attachmentNumber,
string outputFileName
)
public:
void ExtractAttachment(
Stream^ stream,
Int32 attachmentNumber,
String^ outputFileName
)
def ExtractAttachment(self,stream,attachmentNumber,outputFileName):
stream
Stream containing the data of the owner's file.
attachmentNumber
1-based attachment number to extract. This value must be between 1 and the number of attachments in the file.
outputFileName
File that will contain the attachment file's data.
Call CodecsImageInfo.AttachmentCount to quickly determine the number of attachments found a file.
Call ReadAttachments to obtain the number and properties of all attachments found a file.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Color;
using Leadtools.Svg;
private static void ReadAttachmentsExample(string fileName, string outputDir)
{
using (RasterCodecs rasterCodecs = new RasterCodecs())
{
int attachmentCount;
// Get information on the owner file
// This step is optional if we are not interested in determining whether the owner file format
// or whether it is a PDF portfolio.
using (CodecsImageInfo imageInfo = rasterCodecs.GetInformation(fileName, true))
{
Debug.WriteLine("Information");
Debug.WriteLine("Format:" + imageInfo.Format);
// If PDF, check if it is portfolio
if (imageInfo.Format == RasterImageFormat.RasPdf)
Debug.WriteLine("IsPortfolio:" + imageInfo.IsPortfolio);
attachmentCount = imageInfo.AttachmentCount;
Debug.WriteLine("Attachments:" + imageInfo.AttachmentCount);
}
// Read the properties of the attachments embedded in this file
CodecsAttachments attachments = rasterCodecs.ReadAttachments(fileName);
if (attachments == null)
{
// The format either:
// - Does not support attachments
// - LEADTOOLS does not support reading its attachments
Debug.WriteLine("Attachments is not supported for this file format");
return;
}
// Sanity check
Debug.Assert(attachments.Count == attachmentCount);
Debug.Assert(attachments.OriginalFormat == RasterImageFormat.Unknown);
if (attachments.Count == 0)
{
Debug.WriteLine("No attachments to extract");
return;
}
// Create the output directory if it does not exist
if (!Directory.Exists(outputDir))
Directory.CreateDirectory(outputDir);
// Extract the attachments
foreach (CodecsAttachment attachment in attachments)
{
// Get the output file name
string outputFileName = Path.Combine(outputDir, attachment.FileName);
var description = attachment.Description;
var displayName = attachment.DisplayName;
var fileLength = attachment.FileLength;
var metaData = attachment.Metadata;
var timeCreated = attachment.TimeCreated;
var timeModified = attachment.TimeModified;
Debug.WriteLine("Extracting attachment to output file: " + outputFileName);
rasterCodecs.ExtractAttachment(fileName, attachment.AttachmentNumber, outputFileName);
// Show information on this attachment
try
{
using (CodecsImageInfo imageInfo = rasterCodecs.GetInformation(outputFileName, true))
{
Debug.WriteLine($" attachment format is {imageInfo.Format} and has {imageInfo.TotalPages} pages");
}
}
catch (Exception ex)
{
Debug.WriteLine($" attachment format could not be obtained, error {ex.Message}");
}
}
}
}
import java.io.*;
import java.net.*;
import java.nio.file.Paths;
import java.util.*;
import java.time.Instant;
import java.time.Duration;
import org.junit.*;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
import static org.junit.Assert.*;
import leadtools.*;
import leadtools.codecs.*;
import leadtools.codecs.RasterCodecs.FeedCallbackThunk;
import leadtools.drawing.internal.*;
import leadtools.imageprocessing.*;
import leadtools.imageprocessing.color.ChangeIntensityCommand;
import leadtools.svg.*;
public void readAttachmentsExample() throws IOException {
final String LEAD_VARS_IMAGES_DIR = "C:\\LEADTOOLS23\\Resources\\Images";
String fileName = combine(LEAD_VARS_IMAGES_DIR, "pdfsegmentation.pdf");
String outputDir = combine(LEAD_VARS_IMAGES_DIR, "attachments_test.pdf");
RasterCodecs rasterCodecs = new RasterCodecs();
int attachmentCount;
// Get information on the owner file
// This step is optional if we are not interested in determining whether the
// owner file format
// or whether it is a PDF portfolio.
CodecsImageInfo imageInfo = rasterCodecs.getInformation(fileName, true);
System.out.println("Information");
System.out.println("Format:" + imageInfo.getFormat());
// If PDF, check if it is portfolio
if (imageInfo.getFormat() == RasterImageFormat.RAS_PDF)
System.out.println("IsPortfolio:" + imageInfo.isPortfolio());
attachmentCount = imageInfo.getAttachmentCount();
System.out.println("Attachments:" + imageInfo.getAttachmentCount());
// Read the properties of the attachments embedded in this file
CodecsAttachments attachments = rasterCodecs.readAttachments(fileName);
if (attachments == null) {
// The format either:
// - Does not support attachments
// - LEADTOOLS does not support reading its attachments
System.out.println("Attachments is not supported for this file format");
return;
}
// Sanity check
assertTrue(attachments.size() == attachmentCount);
assertTrue(attachments.getOriginalFormat() == RasterImageFormat.UNKNOWN);
if (attachments.size() == 0) {
System.out.println("No attachments to extract");
return;
}
// Create the output directory if it does not exist
File outputDirFile = new File(outputDir);
if (!outputDirFile.exists())
outputDirFile.createNewFile();
// Extract the attachments
for (CodecsAttachment attachment : attachments) {
// Get the output file name
String outputFileName = combine(outputDir, attachment.getFileName());
String description = attachment.getDescription();
String displayName = attachment.getDisplayName();
long fileLength = attachment.getFileLength();
Map<String, String> metaData = attachment.getMetadata();
Date timeCreated = attachment.getTimeCreated();
Date timeModified = attachment.getTimeModified();
System.out.println("Description: " + description);
System.out.println("Display name: " + displayName);
System.out.println("File length: " + fileLength);
System.out.println("Meta data: " + metaData);
System.out.println("Time created: " + timeCreated);
System.out.println("Time modified: " + timeModified);
System.out.println("Extracting attachment to output file: " + outputFileName);
rasterCodecs.extractAttachment(fileName, attachment.getAttachmentNumber(), outputFileName);
// Show information on this attachment
try {
imageInfo = rasterCodecs.getInformation(outputFileName, true);
System.out.println(" attachment format is {imageInfo.Format} and has {imageInfo.TotalPages} pages");
} catch (Exception ex) {
System.out.println(" attachment format could not be obtained, error {ex.Message}");
}
}
}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document