コード例 #1
0
        private static OXmlAnchorPictureDrawing CreateAnchorPictureDrawing(BsonDocument element, OXmlAnchorWrapType wrapType)
        {
            OXmlAnchorPictureDrawing anchor = new OXmlAnchorPictureDrawing();

            anchor.AnchorId           = element.zGet("AnchorId").zAsString();
            anchor.EditId             = element.zGet("EditId").zAsString();
            anchor.DistanceFromTop    = element.zGet("DistanceFromTop").zAsNullableInt();
            anchor.DistanceFromBottom = element.zGet("DistanceFromBottom").zAsNullableInt();
            anchor.DistanceFromLeft   = element.zGet("DistanceFromLeft").zAsNullableInt();
            anchor.DistanceFromRight  = element.zGet("DistanceFromRight").zAsNullableInt();

            anchor.HorizontalPosition.RelativeFrom        = element.zGet("HorizontalRelativeFrom").zAsString().zTryParseEnum(DW.HorizontalRelativePositionValues.Margin);
            anchor.HorizontalPosition.PositionOffset      = element.zGet("HorizontalPositionOffset").zAsNullableInt();
            anchor.HorizontalPosition.HorizontalAlignment = element.zGet("HorizontalAlignment").zAsString();

            anchor.VerticalPosition.RelativeFrom      = element.zGet("VerticalRelativeFrom").zAsString().zTryParseEnum(DW.VerticalRelativePositionValues.Paragraph);
            anchor.VerticalPosition.PositionOffset    = element.zGet("VerticalPositionOffset").zAsNullableInt();
            anchor.VerticalPosition.VerticalAlignment = element.zGet("VerticalAlignment").zAsString();

            anchor.EffectExtent = CreateEffectExtent(element.zGet("EffectExtent").zAsBsonDocument());

            anchor.AllowOverlap   = element.zGet("AllowOverlap").zAsBoolean();
            anchor.BehindDoc      = element.zGet("BehindDoc").zAsBoolean();
            anchor.Hidden         = element.zGet("Hidden").zAsBoolean();
            anchor.LayoutInCell   = element.zGet("LayoutInCell").zAsBoolean();
            anchor.Locked         = element.zGet("Locked").zAsBoolean();
            anchor.RelativeHeight = element.zGet("RelativeHeight").zAsInt();

            BsonDocument element2 = element.zGet("SimplePosition").zAsBsonDocument();

            if (element2 != null)
            {
                anchor.SimplePosition = new OXmlPoint2DType {
                    X = element2.zGet("X").zAsLong(), Y = element.zGet("Y").zAsLong()
                }
            }
            ;

            switch (wrapType)
            {
            //case OXmlAnchorWrapType.WrapNone:
            case OXmlAnchorWrapType.WrapSquare:
                anchor.Wrap = CreateAnchorWrapSquare(element.zGet("WrapSquare").zAsBsonDocument());
                break;

            case OXmlAnchorWrapType.WrapTight:
                anchor.Wrap = CreateAnchorWrapTight(element.zGet("WrapTight").zAsBsonDocument());
                break;

            //case OXmlAnchorWrapType.WrapThrough:
            case OXmlAnchorWrapType.WrapTopAndBottom:
                anchor.Wrap = CreateAnchorWrapTopAndBottom(element.zGet("WrapTopAndBottom").zAsBsonDocument());
                break;

            default:
                throw new PBException($"wrap type \"{wrapType}\" not implemented");
            }

            return(anchor);
        }
