Browse Source

GraphicsContainer in PdfVisitor

pull/490/head
Peter Forstmeier 11 years ago
parent
commit
742b6e8bdd
  1. 9
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/AbstractVisitor.cs
  2. 10
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfHelper.cs
  3. 86
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfVisitor.cs
  4. 11
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs

9
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/AbstractVisitor.cs

@ -20,6 +20,7 @@ using System;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Drawing; using System.Drawing;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
namespace ICSharpCode.Reporting.Exporter.Visitors namespace ICSharpCode.Reporting.Exporter.Visitors
@ -84,5 +85,13 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
protected Collection<ExportPage> Pages {get; private set;} protected Collection<ExportPage> Pages {get; private set;}
protected bool IsContainer (IExportColumn column) {
return (column is ExportContainer)|| (column is GraphicsContainer);
}
protected bool IsGraphicsContainer (IExportColumn column) {
return column is GraphicsContainer;
}
} }
} }

10
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfHelper.cs

@ -21,7 +21,6 @@ using System.Drawing;
using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using PdfSharp.Drawing; using PdfSharp.Drawing;
using System.Drawing.Drawing2D;
using PdfSharp.Drawing.Layout; using PdfSharp.Drawing.Layout;
namespace ICSharpCode.Reporting.Pdf namespace ICSharpCode.Reporting.Pdf
@ -34,11 +33,11 @@ namespace ICSharpCode.Reporting.Pdf
public static void WriteText(XTextFormatter textFormatter,Point columnLocation, ExportText exportColumn) public static void WriteText(XTextFormatter textFormatter,Point columnLocation, ExportText exportColumn)
{ {
XFont font = PdfHelper.CreatePdfFont(exportColumn); var font = PdfHelper.CreatePdfFont(exportColumn);
var rect = new Rectangle(columnLocation,exportColumn.DesiredSize).ToXRect(); var rect = new Rectangle(columnLocation,exportColumn.DesiredSize).ToXRect();
textFormatter.DrawString(exportColumn.Text, textFormatter.DrawString(exportColumn.Text,
font, font,
new XSolidBrush(ToXColor(exportColumn.ForeColor)), CreateBrush(exportColumn.ForeColor),
rect, XStringFormats.TopLeft); rect, XStringFormats.TopLeft);
} }
@ -76,6 +75,11 @@ namespace ICSharpCode.Reporting.Pdf
} }
public static XSolidBrush CreateBrush(Color color) {
return new XSolidBrush(color);
}
public static XLineCap LineCap (IExportGraphics column) { public static XLineCap LineCap (IExportGraphics column) {
return XLineCap.Round; return XLineCap.Round;

86
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfVisitor.cs

@ -16,8 +16,10 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
using System;
using System.Drawing; using System.Drawing;
using ICSharpCode.Reporting.Exporter.Visitors; using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using PdfSharp.Drawing; using PdfSharp.Drawing;
using PdfSharp.Drawing.Layout; using PdfSharp.Drawing.Layout;
@ -49,27 +51,59 @@ namespace ICSharpCode.Reporting.Pdf
} }
public override void Visit(ExportContainer exportContainer) public override void Visit(ExportContainer exportContainer){
{
foreach (var element in exportContainer.ExportedItems) { foreach (var element in exportContainer.ExportedItems) {
if (IsContainer(element)) {
var container = element as ExportContainer; var container = element as ExportContainer;
if (container != null) {
containerLocation = PdfHelper.LocationRelToParent(container); containerLocation = PdfHelper.LocationRelToParent(container);
var r = new Rectangle(containerLocation,container.DisplayRectangle.Size); RenderRow(container);
PdfHelper.FillRectangle(r,container.BackColor,gfx); } else {
Visit(container);
}
containerLocation = PdfHelper.LocationRelToParent(exportContainer); containerLocation = PdfHelper.LocationRelToParent(exportContainer);
var ac = element as IAcceptor; var acceptor = element as IAcceptor;
ac.Accept(this); acceptor.Accept(this);
}
} }
} }
public override void Visit(ExportText exportText) void RenderRow(IExportContainer container)
{ {
var columnLocation = containerLocation; if (IsGraphicsContainer(container)) {
columnLocation.Offset(exportText.Location); RenderGraphicsContainer(container);
} else {
RenderDataRow(container);
}
}
void RenderGraphicsContainer(IExportColumn column)
{
var graphicsContainer = column as GraphicsContainer;
if (graphicsContainer != null) {
var rect = column as ExportRectangle;
if (rect != null) {
Visit(rect);
}
var circle = column as ExportCircle;
if (circle != null) {
Visit(circle);
}
}
}
void RenderDataRow (IExportContainer row) {
System.Console.WriteLine("renderDataRow at {0} - {1}",containerLocation,row.Location);
foreach (IAcceptor element in row.ExportedItems) {
element.Accept(this);
}
}
public override void Visit(ExportText exportText){
var columnLocation = new Point(containerLocation.X + exportText.Location.X,containerLocation.Y + exportText.Location.Y);
if (ShouldSetBackcolor(exportText)) { if (ShouldSetBackcolor(exportText)) {
var r = new Rectangle(columnLocation,exportText.DisplayRectangle.Size); var r = new Rectangle(columnLocation,exportText.DisplayRectangle.Size);
PdfHelper.FillRectangle(r,exportText.BackColor,gfx); PdfHelper.FillRectangle(r,exportText.BackColor,gfx);
@ -92,25 +126,33 @@ namespace ICSharpCode.Reporting.Pdf
public override void Visit (ExportRectangle exportRectangle) { public override void Visit (ExportRectangle exportRectangle) {
var columnLocation = containerLocation; // var columnLocation = containerLocation;
columnLocation.Offset(exportRectangle.Location); var pen = CreateDashedPen(exportRectangle);
var pen = PdfHelper.PdfPen(exportRectangle); gfx.DrawRectangle(pen,
pen.DashStyle = PdfHelper.DashStyle(exportRectangle); PdfHelper.CreateBrush(exportRectangle.BackColor),
gfx.DrawRectangle(pen,new XRect(columnLocation.ToXPoints(), new XRect(containerLocation.ToXPoints(),
exportRectangle.Size.ToXSize())); exportRectangle.Size.ToXSize()));
} }
public override void Visit(ExportCircle exportCircle){ public override void Visit(ExportCircle exportCircle){
var columnLocation = containerLocation; // var columnLocation = containerLocation;
columnLocation.Offset(exportCircle.Location); var pen = CreateDashedPen(exportCircle);
var pen = PdfHelper.PdfPen(exportCircle); gfx.DrawEllipse(pen,
pen.DashStyle = PdfHelper.DashStyle(exportCircle); PdfHelper.CreateBrush(exportCircle.BackColor) ,
gfx.DrawEllipse(pen,new XRect(columnLocation.ToXPoints(), new XRect(containerLocation.ToXPoints(),
exportCircle.Size.ToXSize())); exportCircle.Size.ToXSize()));
} }
static XPen CreateDashedPen(IExportGraphics exportRectangle)
{
var pen = PdfHelper.PdfPen(exportRectangle);
pen.DashStyle = PdfHelper.DashStyle(exportRectangle);
return pen;
}
public PdfPage PdfPage {get; private set;} public PdfPage PdfPage {get; private set;}
} }
} }

11
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs

@ -75,6 +75,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
return canvas; return canvas;
} }
void RenderRow(Canvas canvas, IExportContainer container) void RenderRow(Canvas canvas, IExportContainer container)
{ {
if (IsGraphicsContainer(container)) { if (IsGraphicsContainer(container)) {
@ -180,16 +181,6 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
} }
bool IsGraphicsContainer (IExportColumn column) {
return column is GraphicsContainer;
}
bool IsContainer (IExportColumn column) {
return (column is ExportContainer)|| (column is GraphicsContainer);
}
DrawingElement CircleVisual(GraphicsContainer circle){ DrawingElement CircleVisual(GraphicsContainer circle){
var pen = FixedDocumentCreator.CreateWpfPen(circle); var pen = FixedDocumentCreator.CreateWpfPen(circle);
var rad = CalcRadius(circle.Size); var rad = CalcRadius(circle.Size);

Loading…
Cancel
Save