Wordファイルに透かしを入れて、PDFに保存

Wordファイルを開いて、透かしを入れてPDFファイルに保存します。
透かしを入れる処理は、WordWatermark 関数で指定します。

Sub WordToPDFWatermark(filename As String)
	Dim WordApp As Word.Application
	Dim WordDoc As Word.Document
	Dim BasePathName As String
	                    
	' エラーが発生したらエラー処理へジャンプ
	On Error GoTo ErrorProc
	                    '
	' Wordオブジェクトの参照を作成
	Set WordApp = CreateObject("Word.Application")

	' Wordを表示する
	WordApp.Visible = True

	' 一時的に非表示
	Application.DisplayAlerts = False

	' Word のドキュメントを開く
	Set WordDoc = WordApp.Documents.Open(filename)

	Application.DisplayAlerts = True

	' 透かしを入れる
	WordWatermark WordApp, "Sample"


	' ファイルパス+拡張子の無いファイル名を取得
	BasePathName = GetFileBasePathName(filename)


	' PDFファイルで保存
	WordDoc.ExportAsFixedFormat _
		OutputFileName:=BasePathName & ".pdf", _
		ExportFormat:=wdExportFormatPDF, _
		OpenAfterExport:=False, _
		OptimizeFor:=wdExportOptimizeForPrint, _
		Range:=wdExportAllDocument, _
		Item:=wdExportDocumentContent, _
		IncludeDocProps:=True, _
		KeepIRM:=True, _
		CreateBookmarks:=wdExportCreateHeadingBookmarks, _
		DocStructureTags:=True, _
		BitmapMissingFonts:=True, _
		UseISO19005_1:=False

	' Word を保存せずに閉じる
	WordDoc.Close SaveChanges:=False

	' 終了
	WordApp.Quit

	' オブジェクトを解放
	Set WordDoc = Nothing
	Set WordApp = Nothing

	' エラー処理前に終了
	Exit Sub

' エラー処理
ErrorProc:
	MsgBox "ファイルを開けません" & filename, vbExclamation

	' オブジェクトが有効な場合、終了処理
	If (WordApp Is Nothing) = False Then
		' 終了
		WordApp.Quit

		'オブジェクトを解放
		Set WordDoc = Nothing
	End If

End Sub

' Wordファイルに透かしを入れる
Sub WordWatermark(wdapp As Word.Application, msg As String)
	wdapp.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
	' ワードアートの図形を描画キャンバスに追加
	wdapp.Selection.HeaderFooter.Shapes.AddTextEffect( _
		0, msg, "游明朝", 1, False, False, 0, 0).Select
	With wdapp.Selection.ShapeRange
		.Name = msg                                 ' 図形の名前
		.TextEffect.NormalizedHeight = False        ' すべての文字(大文字,小文字)を同じ高さにするか
		.Line.Visible = False                       ' 文字の輪郭
		.Fill.Solid                                 ' 塗りつぶしを均一な色
		.Fill.ForeColor.RGB = RGB(192, 192, 192)    ' 文字色
		.Fill.Transparency = 0.5                    ' 透明度 0.0 (不透明) から 1.0 (透明)
		.Rotation = 0                               ' z 軸回りの回転数
		.LockAspectRatio = True                     ' 縦横比を保持
		.Height = 300                               ' 高さ
		.Width = 300                                ' 幅
		.WrapFormat.AllowOverlap = True             ' 特定の図形の他の図形とオーバー ラップできるか
		.WrapFormat.Side = wdWrapNone               ' 図形のどちら側で折り返すか
		.WrapFormat.Type = wdWrapNone               ' 図形の折り返しの種類を設定
		.RelativeHorizontalPosition = _
			wdRelativeVerticalPositionMargin    ' 図形範囲の相対的な水平方向の位置を指定
		.RelativeVerticalPosition = _
			wdRelativeVerticalPositionMargin    ' 図形範囲の相対的な垂直位置を指定
		.Left = wdShapeCenter                       ' 水平方向の位置をポイント単位で設定
		.Top = wdShapeCenter                        ' 垂直方向の位置をポイント単位で設定
	End With
End Sub

Wordファイルに透かしを入れる処理のパラメータを変更することで、形を変化させることができるので、説明します。

wdapp.Selection.HeaderFooter.Shapes.AddTextEffect で図形を追加します。
第1引数(例:0):テキストの効果(0~49を設定できます。変更して確認してみてください)
第2引数(例:msg):ワードアートの文字列(ここでは関数の引数で渡しています)
第3引数(例:”游明朝”):フォントの名前
第4引数(例:1):フォントの大きさ (*1)
第5引数(例:False):Trueの場合、フォントを太字にする
第6引数(例:False):Trueの場合、フォントを斜体にする
第7引数(例:0):図形の左端の位置を、描画キャンバスの左端からポイント単位で指定 (*1)
第8引数(例:0):図形の上端の位置を、描画キャンバスの上端からポイント単位で指定 (*1)
*1:後で高さと幅を設定するため影響はない

参考 : https://learn.microsoft.com/ja-jp/office/vba/api/word.shapes.addtexteffect

第5引数(太字)、第6引数(斜体)にした場合

Selection.ShapeRange で上(AddTextEffect)で作成した図形を操作していきます。
主に使うところを説明します。

.Line.Visible:文字に輪郭を付けるか、付けないか。

.Fill.ForeColor.RGB:文字の色を指定 (下の画像ではRGB(0,255,0)で緑を設定しています)

.Rotation:z 軸回りの回転数。(下の画像は90を指定しているので、90度回転しています)

コメント