コード例 #2
0
ファイル: OXmlAnchorDrawing.cs プロジェクト: 24/source_04
        public DW.Anchor Create()
        {
            int width;
            int height;

            zimg.CalculateImageWidthHeight(_pictureElement.File, _pictureElement.Width, _pictureElement.Height, out width, out height);
            long emuWidth  = OXmlTools.PixelToEmus(width);
            long emuHeight = OXmlTools.PixelToEmus(height);

            //DW.Anchor anchor = new DW.Anchor()
            //{
            //    DistanceFromTop = _distanceFromTop,
            //    DistanceFromBottom = _distanceFromBottom,
            //    DistanceFromLeft = _distanceFromLeft,
            //    DistanceFromRight = _distanceFromRight,
            //    RelativeHeight = _relativePosition,
            //    BehindDoc = _behindDoc,
            //    LayoutInCell = _layoutInCell,
            //    AllowOverlap = _allowOverlap,
            //    Locked = _locked,
            //    Hidden = _hidden
            //};

            DW.Anchor anchor = new DW.Anchor();

            OXmlAnchorPictureDrawing pictureDrawing = (OXmlAnchorPictureDrawing)_pictureElement.PictureDrawing;

            if (pictureDrawing.AnchorId != null)
            {
                anchor.AnchorId = pictureDrawing.AnchorId;
            }
            if (pictureDrawing.EditId != null)
            {
                anchor.EditId = pictureDrawing.EditId;
            }

            if (pictureDrawing.DistanceFromTop != null)
            {
                anchor.DistanceFromTop = (uint)pictureDrawing.DistanceFromTop;
            }
            if (pictureDrawing.DistanceFromBottom != null)
            {
                anchor.DistanceFromBottom = (uint)pictureDrawing.DistanceFromBottom;
            }
            if (pictureDrawing.DistanceFromLeft != null)
            {
                anchor.DistanceFromLeft = (uint)pictureDrawing.DistanceFromLeft;
            }
            if (pictureDrawing.DistanceFromRight != null)
            {
                anchor.DistanceFromRight = (uint)pictureDrawing.DistanceFromRight;
            }

            OXmlHorizontalPosition oxmlHorizontalPosition = pictureDrawing.HorizontalPosition;

            DW.HorizontalPosition horizontalPosition = new DW.HorizontalPosition();
            horizontalPosition.RelativeFrom = oxmlHorizontalPosition.RelativeFrom;
            if (oxmlHorizontalPosition.PositionOffset != null)
            {
                horizontalPosition.PositionOffset = new DW.PositionOffset(OXmlTools.PixelToEmus((int)oxmlHorizontalPosition.PositionOffset).ToString());
            }
            if (oxmlHorizontalPosition.HorizontalAlignment != null)
            {
                horizontalPosition.HorizontalAlignment = new DW.HorizontalAlignment(oxmlHorizontalPosition.HorizontalAlignment);
            }
            anchor.HorizontalPosition = horizontalPosition;

            OXmlVerticalPosition oxmlVerticalPosition = pictureDrawing.VerticalPosition;

            DW.VerticalPosition verticalPosition = new DW.VerticalPosition();
            verticalPosition.RelativeFrom = oxmlVerticalPosition.RelativeFrom;
            if (oxmlVerticalPosition.PositionOffset != null)
            {
                verticalPosition.PositionOffset = new DW.PositionOffset(OXmlTools.PixelToEmus((int)oxmlVerticalPosition.PositionOffset).ToString());
            }
            if (oxmlVerticalPosition.VerticalAlignment != null)
            {
                verticalPosition.VerticalAlignment = new DW.VerticalAlignment(oxmlVerticalPosition.VerticalAlignment);
            }
            anchor.VerticalPosition = verticalPosition;

            if (pictureDrawing.EffectExtent != null)
            {
                anchor.EffectExtent = pictureDrawing.EffectExtent.ToEffectExtent();
            }

            // mandatory
            anchor.AllowOverlap = pictureDrawing.AllowOverlap;
            // mandatory
            anchor.BehindDoc = pictureDrawing.BehindDoc;
            // not mandatory
            anchor.Hidden = pictureDrawing.Hidden;
            // mandatory
            anchor.LayoutInCell = pictureDrawing.LayoutInCell;
            // mandatory
            anchor.Locked = pictureDrawing.Locked;
            // mandatory
            anchor.RelativeHeight = (uint)pictureDrawing.RelativeHeight;

            // warning <wp:anchor simplePos> and <wp:simplePos x="0" y="0"/> are mandatory
            if (pictureDrawing.SimplePosition != null)
            {
                anchor.SimplePos = true;
                // Simple Positioning Coordinates, <wp:simplePos x="0" y="0"/>
                anchor.SimplePosition = new DW.SimplePosition {
                    X = pictureDrawing.SimplePosition.X, Y = pictureDrawing.SimplePosition.Y
                };
            }
            else
            {
                anchor.SimplePos      = false;
                anchor.SimplePosition = new DW.SimplePosition {
                    X = 0, Y = 0
                };
            }

            // Inline Drawing Object Extents
            //   Cx : Extent Length ???
            //   Cy : Extent Width ???
            // <wp:extent cx="3576638" cy="3570696"/>
            anchor.Extent = new DW.Extent()
            {
                Cx = emuWidth, Cy = emuHeight
            };


            //if (_horizontalPosition != null)
            //    // Horizontal Positioning
            //    // <wp:positionH relativeFrom="margin">
            //    //   <wp:posOffset>-38099</wp:posOffset>
            //    // </wp:positionH>
            //    anchor.HorizontalPosition = _horizontalPosition;

            //if (_verticalPosition != null)
            //    // Vertical Positioning
            //    // <wp:positionV relativeFrom="paragraph">
            //    //   <wp:posOffset>723900</wp:posOffset>
            //    // </wp:positionV>
            //    anchor.VerticalPosition = _verticalPosition;


            // Object Extents Including Effects
            //   BottomEdge : Additional Extent on Bottom Edge (b)
            //   LeftEdge   : Additional Extent on Left Edge (l)
            //   RightEdge  : Additional Extent on Right Edge (r)
            //   TopEdge    : Additional Extent on Top Edge (t)
            // <wp:effectExtent b="0" l="0" r="0" t="0"/>
            //if (_effectExtent == null)
            //    _effectExtent = new DW.EffectExtent();
            // <wp:effectExtent> is not mandatory
            //if (_effectExtent != null)
            //    anchor.EffectExtent = _effectExtent;

            //if (_wrapElement == null)
            //    SetWrapNone();
            //anchor.AppendChild(_wrapElement);
            anchor.AppendChild(CreateWrap(pictureDrawing.Wrap));

            // <wp:docPr> Non-Visual Properties, possible child : HyperlinkOnClick <a:hlinkClick> HyperlinkOnHover <a:hlinkHover> NonVisualDrawingPropertiesExtensionList <a:extLst>
            // <wp:docPr id="1" name="Picture1" title="" descr=""/>
            // Title = _title
            anchor.AppendChild(new DW.DocProperties()
            {
                Id = _id, Name = _name, Description = _pictureElement.Description
            });

            Graphic graphic = new Graphic(_embeddedReference, emuWidth, emuHeight);

            graphic.Rotation         = _pictureElement.Rotation;
            graphic.HorizontalFlip   = _pictureElement.HorizontalFlip;
            graphic.VerticalFlip     = _pictureElement.VerticalFlip;
            graphic.CompressionState = _pictureElement.CompressionState;
            graphic.PresetShape      = _pictureElement.PresetShape;
            anchor.AppendChild(graphic.Create());

            //if (_relativeHeight != null)
            //    // <wp14:sizeRelV> RelativeHeight (Office2010 or above),
            //    anchor.AppendChild(_relativeHeight);
            //if (_relativeWidth != null)
            //    // <wp14:sizeRelH> RelativeWidth (Office2010 or above), possible child : PercentageWidth <wp14:pctWidth>
            //    anchor.AppendChild(_relativeWidth);

            return(anchor);
        }
