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 @@ -100,5 +100,9 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
static protected bool IsGraphicsContainer (IExportColumn column) {
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 @@ -57,9 +57,9 @@ namespace ICSharpCode.Reporting.Pdf
public static void DrawRectangle (IExportColumn column, XGraphics graphics) {
FillRectangle(column.DisplayRectangle,column.FrameColor,graphics);
}
// public static void DrawRectangle (IExportColumn column, XGraphics graphics) {
// FillRectangle(column.DisplayRectangle,column.FrameColor,graphics);
// }
public static void FillRectangle(XRect rect,Color color,XGraphics graphics) {
@ -78,7 +78,7 @@ namespace ICSharpCode.Reporting.Pdf @@ -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);
pen.DashStyle = PdfHelper.DashStyle(exportRectangle);
@ -140,7 +140,7 @@ namespace ICSharpCode.Reporting.Pdf @@ -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,
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 @@ -37,13 +37,12 @@ namespace ICSharpCode.Reporting.Pdf
XTextFormatter textFormatter;
Point containerLocation;
public PdfVisitor(PdfDocument pdfDocument)
{
public PdfVisitor(PdfDocument pdfDocument){
this.pdfDocument = pdfDocument;
}
public override void Visit(ExportPage page)
{
public override void Visit(ExportPage page){
PdfPage = pdfDocument.AddPage();
xGraphics = XGraphics.FromPdfPage(PdfPage);
textFormatter = new XTextFormatter(xGraphics);
@ -52,7 +51,6 @@ namespace ICSharpCode.Reporting.Pdf @@ -52,7 +51,6 @@ namespace ICSharpCode.Reporting.Pdf
public override void Visit(ExportContainer exportContainer){
foreach (var element in exportContainer.ExportedItems) {
if (IsContainer(element)) {
var container = element as ExportContainer;
@ -67,8 +65,7 @@ namespace ICSharpCode.Reporting.Pdf @@ -67,8 +65,7 @@ namespace ICSharpCode.Reporting.Pdf
}
void RenderRow(IExportContainer container)
{
void RenderRow(IExportContainer container){
if (IsGraphicsContainer(container)) {
RenderGraphicsContainer(container);
} else {
@ -77,8 +74,7 @@ namespace ICSharpCode.Reporting.Pdf @@ -77,8 +74,7 @@ namespace ICSharpCode.Reporting.Pdf
}
void RenderGraphicsContainer(IExportColumn column)
{
void RenderGraphicsContainer(IExportColumn column){
var graphicsContainer = column as GraphicsContainer;
if (graphicsContainer != null) {
var rect = column as ExportRectangle;
@ -97,8 +93,9 @@ namespace ICSharpCode.Reporting.Pdf @@ -97,8 +93,9 @@ namespace ICSharpCode.Reporting.Pdf
void RenderDataRow (IExportContainer row) {
var r = new Rectangle(containerLocation,row.DisplayRectangle.Size);
PdfHelper.FillRectangle(r,row.BackColor,xGraphics);
foreach (IAcceptor element in row.ExportedItems) {
element.Accept(this);
foreach (var element in row.ExportedItems) {
var acceptor = element as IAcceptor;
acceptor.Accept(this);
}
}
@ -117,34 +114,72 @@ namespace ICSharpCode.Reporting.Pdf @@ -117,34 +114,72 @@ namespace ICSharpCode.Reporting.Pdf
}
public override void Visit(ExportLine exportLine)
{
var columnLocation = containerLocation;
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());
}
public override void Visit (ExportRectangle exportRectangle) {
var pen = PdfHelper.CreateDashedPen(exportRectangle);
xGraphics.DrawRectangle(pen,
PdfHelper.CreateBrush(exportRectangle.BackColor),
new XRect(containerLocation.ToXPoints(),
exportRectangle.Size.ToXSize()));
var savedLocation = containerLocation;
xGraphics.DrawRectangle(PdfHelper.CreatePen(exportRectangle),
PdfHelper.CreateBrush(exportRectangle.BackColor),
new XRect(containerLocation.ToXPoints(),
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){
var pen = PdfHelper.CreateDashedPen(exportCircle);
var savedLocation = containerLocation;
var pen = PdfHelper.CreatePen(exportCircle);
xGraphics.DrawEllipse(pen,
PdfHelper.CreateBrush(exportCircle.BackColor) ,
new XRect(containerLocation.ToXPoints(),
exportCircle.Size.ToXSize()));
PdfHelper.CreateBrush(exportCircle.BackColor) ,
new XRect(containerLocation.ToXPoints(),
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;}
}
}

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

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

Loading…
Cancel
Save