Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Каждая страница PDF содержит свойства ресурсов и содержимого. Ресурсы могут быть изображениями и формами, например, в то время как содержимое представлено набором операторов PDF. Каждый оператор имеет свое имя и аргумент. Этот пример использует операторы для добавления изображения в PDF-файл.
Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.
Чтобы добавить изображение в существующий PDF-файл:
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void AddImageToPDF()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "AddImage.pdf"))
{
// Set coordinates for the image placement
int lowerLeftX = 100;
int lowerLeftY = 100;
int upperRightX = 200;
int upperRightY = 200;
// Get the page where image needs to be added
var page = document.Pages[1];
// Load image into stream
using (var imageStream = new FileStream(dataDir + "AddImage.jpg", FileMode.Open))
{
// Add image to Images collection of Page Resources
page.Resources.Images.Add(imageStream);
// Using GSave operator: this operator saves the current graphics state
page.Contents.Add(new Aspose.Pdf.Operators.GSave());
// Create Rectangle and Matrix objects to define image positioning
var rectangle = new Aspose.Pdf.Rectangle(lowerLeftX, lowerLeftY, upperRightX, upperRightY);
var matrix = new Aspose.Pdf.Matrix(new double[] { rectangle.URX - rectangle.LLX, 0, 0, rectangle.URY - rectangle.LLY, rectangle.LLX, rectangle.LLY });
// Using ConcatenateMatrix operator: defines how the image must be placed
page.Contents.Add(new Aspose.Pdf.Operators.ConcatenateMatrix(matrix));
// Retrieve the added image and use Do operator to draw it
var ximage = page.Resources.Images[page.Resources.Images.Count];
page.Contents.Add(new Aspose.Pdf.Operators.Do(ximage.Name));
// Using GRestore operator: this operator restores the graphics state
page.Contents.Add(new Aspose.Pdf.Operators.GRestore());
}
// Save PDF document
document.Save(dataDir + "AddImage_out.pdf");
}
}
Существует также альтернативный, более простой способ добавить изображение в PDF-файл. Вы можете использовать метод AddImage класса PdfFileMend. Метод AddImage требует изображение, которое нужно добавить, номер страницы, на которую нужно добавить изображение, и информацию о координатах. После этого сохраните обновленный PDF-файл, используя метод Close. Следующий фрагмент кода показывает, как добавить изображение в существующий PDF-файл.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void AddImageToPDFUsingPdfFileMender()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// Define image file and output PDF file paths
var imageFileName = Path.Combine(dataDir, "Images", "Sample-01.jpg");
// Create PDF document
using (var document = new Aspose.Pdf.Document())
{
// Add first page with specified size
var page = document.Pages.Add();
page.SetPageSize(Aspose.Pdf.PageSize.A3.Height, Aspose.Pdf.PageSize.A3.Width);
// Add second page
page = document.Pages.Add();
// Create PdfFileMend object
var mender = new Aspose.Pdf.Facades.PdfFileMend(document);
// Add image to the first page using the mender
mender.AddImage(imageFileName, 1, 0, 0, (float)page.CropBox.Width, (float)page.CropBox.Height);
// Save PDF document
document.Save(dataDir + "AddImageMender_out.pdf");
}
}
Иногда необходимо обрезать изображение перед вставкой его в PDF. Вы можете использовать метод AddImage()
, чтобы поддерживать добавление обрезанных изображений:
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void AddCroppedImageToPDF()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Images();
// Define image file and output PDF file paths
var imageFileName = Path.Combine(dataDir, "Images", "Sample-01.jpg");
var outputPdfFileName = dataDir + "Example-add-image-mender.pdf";
// Open PDF document
using (var document = new Aspose.Pdf.Document())
{
// Open image stream
using (var imgStream = File.OpenRead(imageFileName))
{
// Define the rectangle where the image will be placed on the PDF page
var imageRect = new Aspose.Pdf.Rectangle(17.62, 65.25, 602.62, 767.25);
// Crop the image to half its original width and height
var w = imageRect.Width / 2;
var h = imageRect.Height / 2;
var bbox = new Aspose.Pdf.Rectangle(imageRect.LLX, imageRect.LLY, imageRect.LLX + w, imageRect.LLY + h);
// Add page
var page = document.Pages.Add();
// Insert the cropped image onto the page, specifying the original position (imageRect)
// and the cropping area (bbox)
page.AddImage(imgStream, imageRect, bbox);
}
// Save PDF document to the specified file path
document.Save(dataDir + "AddCroppedImageMender_out.pdf");
}
}
Если мы не знаем размеры изображения, существует вероятность получения искаженного изображения на странице. Следующий пример показывает один из способов избежать этого.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void AddingImageAndPreserveAspectRatioIntoPDF()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Images();
// Load the image
using (var bitmap = System.Drawing.Image.FromFile(dataDir + "InputImage.jpg"))
{
// Get the original width and height of the image
int width = bitmap.Width;
int height = bitmap.Height;
// Create PDF document
using (var document = new Aspose.Pdf.Document())
{
// Add page
var page = document.Pages.Add();
// Define the scaled width and height while preserving the aspect ratio
int scaledWidth = 400;
int scaledHeight = scaledWidth * height / width;
// Add the image to the page
page.AddImage(dataDir + "InputImage.jpg", new Aspose.Pdf.Rectangle(10, 10, scaledWidth, scaledHeight));
// Save PDF document
document.Save(dataDir + "PreserveAspectRatio.pdf");
}
}
}
Разные типы сжатия могут применяться к изображениям для уменьшения их размера. Тип сжатия, применяемого к изображению, зависит от ColorSpace исходного изображения, т.е. если изображение цветное (RGB), то применяйте сжатие JPEG2000, а если оно черно-белое, то должно применяться сжатие JBIG2/JBIG2000. Поэтому определение каждого типа изображения и использование соответствующего типа сжатия создаст лучший/оптимизированный результат.
PDF-файл может содержать текст, изображения, графики, вложения, аннотации и т.д., и если исходный PDF-файл содержит изображения, мы можем определить цветовое пространство изображения и применить соответствующее сжатие для уменьшения размера PDF-файла. Следующий фрагмент кода показывает шаги для определения, является ли изображение внутри PDF цветным или черно-белым.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractImageTypesFromPDF()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Images();
// Counters for grayscale and RGB images
int grayscaled = 0;
int rgb = 0;
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "ExtractImages.pdf"))
{
// Iterate through all pages in the document
foreach (Aspose.Pdf.Page page in document.Pages)
{
Console.WriteLine("--------------------------------");
var abs = new Aspose.Pdf.ImagePlacementAbsorber();
page.Accept(abs);
// Get the count of images on the current page
Console.WriteLine("Total Images = {0} on page number {1}", abs.ImagePlacements.Count, page.Number);
// Iterate through all the image placements on the page
int image_counter = 1;
foreach (Aspose.Pdf.ImagePlacement ia in abs.ImagePlacements)
{
// Determine the color type of the image
var colorType = ia.Image.GetColorType();
switch (colorType)
{
case Aspose.Pdf.ColorType.Grayscale:
++grayscaled;
Console.WriteLine("Image {0} is Grayscale...", image_counter);
break;
case Aspose.Pdf.ColorType.Rgb:
++rgb;
Console.WriteLine("Image {0} is RGB...", image_counter);
break;
}
image_counter += 1;
}
}
}
}
Можно контролировать качество изображения, которое добавляется в PDF-файл. Используйте перегруженный метод Replace в классе XImageCollection.
Следующий фрагмент кода демонстрирует, как преобразовать все изображения документа в JPEG с использованием 80% качества для сжатия.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ReplaceImagesInPDF()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Images();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "ReplaceImages.pdf"))
{
// Iterate through all pages in the document
foreach (Aspose.Pdf.Page page in document.Pages)
{
int idx = 1;
// Iterate through all images in the page's resources
foreach (Aspose.Pdf.XImage image in page.Resources.Images)
{
using (var imageStream = new MemoryStream())
{
// Save the image as JPEG with 80% quality
image.Save(imageStream, System.Drawing.Imaging.ImageFormat.Jpeg);
// Replace the image in the page's resources
page.Resources.Images.Replace(idx, imageStream, 80);
idx = idx + 1;
}
}
}
// Save PDF document
document.Save(dataDir + "ReplaceImages_out.pdf");
}
}
Размещение векторной формы поверх базового растрового изображения функционирует как маска, открывая только ту часть базового дизайна, которая совпадает с векторной формой. Все области вне формы будут скрыты.
Фрагмент кода загружает PDF, открывает два файла изображений и применяет эти изображения в качестве трафаретных масок к первым двум изображениям на первой странице PDF.
Маска трафарета может быть добавлена с помощью метода ‘XImage.AddStencilMask(Stream maskStream)’:
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void AddStencilMasksToImages()
{
// The path to the documents directory
var dataDir = RunExamples.GetDataDir_AsposePdf_Images();
// Open PDF document
using (var document = new Aspose.Pdf.Document(dataDir + "AddStencilMasksToImages.pdf"))
{
// Open the first mask image file
using (var fs1 = new FileStream(dataDir + "mask1.jpg", FileMode.Open))
{
// Open the second mask image file
using (var fs2 = new FileStream(dataDir + "mask2.png", FileMode.Open))
{
// Apply stencil mask to the first image on the first page
document.Pages[1].Resources.Images[1].AddStencilMask(fs1);
// Apply stencil mask to the second image on the first page
document.Pages[1].Resources.Images[2].AddStencilMask(fs2);
}
}
// Save PDF document
document.Save(dataDir + "AddStencilMasksToImages_out.pdf");
}
}
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.