/// <summary> /// 输出图片类型的元素 /// </summary> /// <param name="element">文档元素对象</param> public void WriteImageElement(DomElement element) { DocumentContentStyle style = element.RuntimeStyle; Image img = element.CreateContentImage(); if (img != null) { HtmlAttachFile file = this.AddImage(img, null); WriteStartElement("img"); WriteStartStyle(); WriteDocumentContentStyle(element.RuntimeStyle, element); WriteEndStyle(); WriteAttributeString("src", file.ReferenceCode); WriteAttributeString( "width", GraphicsUnitConvert.ToCSSLength( element.Width, element.OwnerDocument.DocumentGraphicsUnit, CssLengthUnit.Pixels)); WriteAttributeString( "width", GraphicsUnitConvert.ToCSSLength( element.Height, element.OwnerDocument.DocumentGraphicsUnit, CssLengthUnit.Pixels)); if (element is DomImageElement) { string title = ((DomImageElement)element).Title; if (title != null && title.Length > 0) { WriteAttributeString("title", title); } } WriteEndElement(); } }
//public override void WriteStartDocument() //{ // base.WriteStartDocument(); // this.WriteStartElement("div"); //} //public override void WriteEndDocument() //{ // this.WriteEndElement(); // base.WriteEndDocument(); //} /// <summary> /// 输出文档样式 /// </summary> /// <param name="style">文档样式信息对象</param> /// <param name="element">相关的文档元素对象</param> public void WriteDocumentContentStyle(DocumentContentStyle style, DomElement element) { if (style == null) { throw new ArgumentNullException("style"); } GraphicsUnit documentUnit = GraphicsUnit.Document; if (this.MainDocument != null) { documentUnit = this.MainDocument.DocumentGraphicsUnit; } // 输出边框线 base.WriteBorderStyle( style.BorderLeft, style.BorderTop, style.BorderRight, style.BorderBottom, style.BorderColor, (int)style.BorderWidth, style.BorderStyle); // 输出字体 base.WriteFontStyle(style.Font.Value); // 输出内边距 base.WritePaddingStyle( ToPixel(style.PaddingLeft), ToPixel(style.PaddingTop), ToPixel(style.PaddingRight), ToPixel(style.PaddingBottom)); // 输出外边距 base.WriteMarginStyle( ToPixel(style.MarginLeft), ToPixel(style.MarginTop), ToPixel(style.MarginRight), ToPixel(style.MarginBottom)); if (element is DomParagraphFlagElement || element is DomParagraphElement) { // 文本水平对齐方式 switch (style.Align) { case DocumentContentAlignment.Left: base.WriteStyleItem("text-align", "left"); break; case DocumentContentAlignment.Center: base.WriteStyleItem("text-align", "center"); break; case DocumentContentAlignment.Right: base.WriteStyleItem("text-align", "right"); break; case DocumentContentAlignment.Justify: base.WriteStyleItem("text-align", "justify"); break; default: base.WriteStyleItem("text-align", "left"); break; } } if (XDependencyObject.HasPropertyValue(style, ContentStyle.PropertyName_BackgroundColor)) { // 输出背景色 WriteStyleItem("background-color", ColorToString(style.BackgroundColor)); } if (style.BackgroundImage != null && style.BackgroundImage.HasContent) { // 输出背景图片 HtmlAttachFile file = base.AddImage(style.BackgroundImage.Value, null); WriteStyleItem("background-image", "url(" + file.ReferenceCode + ")"); } if (XDependencyObject.HasPropertyValue(style, ContentStyle.PropertyName_BackgroundPosition)) { // 背景位置 string strItem = null; switch (style.BackgroundPosition) { case ContentAlignment.TopLeft: strItem = "top left"; break; case ContentAlignment.TopCenter: strItem = "top center"; break; case ContentAlignment.TopRight: strItem = "top right"; break; case ContentAlignment.MiddleLeft: strItem = "center left"; break; case ContentAlignment.MiddleCenter: strItem = "center center"; break; case ContentAlignment.MiddleRight: strItem = "center right"; break; case ContentAlignment.BottomLeft: strItem = "bottom left"; break; case ContentAlignment.BottomCenter: strItem = "bottom center"; break; case ContentAlignment.BottomRight: strItem = "bottom right"; break; } WriteStyleItem("background-position", strItem); } if (style.BackgroundPositionX != 0) { WriteStyleItem("background-position-x", GraphicsUnitConvert.ToCSSLength( ToPixel(style.BackgroundPositionX), documentUnit, CssLengthUnit.Pixels)); } if (style.BackgroundPositionY != 0) { WriteStyleItem("background-position-y", GraphicsUnitConvert.ToCSSLength( ToPixel(style.BackgroundPositionY), documentUnit, CssLengthUnit.Pixels)); } if (style.BackgroundRepeat) { WriteStyleItem("background-repeat", "repeat"); } if (XDependencyObject.HasPropertyValue(style, ContentStyle.PropertyName_Color)) { WriteStyleItem("color", ColorToString(style.Color)); } // 首行缩进 if (Math.Abs(style.FirstLineIndent) > 0.05) { WriteStyleItem("text-indent", GraphicsUnitConvert.ToCSSLength( style.FirstLineIndent, documentUnit, CssLengthUnit.Pixels)); } //case ContentStyle.PropertyName_LineSpacing: // { // // 行间距 // float ls = style.LineSpacing; // if (Math.Abs(ls) > 0.05) // { // } // } // break; // 后置强制分页 if (style.PageBreakAfter) { WriteStyleItem("page-break-after", "always"); } // 前置强制分页 if (style.PageBreakBefore) { WriteStyleItem("page-break-before", "always"); } // 从右到左排版 if (style.RightToLeft) { WriteStyleItem("direction", "rtl"); } // 字符间距 if (Math.Abs(style.Spacing) > 0.05) { WriteStyleItem("letter-spacing", GraphicsUnitConvert.ToCSSLength( style.Spacing, documentUnit, CssLengthUnit.Pixels)); } // 垂直显示文本 if (style.VertialText) { } // 可见性 if (style.Visible == false) { WriteStyleItem("visibility", "hidden"); } if (XDependencyObject.HasPropertyValue(style, ContentStyle.PropertyName_Zoom)) { // 缩放比率 WriteStyleItem("zoom", style.Zoom.ToString()); } }