9

私の OpenXML Word ドキュメント生成プロジェクトには、テキスト、表、および画像が必要です。しかし、最初に、ロゴ (画像) を含むドキュメント ヘッダーが必要です。

Generating Documents with Headers and Footers in Word 2007 by Using the Open XML SDK 2.0 for Microsoft Officeでヘッダーとフッターを作成する Microsoft の例を使用しました。 テキスト ヘッダーは正常に機能しますが、画像はヘッダーに壊れた画像アイコン、正しいサイズの境界線、および「この画像は現在表示できません」というメッセージ。また、選択した画像をドキュメント本文に読み込むこともできます。ImagePart を作成する方法は次のとおりです。

// Create AG logo part.
_agLogoPart = mainDocumentPart.AddImagePart(ImagePartType.Jpeg);
using (FileStream stream = new FileStream(_agLogoFilename, FileMode.Open))
{
    _agLogoPart.FeedData(stream);
}
_agLogoRel = mainDocumentPart.GetIdOfPart(_agLogoPart);

画像は、Microsoft の例から派生した LoadImage メソッドで読み込まれますが、幅と高さのパラメーターが追加され、Drawing オブジェクトが返されます。

private static Drawing LoadImage(string relationshipId,
                             string filename,
                             string picturename,
                             double inWidth,
                             double inHeight)
{
double emuWidth = Konsts.EmusPerInch * inWidth;
double emuHeight = Konsts.EmusPerInch * inHeight;

var element = new Drawing(
    new DW.Inline(
    new DW.Extent { Cx = (Int64Value)emuWidth, Cy = (Int64Value)emuHeight },
    new DW.EffectExtent { LeftEdge = 0L, TopEdge = 0L, RightEdge = 0L, BottomEdge = 0L },
    new DW.DocProperties { Id = (UInt32Value)1U, Name = picturename },
    new DW.NonVisualGraphicFrameDrawingProperties(
    new A.GraphicFrameLocks { NoChangeAspect = true }),
    new A.Graphic(
    new A.GraphicData(
    new PIC.Picture(
    new PIC.NonVisualPictureProperties(
    new PIC.NonVisualDrawingProperties { Id = (UInt32Value)0U, Name = filename },
    new PIC.NonVisualPictureDrawingProperties()),
    new PIC.BlipFill(
    new A.Blip(
    new A.BlipExtensionList(
    new A.BlipExtension { Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}" }))
    {
    Embed = relationshipId,
    CompressionState = A.BlipCompressionValues.Print },
    new A.Stretch(
    new A.FillRectangle())),
    new PIC.ShapeProperties(
    new A.Transform2D(
    new A.Offset { X = 0L, Y = 0L },
    new A.Extents { Cx = (Int64Value)emuWidth, Cy = (Int64Value)emuHeight }),
    new A.PresetGeometry(
    new A.AdjustValueList()) { Preset = A.ShapeTypeValues.Rectangle })))
    {
        Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture"
    }))
    {
        DistanceFromTop = (UInt32Value)0U,
        DistanceFromBottom = (UInt32Value)0U,
        DistanceFromLeft = (UInt32Value)0U,
        DistanceFromRight = (UInt32Value)0U,
        EditId = "50D07946"
    });
return element;
}

これを使用すると、次のコードが機能し、必要なボディの任意の場所に画像が読み込まれます。

Paragraph paraImage = new Paragraph(new Run(LoadImage(_genomeImageRel, _genomeImageFilename, "name" + _genomeImageRel, 7.5, 2.925)));
body.AppendChild(paraImage);

また、次のコードは、ヘッダーにロゴ画像を配置するために機能しません。

private static Header GeneratePageHeaderPart(string headerText)
{
    Header hdr = new Header(new Paragraph(new Run(LoadImage(_agLogoRel, _agLogoFilename, "name" + _agLogoRel, 2.57, 0.73))));
    return hdr;
}

ヘッダー以外のどこにでも画像をロードできるため、非常に微妙なことを誤って行っていると思われます。誰でもアドバイスできますか?

4

3 に答える 3

10

ヘッダー以外のどこにでも画像をロードできるため、非常に微妙なことを誤って行っていると思われます。

メイン文書に画像を挿入できる場合は、このコード ( private static Drawing LoadImage) を使用してヘッダーまたはフッターにも画像を挿入できます。

唯一の違いは、次を追加する場所ですImagePart

  • ドキュメントの本文に画像を挿入するには、 に を追加しImagePartますMainDocumentPart

    _agLogoPart = mainDocumentPart.AddImagePart(ImagePartType.Jpeg);
    ...
     _agLogoRel = mainDocumentPart.GetIdOfPart(_agLogoPart);
    
  • ヘッダーに画像を挿入するには、ヘッダーの作成に使用する に をImagePart追加する必要がありますHeaderPart

    _agLogoPart = headerPart.AddImagePart(ImagePartType.Jpeg);
    ...
    _agLogoRel = headerPart.GetIdOfPart(_agLogoPart);
    
  • フッターに画像を挿入するには、フッターの作成に使用する に をImagePart追加する必要があります。FooterPart

    _agLogoPart = footerPart.AddImagePart(ImagePartType.Jpeg);
    ...
    _agLogoRel = footerPart.GetIdOfPart(_agLogoPart);
    

関連している:

于 2013-08-02T15:28:26.720 に答える