Browse Source

Pdf from Rectangle and Circle as Container

pull/637/merge
Peter Forstmeier 10 years ago
parent
commit
b385ea69de
  1. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/AbstractVisitor.cs
  2. 10
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfHelper.cs
  3. 81
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Pdf/PdfVisitor.cs
  4. 18
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs

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

@ -100,5 +100,9 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
static protected bool IsGraphicsContainer (IExportColumn column) { static protected bool IsGraphicsContainer (IExportColumn column) {
return column is GraphicsContainer; return column is GraphicsContainer;
} }
static protected IAcceptor AsAcceptor (IExportColumn element) {
return element as IAcceptor;
}
} }
} }

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

@ -57,9 +57,9 @@ namespace ICSharpCode.Reporting.Pdf
public static void DrawRectangle (IExportColumn column, XGraphics graphics) { // public static void DrawRectangle (IExportColumn column, XGraphics graphics) {
FillRectangle(column.DisplayRectangle,column.FrameColor,graphics); // FillRectangle(column.DisplayRectangle,column.FrameColor,graphics);
} // }
public static void FillRectangle(XRect rect,Color color,XGraphics graphics) { public static void FillRectangle(XRect rect,Color color,XGraphics graphics) {
@ -78,7 +78,7 @@ namespace ICSharpCode.Reporting.Pdf
} }
public static XPen CreateDashedPen(IExportGraphics exportRectangle) public static XPen CreatePen(IExportGraphics exportRectangle)
{ {
var pen = PdfHelper.PdfPen(exportRectangle); var pen = PdfHelper.PdfPen(exportRectangle);
pen.DashStyle = PdfHelper.DashStyle(exportRectangle); pen.DashStyle = PdfHelper.DashStyle(exportRectangle);
@ -140,7 +140,7 @@ namespace ICSharpCode.Reporting.Pdf
} }
public static Point LocationRelToParent (ExportColumn column) { public static Point LocationRelToParent (IExportColumn column) {
return new Point(column.Parent.Location.X + column.Location.X, return new Point(column.Parent.Location.X + column.Location.X,
column.Parent.Location.Y + column.Location.Y); column.Parent.Location.Y + column.Location.Y);
} }

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

