PDFとして保存する前に、透かし画像(ひな形として使用)をドキュメントに追加する必要があるコードで大きな問題が発生しています。関連するすべてのヘッダーに画像を挿入しても問題ありません。しかし、画像(図形)をページの幅と高さ全体に拡大しようとすると、Word 2007(SP3)は例外をスローします。同じコードがWord2010(SP1)で正常に機能します。Office12またはOffice14の相互運用機能アセンブリを使用するかどうかは関係ありません(常に「埋め込み相互運用機能の種類」がtrueで使用されます)。
スローされる例外は次のとおりです。
System.Runtime.InteropServices.COMException (0x800A122C): Falscher Zeichnungselement-Typ für diesen Befehl.
at Microsoft.Office.Interop.Word.Shape.set_RelativeHorizontalSize(WdRelativeHorizontalSize prop)
at BEKO.PDB.AuxiliaryServices.Documents.WordCreationService.AddWatermarkToHeader(HeaderFooter header, String watermarkFilePath)
英語のエラーメッセージが何であるか正確にはわかりませんが、翻訳は「このコマンドの無効なペイントタイプ(またはおそらくシェイプタイプ)」のようなものです。
奇妙なことに、同じ相互運用機能の呼び出しで常にエラーが発生するとは限りません。プロパティを設定する行を削除すると、(同じ例外を除いて)のRelativeHorizontalSize
ように、別のプロパティを設定するときに失敗します。(「使用しない」定数に)WidthRelative
設定する行を追加すると、それ以外の場合は(同じ例外を除いて)同じように機能する行でも失敗します。shape.LeftRelative
shape.Top
私が使用しているコードは、失敗したWord 2007で記録されたマクロからのものです。また、他のヘッダー/フッターコードで既に必要だったため、ヘッダー関連のコードを実行する前に、ヘッダーSeekViewに正しく切り替えています。
これが形状を追加する完全なコードです。画像を挿入して、フルページサイズに拡大するだけです。headerFooter.Exists
注:このメソッドは、実際に存在し( )、前の()にリンクされていないヘッダーに対してのみ呼び出され!headerFooter.LinkToPrevious
ます。
private static void AddWatermarkToHeader(HeaderFooter header, string watermarkFilePath) {
header.Range.Editors.Add(WdEditorType.wdEditorEveryone);
Shape shape = header.Shapes.AddPicture(
FileName: watermarkFilePath,
LinkToFile: false,
SaveWithDocument: true
);
shape.WrapFormat.AllowOverlap = (int)MsoTriState.msoTrue;
shape.WrapFormat.Type = WdWrapType.wdWrapNone;
shape.RelativeHorizontalPosition = WdRelativeHorizontalPosition.wdRelativeHorizontalPositionPage;
shape.RelativeVerticalPosition = WdRelativeVerticalPosition.wdRelativeVerticalPositionPage;
shape.Left = 0;
shape.Top = 0;
shape.RelativeHorizontalSize = WdRelativeHorizontalSize.wdRelativeHorizontalSizePage;
shape.RelativeVerticalSize = WdRelativeVerticalSize.wdRelativeVerticalSizePage;
shape.WidthRelative = 100;
shape.HeightRelative = 100;
shape.ZOrder(MsoZOrderCmd.msoSendBehindText);
}
コードがWord2007とWord2010の両方で機能するように、これを修正する方法についてアドバイスをお願いします。