場合によっては、Word ドキュメント内の画像を別の画像やテキストに置き換えたい場合があります。たとえば、履歴書を作成する場合、テンプレートの元にある画像を自分の写真に置き換える必要があります。この記事では、Spire.Doc for .NET を使用して、C# および VB.NET でプログラムによって Word の画像を置き換える方法を示します。
Spire.Doc for .NET をインストールします
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
C# および VB.NET で Word の画像を新しい画像に置き換る
Word 内の画像を別の画像に置き換えるには、ドキュメントの要素をループします。画像を検索してリストに追加します。次に、置換する画像をリストから取得し、DocPicture.LoadImage() メソッドを使用して別の画像に置換します。詳細な手順は次のとおりです。
- Document クラスのインスタンスを初期化します。
- Document.LoadFromFile() メソッドを使用して Word ドキュメントをロードします。
- List クラスのインスタンスを初期化します。
- ドキュメント内のすべてのセクションをループします。
- 各セクションのすべての段落をループします。
- 各段落のすべてのサブオブジェクトをループします。
- 画像を検索してリストに追加します。
- リストから特定の画像を取得し、DocPicture.LoadImage() メソッドを使用して別の画像に置換します。
- Document.SaveToFile() メソッドを使用して結果ドキュメントを保存します。
- C#
- VB.NET
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Collections.Generic;
using System.Drawing;
namespace ReplaceImageWithImage
{
internal class Program
{
static void Main(string[] args)
{
//Documentクラスのインスタンスを初期化する
Document doc = new Document();
//Wordドキュメントをロードする
doc.LoadFromFile("Sample.docx");
//Listクラスのインスタンスを初期化する
List pictures = new List();
//ドキュメント内のすべてのセクションをループする
foreach (Section sec in doc.Sections)
{
//各セクションのすべての段落をループする
foreach (Paragraph para in sec.Paragraphs)
{
//各段落内のすべてのサブオブジェクトをループする
foreach (DocumentObject docObj in para.ChildObjects)
{
//画像を検索してリストに追加する
if (docObj.DocumentObjectType == DocumentObjectType.Picture)
{
pictures.Add(docObj);
}
}
}
}
//リストの最初の画像を別の画像に置き換える
DocPicture picture = pictures[0] as DocPicture;
picture.LoadImage(Image.FromFile(@"doc.png"));
//結果ドキュメントを保存する
doc.SaveToFile("ReplaceWithNewImage.docx", FileFormat.Docx2013);
}
}
}
Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Imports System.Collections.Generic
Namespace ReplaceImageWithImage
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'Documentクラスのインスタンスを初期化する
Dim doc As Document = New Document()
'Wordドキュメントをロードする
doc.LoadFromFile("Sample.docx")
'Listクラスのインスタンスを初期化する
Dim pictures As List(Of DocumentObject) = New List(Of DocumentObject)()
'ドキュメント内のすべてのセクションをループする
For Each sec As Section In doc.Sections
'各セクションのすべての段落をループする
For Each para As Paragraph In sec.Paragraphs
'各段落内のすべてのサブオブジェクトをループする
For Each docObj As DocumentObject In para.ChildObjects
'画像を検索してリストに追加する
If docObj.DocumentObjectType Is DocumentObjectType.Picture Then
pictures.Add(docObj)
End If
Next
Next
Next
'リストの最初の画像を別の画像に置き換える
Dim picture As DocPicture = TryCast(pictures(0), DocPicture)
picture.LoadImage(Image.FromFile("doc.png"))
'結果ドキュメントを保存する
doc.SaveToFile("ReplaceWithNewImage.docx", FileFormat.Docx2013)
End Sub
End Class
End Namespace
C# および VB.NET で Word の画像をテキストに置き換える
Spire.Doc は画像をテキストに直接置き換える方法を提供していない。しかし、この機能は、画像の位置にテキストを挿入し、ドキュメントから画像を削除することで実現できます。次の手順では、Word 内のすべての画像をテキストに置換き換える方法を示します。
- Document クラスのインスタンスを初期化します。
- Document.LoadFromFile() メソッドを使用して Word ドキュメントをロードします。
- ドキュメント内のすべてのセクションをループします。
- 各セクションのすべての段落をループします。
- List クラスのインスタンスを初期化します。
- 各段落のすべてのサブオブジェクトをループします。
- 画像を検索してリストに追加します。
- リスト内の画像をループします。
- Paragraph.ChildObjects.Indexof() メソッドを使用して、段落の画像のインデックスを取得します。
- TextRange クラスのインスタンスを初期化し、TextRange.Text プロパティを使用してテキスト範囲のテキストを設定します。
- Paragraph.ChildObjects.Insert() メソッドを使用して、画像の位置にテキスト範囲を挿入します。
- Paragraph.ChildObjects.Remove() メソッドを使用して段落から画像を削除します。
- Document.SaveToFile() メソッドを使用して結果ドキュメントを保存します。
- C#
- VB.NET
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Collections.Generic;
namespace ReplaceImageWithText
{
internal class Program
{
static void Main(string[] args)
{
//Documentクラスのインスタンスを初期化する
Document doc = new Document();
//Wordドキュメントをロード する
doc.LoadFromFile("Sample.docx");
int j = 1;
//ドキュメント内のすべてのセクションをループする
foreach (Section sec in doc.Sections)
{
//各セクションのすべての段落をループする
foreach (Paragraph para in sec.Paragraphs)
{
//Listクラスのインスタンスを初期化する
List pictures = new List();
//画像を検索してリストに追加する
foreach (DocumentObject docObj in para.ChildObjects)
{
if (docObj.DocumentObjectType == DocumentObjectType.Picture)
{
pictures.Add(docObj);
}
}
//リスト内のすべての画像をループし、テキストに置き換える
foreach (DocumentObject pic in pictures)
{
int index = para.ChildObjects.IndexOf(pic);
TextRange range = new TextRange(doc);
range.Text = string.Format("Image-{0}", j);
para.ChildObjects.Insert(index, range);
para.ChildObjects.Remove(pic);
j++;
}
}
}
//結果ドキュメントを保存する
doc.SaveToFile("ReplaceWithText.docx", FileFormat.Docx);
}
}
}
Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Imports System.Collections.Generic
Namespace ReplaceImageWithText
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'Documentクラスのインスタンスを初期化する
Dim doc As Document = New Document()
'Wordドキュメントをロード する
doc.LoadFromFile("Sample.docx")
Dim j = 1
'ドキュメント内のすべてのセクションをループする
For Each sec As Section In doc.Sections
'各セクションのすべての段落をループする
For Each para As Paragraph In sec.Paragraphs
'Listクラスのインスタンスを初期化する
Dim pictures As List(Of DocumentObject) = New List(Of DocumentObject)()
'画像を検索してリストに追加する
For Each docObj As DocumentObject In para.ChildObjects
If docObj.DocumentObjectType Is DocumentObjectType.Picture Then
pictures.Add(docObj)
End If
Next
'リスト内のすべての画像をループし、テキストに置き換える
For Each pic As DocumentObject In pictures
Dim index As Integer = para.ChildObjects.IndexOf(pic)
Dim range As TextRange = New TextRange(doc)
range.Text = String.Format("Image-{0}", j)
para.ChildObjects.Insert(index, range)
para.ChildObjects.Remove(pic)
j += 1
Next
Next
Next
'結果ドキュメントを保存する
doc.SaveToFile("ReplaceWithText.docx", FileFormat.Docx)
End Sub
End Class
End Namespace
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。