@ -37,13 +37,12 @@ namespace ICSharpCode.Reporting.Pdf
XTextFormatter textFormatter; XTextFormatter textFormatter;
Point containerLocation; Point containerLocation;
public PdfVisitor(PdfDocument pdfDocument) public PdfVisitor(PdfDocument pdfDocument){
{
this.pdfDocument = pdfDocument; this.pdfDocument = pdfDocument;
} }
public override void Visit(ExportPage page)
{ public override void Visit(ExportPage page){
PdfPage = pdfDocument.AddPage(); PdfPage = pdfDocument.AddPage();
xGraphics = XGraphics.FromPdfPage(PdfPage); xGraphics = XGraphics.FromPdfPage(PdfPage);
textFormatter = new XTextFormatter(xGraphics); textFormatter = new XTextFormatter(xGraphics);
@ -52,7 +51,6 @@ 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)) { if (IsContainer(element)) {
var container = element as ExportContainer; var container = element as ExportContainer;
@ -67,8 +65,7 @@ namespace ICSharpCode.Reporting.Pdf
} }
void RenderRow(IExportContainer container) void RenderRow(IExportContainer container){
{
if (IsGraphicsContainer(container)) { if (IsGraphicsContainer(container)) {
RenderGraphicsContainer(container); RenderGraphicsContainer(container);
} else { } else {
@ -77,8 +74,7 @@ namespace ICSharpCode.Reporting.Pdf
} }
void RenderGraphicsContainer(IExportColumn column) void RenderGraphicsContainer(IExportColumn column){
{
var graphicsContainer = column as GraphicsContainer; var graphicsContainer = column as GraphicsContainer;
if (graphicsContainer != null) { if (graphicsContainer != null) {
var rect = column as ExportRectangle; var rect = column as ExportRectangle;
@ -97,8 +93,9 @@ namespace ICSharpCode.Reporting.Pdf
void RenderDataRow (IExportContainer row) { void RenderDataRow (IExportContainer row) {
var r = new Rectangle(containerLocation,row.DisplayRectangle.Size); var r = new Rectangle(containerLocation,row.DisplayRectangle.Size);
PdfHelper.FillRectangle(r,row.BackColor,xGraphics); PdfHelper.FillRectangle(r,row.BackColor,xGraphics);
foreach (IAcceptor element in row.ExportedItems) { foreach (var element in row.ExportedItems) {
element.Accept(this); var acceptor = element as IAcceptor;
acceptor.Accept(this);
} }
} }
@ -117,34 +114,72 @@ namespace ICSharpCode.Reporting.Pdf
} }
public override void Visit(ExportLine exportLine) public override void Visit(ExportLine exportLine)
{ {
var columnLocation = containerLocation; var columnLocation = containerLocation;
columnLocation.Offset(exportLine.Location); columnLocation.Offset(exportLine.Location);
var pen = PdfHelper.CreateDashedPen(exportLine); var pen = PdfHelper.CreatePen(exportLine);
xGraphics.DrawLine(pen,columnLocation.ToXPoints(),new Point(exportLine.Size.Width,columnLocation.Y).ToXPoints()); xGraphics.DrawLine(pen,columnLocation.ToXPoints(),new Point(exportLine.Size.Width,columnLocation.Y).ToXPoints());
} }
public override void Visit (ExportRectangle exportRectangle) { public override void Visit (ExportRectangle exportRectangle) {
var pen = PdfHelper.CreateDashedPen(exportRectangle); var savedLocation = containerLocation;
xGraphics.DrawRectangle(pen, xGraphics.DrawRectangle(PdfHelper.CreatePen(exportRectangle),
PdfHelper.CreateBrush(exportRectangle.BackColor), PdfHelper.CreateBrush(exportRectangle.BackColor),
new XRect(containerLocation.ToXPoints(), new XRect(containerLocation.ToXPoints(),
exportRectangle.Size.ToXSize())); exportRectangle.Size.ToXSize()));
if (exportRectangle.ExportedItems.Count > 0) {
/*
foreach (var element in exportRectangle.ExportedItems) {
if (IsGraphicsContainer(element)) {
var loc = new Point(containerLocation.X + element.Location.X,
containerLocation.Y + element.Location.Y);
containerLocation =loc;
RenderGraphicsContainer(element);
containerLocation = savedLocation;
} else {
var acceptor = AsAcceptor(element);
acceptor.Accept(this);
}
}
*/
RenderContainerInternal(exportRectangle,savedLocation);
}
} }
public override void Visit(ExportCircle exportCircle){ public override void Visit(ExportCircle exportCircle){
var pen = PdfHelper.CreateDashedPen(exportCircle); var savedLocation = containerLocation;
var pen = PdfHelper.CreatePen(exportCircle);
xGraphics.DrawEllipse(pen, xGraphics.DrawEllipse(pen,
PdfHelper.CreateBrush(exportCircle.BackColor) , PdfHelper.CreateBrush(exportCircle.BackColor) ,
new XRect(containerLocation.ToXPoints(), new XRect(containerLocation.ToXPoints(),
exportCircle.Size.ToXSize())); exportCircle.Size.ToXSize()));
if (exportCircle.ExportedItems.Count > 0) {
RenderContainerInternal (exportCircle,savedLocation);
}
} }
void RenderContainerInternal(IExportContainer graphicsContainer,Point savedLocation)
{
foreach (var element in graphicsContainer.ExportedItems) {
if (IsGraphicsContainer(element)) {
var loc = new Point(containerLocation.X + element.Location.X,
containerLocation.Y + element.Location.Y);
containerLocation = loc;
RenderGraphicsContainer(element);
containerLocation = savedLocation;
} else {
var acceptor = AsAcceptor(element);
acceptor.Accept(this);
}
}
}
public PdfPage PdfPage {get; private set;} public PdfPage PdfPage {get; private set;}
} }
} }

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