コード例 #3
0
ファイル: HtmlToOXmlElements_v2.cs プロジェクト: 24/source_04
        private IEnumerable <OXmlElement> GetImages(bool endOfDocument = false)
        {
            // 300 px ->  7.94 cm
            // 450 px -> 11.91 cm
            // largeur 18.5 cm = 694 px
            // largeur 16 cm   = 600 px
            // example :
            // leftalign width300 - nonealign width300
            // leftalign width300 - nonealign width300
            // example :
            // leftalign width300 - nonealign width300
            // nonealign width450
            // example :
            // nonealign width450
            // nonealign width450

            // ...
            // img       112509336.jpg   width300 leftalign
            // ...
            // img       112509351.jpg   width450 nonealign
            // img       112509354.jpg   width450 nonealign
            // ...
            // img       112509392.jpg   width300 leftalign
            // img       112509399.jpg   width300 nonealign
            // img       112509404.jpg   width450 nonealign
            // ...
            // img       112509359.jpg   width450 nonealign
            // ...
            // img       112509426.jpg   width300 leftalign
            // img       112509432.jpg   width300 nonealign
            // img       112509438.jpg   width300 leftalign
            // img       112509447.jpg   width300 nonealign
            // ...

            // ...
            // Paragraph
            // Picture   112509336.jpg   AnchorWrapSquare          Width 300
            // ...
            // Paragraph
            // Picture   112509351.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset   2
            // Picture   112509354.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset 305
            // ...
            // Paragraph Style: "TinyParagraph"
            // Picture   112509392.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset   2
            // Picture   112509399.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset 305
            // Paragraph
            // Picture   112509404.jpg   Inline                    Width 300
            // ...
            // Paragraph
            // Picture   112509359.jpg   Inline                    Width 300
            // ...
            // Paragraph Style: "TinyParagraph"
            // Picture   112509426.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset   2
            // Picture   112509432.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset 305
            // Paragraph
            // Picture   112509438.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset   2
            // Picture   112509447.jpg   AnchorWrapTopAndBottom    Width 300  HorizontalPositionOffset 305
            // ...

            while (_htmlImages.Count > 0)
            {
                // calculate nb of image horizontaly (_maxImageHorizontalSize)
                int       nb             = 1;
                HtmlImage htmlImage      = _htmlImages[0];
                bool      nextImageToBig = false;
                //bool leftAlign = true;
                //if (htmlImage.RightAlign)
                //    leftAlign = false;
                //if (!htmlImage.NoneAlign)
                //{
                int width = (int)htmlImage.Width;
                for (int i = 1; i < _htmlImages.Count; i++)
                {
                    HtmlImage htmlImage2 = _htmlImages[i];
                    if (htmlImage.RightAlign != htmlImage2.RightAlign)
                    {
                        break;
                    }
                    width += (int)htmlImage2.Width;
                    if (width > _maxImageHorizontalSize)
                    {
                        nextImageToBig = true;
                        break;
                    }
                    nb++;
                }
                //}

                if (_htmlImages.Count > nb)
                {
                    if (_trace)
                    {
                        pb.Trace.WriteLine($"GetImages()     : send paragraph              \"{_imageSeparationParagraphStyle}\"");
                    }
                    yield return(new OXmlParagraphElement {
                        Style = _imageSeparationParagraphStyle
                    });
                }
                else
                {
                    if (_trace)
                    {
                        pb.Trace.WriteLine("GetImages()     : send paragraph");
                    }
                    yield return(new OXmlParagraphElement());
                }

                if (nb == 1)
                {
                    OXmlPictureDrawing pictureDrawing;
                    if (htmlImage.NoneAlign || nextImageToBig || (endOfDocument && _htmlImages.Count == 1))
                    {
                        // Inline
                        if (_trace)
                        {
                            pb.Trace.WriteLine($"GetImages()     : send picture                inline \"{zPath.GetFileName(htmlImage.File)}\"");
                        }
                        //pictureDrawing = new OXmlInlinePictureDrawing();
                        pictureDrawing = new OXmlAnchorPictureDrawing
                        {
                            Wrap = new OXmlAnchorWrapTopAndBottom(),
                            HorizontalPosition = new OXmlHorizontalPosition {
                                RelativeFrom = DW.HorizontalRelativePositionValues.Margin, HorizontalAlignment = "center"
                            },
                            VerticalPosition = new OXmlVerticalPosition {
                                RelativeFrom = DW.VerticalRelativePositionValues.Line, VerticalAlignment = "top"
                            }
                        };
                    }
                    else
                    {
                        // AnchorWrapSquare
                        if (_trace)
                        {
                            pb.Trace.WriteLine($"GetImages()     : send picture                anchor wrap square \"{zPath.GetFileName(htmlImage.File)}\"");
                        }
                        pictureDrawing = new OXmlAnchorPictureDrawing
                        {
                            //Wrap = new OXmlAnchorWrapSquare { DistanceFromLeft = htmlImage.RightAlign ? _imageHorizontalBorder : 0, DistanceFromRight = htmlImage.RightAlign ? 0 : _imageHorizontalBorder },
                            Wrap               = new OXmlAnchorWrapSquare(),
                            DistanceFromLeft   = htmlImage.RightAlign ? _imageHorizontalBorder : null,
                            DistanceFromRight  = htmlImage.RightAlign ? null : _imageHorizontalBorder,
                            HorizontalPosition = new OXmlHorizontalPosition {
                                RelativeFrom = DW.HorizontalRelativePositionValues.Margin, HorizontalAlignment = htmlImage.RightAlign ? "right" : "left"
                            },
                            VerticalPosition = new OXmlVerticalPosition {
                                RelativeFrom = DW.VerticalRelativePositionValues.Line, VerticalAlignment = "top"
                            }
                        };
                    }
                    yield return(new OXmlPictureElement
                    {
                        File = htmlImage.File,
                        Width = htmlImage.Width,
                        Height = htmlImage.Height,
                        PictureDrawing = pictureDrawing
                    });

                    _htmlImages.RemoveAt(0);
                }
                else
                {
                    // AnchorWrapTopAndBottom
                    int position = _imageHorizontalLeftMarge;
                    while (nb > 0)
                    {
                        if (_trace)
                        {
                            pb.Trace.WriteLine($"GetImages()     : send picture                anchor wrap top and bottom \"{zPath.GetFileName(htmlImage.File)}\"");
                        }
                        htmlImage = _htmlImages[0];
                        yield return(new OXmlPictureElement
                        {
                            File = htmlImage.File,
                            Width = htmlImage.Width,
                            Height = htmlImage.Height,
                            PictureDrawing = new OXmlAnchorPictureDrawing
                            {
                                Wrap = new OXmlAnchorWrapTopAndBottom(),
                                HorizontalPosition = new OXmlHorizontalPosition {
                                    RelativeFrom = DW.HorizontalRelativePositionValues.Margin, PositionOffset = position
                                },
                                VerticalPosition = new OXmlVerticalPosition {
                                    RelativeFrom = DW.VerticalRelativePositionValues.Line, VerticalAlignment = "top"
                                }
                            }
                        });

                        position += (int)htmlImage.Width + _imageHorizontalMarge;
                        _htmlImages.RemoveAt(0);
                        nb--;
                    }
                }
            }


            //yield return new OXmlPictureElement
            //{
            //    File = htmlImage.File,
            //    Width = htmlImage.Width,
            //    Height = htmlImage.Height,
            //    PictureDrawing = new OXmlAnchorPictureDrawing
            //    {
            //        // SquareSize = 21800
            //        //Wrap = new OXmlAnchorWrapTight { WrapPolygon = OXmlDoc.CreateWrapPolygon(21800) },
            //        Wrap = new OXmlAnchorWrapTight { WrapPolygon = new OXmlSquare { HorizontalSize = 21800 } },
            //        HorizontalRelativeFrom = DW.HorizontalRelativePositionValues.Margin,
            //        HorizontalPositionOffset = horizontalPosition,
            //        VerticalRelativeFrom = DW.VerticalRelativePositionValues.Paragraph,
            //        VerticalPositionOffset = verticalPosition
            //    }
            //};
        }
