Робота з зображеннями

Aspose.Words дозволяє користувачам працювати з зображеннями в дуже гнучкому режимі. У статті ви можете вивчити лише деякі можливості роботи з зображеннями.

Як вставити зображення

DocumentBuilder надає кілька перевантаженнях InsertImage метод, який дозволяє вставляти вбудований або плаваючий образ. Якщо зображення є метафілом EMF або WMF, він буде вставлятися в документ у форматі метафайлу. Всі інші зображення будуть зберігатися в форматі PNG. Про нас InsertImage метод може використовувати зображення з різних джерел:

  • Від файлу або URL шляхом проходження String параметр InsertImage
  • Від потоку шляхом проходження Stream параметр InsertImage
  • Від об’єкта зображень шляхом проходження параметра Зображення InsertImage
  • Від байтного масиву шляхом проходження параметра байтного масиву InsertImage

Для кожного InsertImage методи, є подальші перевантаження, які дозволяють вставляти зображення з такими опціями:

  • Інлайн або плавлення на певній позиції, наприклад, InsertImage
  • Процентна вага або користувацький розмір, наприклад, InsertImage; далі, InsertImage метод повертає Shape об’єкт, який був просто створений і вставлений таким чином, ви можете додатково змінювати властивості Форма

Як вставити вбудований зображення

Пройдіть один рядок, що представляє файл, який містить зображення InsertImage вставити зображення в документ як вбудована графіка

Приклад наступного коду показує, як вставити образ в рядку в позицію курсора в документ:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.InsertImage(dataDir + "Watermark.png");
dataDir = dataDir + "DocumentBuilderInsertInlineImage_out.doc";
doc.Save(dataDir);

Як вставити зображення Floating

Приклад наступного коду показує, як вставити плаваючу зображення з файлу або URL в зазначеному положенні і розмір:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.InsertImage(dataDir + "Watermark.png",
RelativeHorizontalPosition.Margin,
100,
RelativeVerticalPosition.Margin,
100,
200,
100,
WrapType.Square);
dataDir = dataDir + "DocumentBuilderInsertFloatingImage_out.doc";
doc.Save(dataDir);

Як витягти зображення з документа

Всі зображення зберігаються всередині Shape вершини в Documentй Щоб витягти всі зображення або зображення, які мають специфічний тип з документа, слідуйте за цими кроками:

  • Використовуйте GetChildNodes спосіб вибрати всі Shape вершини.
  • Зберігати за допомогою отриманих вершин.
  • Перевірити HasImage оленя майна.
  • Вилучення даних зображень за допомогою ImageData майно.
  • Збережіть дані зображень в файл.

Приклад коду показує, як витягти зображення з документа і зберегти їх як файли:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithImages();
Document doc = new Document(dataDir + "Image.SampleImages.doc");
NodeCollection shapes = doc.GetChildNodes(NodeType.Shape, true);
int imageIndex = 0;
foreach (Shape shape in shapes)
{
if (shape.HasImage)
{
string imageFileName = string.Format(
"Image.ExportImages.{0}_out{1}", imageIndex, FileFormatUtil.ImageTypeToExtension(shape.ImageData.ImageType));
shape.ImageData.Save(dataDir + imageFileName);
imageIndex++;
}
}

Як вставити штрих-код на кожній сторінці документів

Цей приклад показує вам, щоб додати однакові або різні штрих-коди на всіх або специфічних сторінках документа Word. Немає прямого способу додавання штрих-кодів на всіх сторінках документа, але ви можете використовувати MoveToSection, MoveToHeaderFooter і InsertImage методи переміщення в будь-який розділ або заголовки / нижній колонтитул і вставити зображення штрих-коду, як ви можете бачити в наступному коді.