@ -48,8 +48,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
fixedPage = FixedDocumentCreator.CreateFixedPage(page); fixedPage = FixedDocumentCreator.CreateFixedPage(page);
FixedPage = fixedPage; FixedPage = fixedPage;
foreach (var element in page.ExportedItems) { foreach (var element in page.ExportedItems) {
var acceptor = element as IAcceptor; AsAcceptor(element).Accept(this);
acceptor.Accept(this);
fixedPage.Children.Add(sectionCanvas); fixedPage.Children.Add(sectionCanvas);
} }
} }
@ -68,8 +67,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
if (IsContainer(element)) { if (IsContainer(element)) {
RenderRow(canvas, (IExportContainer)element); RenderRow(canvas, (IExportContainer)element);
} else { } else {
var acceptor = element as IAcceptor; AsAcceptor(element).Accept(this);
acceptor.Accept(this);
canvas.Children.Add(UIElement); canvas.Children.Add(UIElement);
} }
} }
@ -78,8 +76,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
} }
void RenderRow(Canvas canvas, IExportContainer container) void RenderRow(Canvas canvas, IExportContainer container){
{
if (IsGraphicsContainer(container)) { if (IsGraphicsContainer(container)) {
canvas.Children.Add(RenderGraphicsContainer(container)); canvas.Children.Add(RenderGraphicsContainer(container));
} else { } else {
@ -154,7 +151,6 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
var visual = new DrawingVisual(); var visual = new DrawingVisual();
using (var dc = visual.RenderOpen()){ using (var dc = visual.RenderOpen()){
var iss = ToBitmapSource(exportImage.Image); var iss = ToBitmapSource(exportImage.Image);
dc.DrawImage(iss,new Rect(exportImage.Location.ToWpf(), dc.DrawImage(iss,new Rect(exportImage.Location.ToWpf(),
new Size(exportImage.DesiredSize.Width,exportImage.DesiredSize.Height))); new Size(exportImage.DesiredSize.Width,exportImage.DesiredSize.Height)));
} }
@ -170,7 +166,6 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
stream.Position = 0; stream.Position = 0;
BitmapImage result = new BitmapImage(); BitmapImage result = new BitmapImage();
result.BeginInit(); result.BeginInit();
result.CacheOption = BitmapCacheOption.OnLoad; result.CacheOption = BitmapCacheOption.OnLoad;
result.StreamSource = stream; result.StreamSource = stream;
result.EndInit(); result.EndInit();
@ -193,8 +188,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
elementCanvas = RenderGraphicsContainer(element); elementCanvas = RenderGraphicsContainer(element);
containerCanvas.Children.Add(elementCanvas); containerCanvas.Children.Add(elementCanvas);
} else { } else {
var acceptor = element as IAcceptor; AsAcceptor(element).Accept(this);
acceptor.Accept(this);
containerCanvas.Children.Add(UIElement); containerCanvas.Children.Add(UIElement);
} }
containerCanvas.UpdateLayout(); containerCanvas.UpdateLayout();
@ -204,6 +198,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
UIElement = border; UIElement = border;
} }
public override void Visit(ExportLine exportLine){ public override void Visit(ExportLine exportLine){
var pen = FixedDocumentCreator.CreateWpfPen(exportLine); var pen = FixedDocumentCreator.CreateWpfPen(exportLine);
@ -230,8 +225,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
Canvas CreateItemsInContainer (List<IExportColumn> items) { Canvas CreateItemsInContainer (List<IExportColumn> items) {
var canvas = new Canvas(); var canvas = new Canvas();
foreach (var element in items) { foreach (var element in items) {
var acceptor = element as IAcceptor; AsAcceptor(element).Accept(this);
acceptor.Accept(this);
canvas.Children.Add(UIElement); canvas.Children.Add(UIElement);
} }
return canvas; return canvas;

Loading…
Cancel
Save