Görsellerle Çalışmak

Aspose.Words, kullanıcıların görüntülerle çok esnek bir şekilde çalışmasına olanak tanır. Bu makalede görüntülerle çalışmanın yalnızca bazı olanaklarını keşfedebilirsiniz.

Resim {#insert-an-image} Nasıl Eklenir

DocumentBuilder, satır içi veya kayan bir görüntü eklemenize olanak tanıyan InsertImage yönteminin çeşitli aşırı yüklemelerini sağlar. Görüntü bir EMF veya WMF meta dosyasıysa, belgeye meta dosyası biçiminde eklenecektir. Diğer tüm görseller PNG formatında saklanacaktır. InsertImage yöntemi farklı kaynaklardan gelen görselleri kullanabilir:

  • Bir dosyadan veya URL‘ten bir String parametresi InsertImage‘i ileterek
  • Bir Stream parametresi InsertImage‘yi ileterek bir akıştan
  • Bir Image parametresi InsertImage‘i ileterek bir Image nesnesinden
  • Bir bayt dizisinden, bir bayt dizisi parametresi InsertImage‘i ileterek

InsertImage yöntemlerinin her biri için, aşağıdaki seçeneklere sahip bir görüntü eklemenizi sağlayan başka aşırı yüklemeler vardır:

  • InsertImage gibi belirli bir konumda satır içi veya kayan
  • Yüzde ölçeği veya özel boyut, örneğin InsertImage; ayrıca InsertImage yöntemi yeni oluşturulmuş ve eklenen bir Shape nesnesini döndürür, böylece Shape’in özelliklerini daha fazla değiştirebilirsiniz

Satır İçi Görüntü {#insert-an-inline-image} Nasıl Eklenir

Görüntüyü belgeye satır içi grafik olarak eklemek için, görüntüyü içeren bir dosyayı temsil eden tek bir dizeyi InsertImage‘e iletin

Aşağıdaki kod örneği, imleç konumunda satır içi görüntünün bir belgeye nasıl ekleneceğini gösterir:

// 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);

Kayan Görüntü {#insert-a-floating-image} Nasıl Eklenir

Aşağıdaki kod örneği, bir dosyadan veya URL‘ten belirli bir konuma ve boyuta kayan görüntünün nasıl ekleneceğini gösterir:

// 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);

Bir Belge {#how-to-extract-images-from-a-document}‘ten Görüntüler Nasıl Çıkarılır

Tüm görüntüler bir Document‘deki Shape düğümlerinde saklanır. Belgeden tüm görüntüleri veya belirli türdeki görüntüleri çıkarmak için şu adımları izleyin:

  • Tüm Shape düğümlerini seçmek için GetChildNodes yöntemini kullanın.
  • Ortaya çıkan düğüm koleksiyonlarını yineleyin.
  • HasImage boole özelliğini kontrol edin.
  • ImageData özelliğini kullanarak görüntü verilerini çıkarın.
  • Görüntü verilerini bir dosyaya kaydedin.

Aşağıdaki kod örneği, bir belgeden görüntülerin nasıl çıkarılacağını ve bunların dosya olarak nasıl kaydedileceğini gösterir:

// 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++;
}
}

Her Belge Sayfasına Barkod Nasıl Eklenir

Bu örnek, bir Word belgesinin tüm veya belirli sayfalarına aynı veya farklı barkodları ekleyebileceğinizi gösterir. Bir belgenin tüm sayfalarına barkod eklemenin doğrudan bir yolu yoktur ancak aşağıdaki kodda görebileceğiniz gibi herhangi bir bölüme veya üstbilgi/altbilgiye gitmek ve barkod resimlerini eklemek için MoveToSection, MoveToHeaderFooter ve InsertImage yöntemlerini kullanabilirsiniz.

Aşağıdaki kod örneği, bir belgenin her sayfasına barkod görüntüsünün nasıl ekleneceğini gösterir:

// 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");
}

Görüntü {#lock-aspect-ratio-of-image}‘in En Boy Oranını Kilitle

Geometrik bir şeklin en boy oranı, farklı boyutlardaki boyutlarının oranıdır. AspectRatioLocked‘i kullanarak görüntünün en boy oranını kilitleyebilirsiniz. Şeklin en boy oranının varsayılan değeri ShapeType‘ye bağlıdır. ShapeType.Image için true, diğer şekil türleri için false‘dur.

Aşağıdaki kod örneği en boy oranıyla nasıl çalışılacağını gösterir:

// 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);

Points {#how-to-get-actual-bounds-of-shape-in-points}‘te Gerçek Şekil Sınırları Nasıl Elde Edilir

Şeklin gerçek sınırlayıcı kutusunun sayfada işlendiği şekliyle olmasını istiyorsanız bunu BoundsInPoints özelliğini kullanarak başarabilirsiniz.

Aşağıdaki kod örneği bu özelliğin nasıl kullanılacağını gösterir:

// 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);

Görüntüleri Kırp

Bir görüntünün kırpılması genellikle çerçevelemenin iyileştirilmesine yardımcı olmak için görüntünün istenmeyen dış kısımlarının kaldırılması anlamına gelir. Ayrıca belirli bir alana odaklanmayı artırmak amacıyla görüntünün bazı bölümlerinin kaldırılması için de kullanılır.

Aşağıdaki kod örneği, Aspose.Words API kullanılarak bunun nasıl başarılacağını gösterir:

// 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));
}

Görüntüleri WMF {#save-images-as-wmf} Olarak Kaydet

Aspose.Words, DOCX’i RTF’ye dönüştürürken bir belgedeki mevcut tüm görüntüleri WMF biçiminde kaydetme işlevi sağlar.

Aşağıdaki kod örneği, görüntülerin RTF kaydetme seçenekleriyle WMF olarak nasıl kaydedileceğini gösterir:

// 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);