Приклад коду показує, як вставити зображення штрих-коду на кожній сторінці документа:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithImages();
// Create a blank documenet.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// The number of pages the document should have.
int numPages = 4;
// The document starts with one section, insert the barcode into this existing section.
InsertBarcodeIntoFooter(builder, doc.FirstSection, 1, HeaderFooterType.FooterPrimary);
for (int i = 1; i < numPages; i++)
{
// Clone the first section and add it into the end of the document.
Section cloneSection = (Section)doc.FirstSection.Clone(false);
cloneSection.PageSetup.SectionStart = SectionStart.NewPage;
doc.AppendChild(cloneSection);
// Insert the barcode and other information into the footer of the section.
InsertBarcodeIntoFooter(builder, cloneSection, i, HeaderFooterType.FooterPrimary);
}
dataDir = dataDir + "Document_out.docx";
// Save the document as a PDF to disk. You can also save this directly to a stream.
doc.Save(dataDir);
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
private static void InsertBarcodeIntoFooter(DocumentBuilder builder, Section section, int pageId, HeaderFooterType footerType)
{
// Move to the footer type in the specific section.
builder.MoveToSection(section.Document.IndexOf(section));
builder.MoveToHeaderFooter(footerType);
// Insert the barcode, then move to the next line and insert the ID along with the page number.
// Use pageId if you need to insert a different barcode on each page. 0 = First page, 1 = Second page etc.
builder.InsertImage(System.Drawing.Image.FromFile( RunExamples.GetDataDir_WorkingWithImages() + "Barcode1.png"));
builder.Writeln();
builder.Write("1234567890");
builder.InsertField("PAGE");
// Create a right aligned tab at the right margin.
double tabPos = section.PageSetup.PageWidth - section.PageSetup.RightMargin - section.PageSetup.LeftMargin;
builder.CurrentParagraph.ParagraphFormat.TabStops.Add(new TabStop(tabPos, TabAlignment.Right, TabLeader.None));
// Move to the right hand side of the page and insert the page and page total.
builder.Write(ControlChar.Tab);
builder.InsertField("PAGE");
builder.Write(" of ");
builder.InsertField("NUMPAGES");
}

Lock Aspect Ratio Зображень

Співвідношення геометричної форми – співвідношення його розмірів в різних розмірах. Ви можете заблокувати співвідношення сторін зображення AspectRatioLockedй Значення за замовчуванням співвідношення сторін форми залежить від ShapeTypeй Він true для ShapeType.Image і false для інших типів форми.

Приклад коду показує, як працювати з співвідношенням сторін:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
var shape = builder.InsertImage(dataDir + "Test.png");
shape.AspectRatioLocked = false;
dataDir = dataDir + "Shape_AspectRatioLocked_out.doc";
// Save the document to disk.
doc.Save(dataDir);

Як отримати реальні зв’язки форми в точках

Якщо ви хочете, щоб фактична обмежена коробка форми, як надана на сторінці, ви можете досягти цього, використовуючи BoundsInPoints майно.

Приклад коду показує, як використовувати цю властивість:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
var shape = builder.InsertImage(dataDir + "Test.png");
shape.AspectRatioLocked = false;
Console.Write("\nGets the actual bounds of the shape in points.");
Console.WriteLine(shape.GetShapeRenderer().BoundsInPoints);

Crop Зображення

Вирощування зображення зазвичай відноситься до видалення небажаних зовнішніх частин зображення, щоб допомогти поліпшити обрамлення. Також використовується для видалення деяких порцій зображення для збільшення фокусу на певній області.

Приклад коду показує, як досягти цього за допомогою Aspose.Words API:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_WorkingWithImages();
string inputPath = dataDir + "ch63_Fig0013.jpg";
string outputPath = dataDir + "cropped-1.jpg";
CropImage(inputPath,outputPath, 124, 90, 570, 571);
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public static void CropImage(string inPath, string outPath, int left, int top,int width, int height)
{
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Image img = Image.FromFile(inPath);
int effectiveWidth = img.Width - width;
int effectiveHeight = img.Height - height;
Shape croppedImage = builder.InsertImage(img,
ConvertUtil.PixelToPoint(img.Width - effectiveWidth),
ConvertUtil.PixelToPoint(img.Height - effectiveHeight));
double widthRatio = croppedImage.Width / ConvertUtil.PixelToPoint(img.Width);
double heightRatio = croppedImage.Height / ConvertUtil.PixelToPoint(img.Height);
if (widthRatio< 1)
croppedImage.ImageData.CropRight = 1 - widthRatio;
if (heightRatio< 1)
croppedImage.ImageData.CropBottom = 1 - heightRatio;
float leftToWidth = (float)left / img.Width;
float topToHeight = (float)top / img.Height;
croppedImage.ImageData.CropLeft = leftToWidth;
croppedImage.ImageData.CropRight = croppedImage.ImageData.CropRight - leftToWidth;
croppedImage.ImageData.CropTop = topToHeight;
croppedImage.ImageData.CropBottom = croppedImage.ImageData.CropBottom - topToHeight;
croppedImage.GetShapeRenderer().Save(outPath, new ImageSaveOptions(SaveFormat.Jpeg));
}

Зберегти зображення як WMF

Aspose.Words забезпечує функціональність для збереження всіх доступних зображень в документі ВМФФормат при перетворенні DOCX в RTF.

Приклад коду показує, як зберегти зображення як WMF з параметрами збереження RTF:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
string fileName = "TestFile.doc";
Document doc = new Document(dataDir + fileName);
RtfSaveOptions saveOpts = new RtfSaveOptions();
saveOpts.SaveImagesAsWmf = true;
doc.Save(dataDir + "output.rtf", saveOpts);