コード例 #4
0
        public override void Serialize(BsonWriter bsonWriter, Type nominalType, object value, IBsonSerializationOptions options)
        {
            if (value == null)
            {
                throw new PBException("serialize OXmlPictureElement value is null");
            }
            if (_trace)
            {
                pb.Trace.WriteLine("OXmlPictureElementSerializer.Serialize()");
            }

            OXmlPictureElement element = (OXmlPictureElement)value;

            bsonWriter.WriteStartDocument();
            bsonWriter.WriteString("Type", "Picture");
            bsonWriter.WriteString("File", element.File);
            if (element.Name != null)
            {
                bsonWriter.WriteString("Name", element.Name);
            }
            if (element.Description != null)
            {
                bsonWriter.WriteString("Description", element.Description);
            }
            if (element.Width != null)
            {
                bsonWriter.WriteInt32("Width", (int)element.Width);
            }
            if (element.Height != null)
            {
                bsonWriter.WriteInt32("Height", (int)element.Height);
            }
            if (element.Rotation != 0)
            {
                bsonWriter.WriteInt32("Rotation", element.Rotation);
            }
            if (element.HorizontalFlip)
            {
                bsonWriter.WriteBoolean("HorizontalFlip", element.HorizontalFlip);
            }
            if (element.VerticalFlip)
            {
                bsonWriter.WriteBoolean("VerticalFlip", element.VerticalFlip);
            }
            if (element.CompressionState != A.BlipCompressionValues.Print)
            {
                bsonWriter.WriteString("CompressionState", element.CompressionState.ToString());
            }
            if (element.PresetShape != A.ShapeTypeValues.Rectangle)
            {
                bsonWriter.WriteString("PresetShape", element.PresetShape.ToString());
            }
            //bsonWriter.WriteString("DrawingMode", element.PictureDrawing.DrawingMode.ToString());
            bsonWriter.WriteString("DrawingType", element.PictureDrawing.GetDrawingType().ToString());
            if (element.PictureDrawing.DrawingMode == OXmlPictureDrawingMode.Anchor)
            {
                OXmlAnchorPictureDrawing anchor = (OXmlAnchorPictureDrawing)element.PictureDrawing;
                //bsonWriter.WriteString("WrapType", anchor.Wrap.WrapType.ToString());

                if (anchor.AnchorId != null)
                {
                    bsonWriter.WriteString("AnchorId", anchor.AnchorId);
                }
                if (anchor.EditId != null)
                {
                    bsonWriter.WriteString("EditId", anchor.AnchorId);
                }
                if (anchor.DistanceFromTop != null)
                {
                    bsonWriter.WriteInt32("DistanceFromTop", (int)anchor.DistanceFromTop);
                }
                if (anchor.DistanceFromBottom != null)
                {
                    bsonWriter.WriteInt32("DistanceFromBottom", (int)anchor.DistanceFromBottom);
                }
                if (anchor.DistanceFromLeft != null)
                {
                    bsonWriter.WriteInt32("DistanceFromLeft", (int)anchor.DistanceFromLeft);
                }
                if (anchor.DistanceFromRight != null)
                {
                    bsonWriter.WriteInt32("DistanceFromRight", (int)anchor.DistanceFromRight);
                }

                bsonWriter.WriteString("HorizontalRelativeFrom", anchor.HorizontalPosition.RelativeFrom.ToString());
                if (anchor.HorizontalPosition.PositionOffset != null)
                {
                    bsonWriter.WriteInt32("HorizontalPositionOffset", (int)anchor.HorizontalPosition.PositionOffset);
                }
                if (anchor.HorizontalPosition.HorizontalAlignment != null)
                {
                    bsonWriter.WriteString("HorizontalAlignment", anchor.HorizontalPosition.HorizontalAlignment);
                }
                bsonWriter.WriteString("VerticalRelativeFrom", anchor.VerticalPosition.RelativeFrom.ToString());
                if (anchor.VerticalPosition.PositionOffset != null)
                {
                    bsonWriter.WriteInt32("VerticalPositionOffset", (int)anchor.VerticalPosition.PositionOffset);
                }
                if (anchor.VerticalPosition.VerticalAlignment != null)
                {
                    bsonWriter.WriteString("VerticalAlignment", anchor.VerticalPosition.VerticalAlignment);
                }
                SerializeEffectExtent(bsonWriter, anchor.EffectExtent);
                if (anchor.AllowOverlap)
                {
                    bsonWriter.WriteBoolean("AllowOverlap", anchor.AllowOverlap);
                }
                if (anchor.BehindDoc)
                {
                    bsonWriter.WriteBoolean("BehindDoc", anchor.BehindDoc);
                }
                if (anchor.Hidden)
                {
                    bsonWriter.WriteBoolean("Hidden", anchor.Hidden);
                }
                if (anchor.LayoutInCell)
                {
                    bsonWriter.WriteBoolean("LayoutInCell", anchor.LayoutInCell);
                }
                if (anchor.Locked)
                {
                    bsonWriter.WriteBoolean("Locked", anchor.Locked);
                }
                if (anchor.RelativeHeight != 0)
                {
                    bsonWriter.WriteInt32("RelativeHeight", anchor.RelativeHeight);
                }
                if (anchor.SimplePosition != null)
                {
                    bsonWriter.WriteStartDocument("SimplePosition");
                    bsonWriter.WriteInt64("X", anchor.SimplePosition.X);
                    bsonWriter.WriteInt64("Y", anchor.SimplePosition.Y);
                    bsonWriter.WriteEndDocument();
                }
                switch (anchor.Wrap.WrapType)
                {
                case OXmlAnchorWrapType.WrapSquare:
                    SerializeWrapSquare(bsonWriter, (OXmlAnchorWrapSquare)anchor.Wrap);
                    break;

                case OXmlAnchorWrapType.WrapTight:
                    SerializeWrapTight(bsonWriter, (OXmlAnchorWrapTight)anchor.Wrap);
                    break;

                case OXmlAnchorWrapType.WrapTopAndBottom:
                    SerializeWrapTopBottom(bsonWriter, (OXmlAnchorWrapTopAndBottom)anchor.Wrap);
                    break;

                default:
                    throw new PBException($"WrapType {anchor.Wrap.WrapType} serialize not implemented");
                }
            }
            bsonWriter.WriteEndDocument();
        }