2015-06-12 9 views
6

Sto utilizzando PDFsharp per esportare una legenda del grafico. Sto usando un ciclo for e una tabella per visualizzare le proprietà. In realtà c'è solo una proprietà: il nome di Sottodivisione. L'oggetto ha il giusto colore RGB da usare. Come posso disegnare i quadrati accanto ad esso, proprio come le legende del grafico mostrano la serie? Perdonami per i nomi delle variabili, sto facendo un esempio.Come disegnare i quadrati e assegnare la proprietà del colore in modo dinamico (PDFsharp)?

//Writting Table Header Text 
textformater.DrawString(" Color", tableheader, XBrushes.Black, snoColumn); 
textformater.DrawString(" Subdivision Name", tableheader, XBrushes.Black, snoStudentName); 

foreach (var item in data) 
{ 
    y = y + 30; 
    XRect snoColumnVal = new XRect(35, y, 70, height); 
    XRect snoStudentNameVal = new XRect(100, y, 250, height); 
    textformater.DrawString(item.Color, tableheader, XBrushes.Black, snoColumnVal); 
    textformater.DrawString(item.Name, tableheader, XBrushes.Black, snoStudentNameVal); 

} 

Ecco l'output:

pdf

questo è quello che ho bisogno di guardare come pic

+0

Ho perso il conto del numero di domande simili a Tile questa settimana. c'è un fetore di proposte di progetti uni/college ... È un peccato che tu non ti conceda un buon lavoro, chi sa che potresti essere bravo a farlo. –

+0

ho provato, e non so come cambiare dinamicamente il colore dell'oggetto. Non avrei impostato una taglia a meno che non avessi davvero bisogno di aiuto – texas697

risposta

6

Ho usato questa struct per la demo:

struct RowItem 
{ 
    public int R, G, B; 
    public string Text; 
} 

Ecco la mia dati di test:

var data = new[] 
       { 
        new RowItem{R = 255, G = 0, B = 0, Text = "Red row"}, 
        new RowItem{R = 0, G = 255, B = 0, Text = "Green row"}, 
        new RowItem{R = 255, G = 255, B = 0, Text = "Yellow row"}, 
        new RowItem{R = 0, G = 0, B = 255, Text = "Blue row"}, 
        new RowItem{R = 255, G = 0, B = 255, Text = "Purple row"}, 
        new RowItem{R = 0, G = 255, B = 255, Text = "Cyan row"}, 
        new RowItem{R = 0, G = 0, B = 0, Text = "Black row"} 
       }; 

Ed ecco il codice che fa il disegno:

foreach (var item in data) 
{ 
    y = y + 30; 
    XRect snoColumnVal = new XRect(35, y, 60, 25); 
    XRect snoStudentNameVal = new XRect(100, y, 250, 25); 
    var brush = new XSolidBrush(XColor.FromArgb(255, item.R, item.G, item.B)); 
    gfx.DrawRectangle(XPens.Black, brush, snoColumnVal); 
    textformater.DrawString(item.Text, font, XBrushes.Black, snoStudentNameVal); 
} 

R, G e B sono i componenti di colore (range da 0 a 255).

+0

Usa 'gfx.DrawRectangle (brush, snoColumnVal);' invece di 'gfx.DrawRectangle (XPens.Black, brush, snoColumnVal);' se non vuoi avere una cornice nera attorno al rettangolo di colore. –

+0

'gfx' è l'oggetto XGraphics che è stato utilizzato anche nel costruttore di XTextFormatter. –

+0

quindi avrei bisogno di analizzare rgb (67,134,215) in R = valore, G = valore, B = valore – texas697

2

solo disegnare il quadrato in questo modo:

// Create solid brush. 
SolidBrush blueBrush = new SolidBrush(Color.Blue); 

// Create rectangle. 
Rectangle rect = new Rectangle(0, 0, 200, 200); 

// Fill rectangle to screen. 
e.Graphics.FillRectangle(blueBrush, rect); 

Ecco come si imposta il colore:

// Create a green color using the FromRgb static method. 
Color myRgbColor = new Color(); 
myRgbColor = Color.FromRgb(0, 255, 0); 
return myRgbColor; 

Rif: https://msdn.microsoft.com/en-us/library/19sb1bw6(v=vs.110).aspx

+0

quindi avrei inserito il codice colore all'interno del loop? item.color sostituisce (0,255,0) presumo che e.Graphics sarebbe xGraph.Graphics se ho XGraphics xGrap = XGraphics.FromPdfPage (pdfpage); Se è così allora xGraph non sta raccogliendo Graphics in intellesense – texas697

+0

Questa risposta mostra come disegnare rettangoli sullo schermo usando C# e GDI +. Le classi utilizzate da PDFsharp sono simili, ma leggermente diverse (vedi la mia risposta). –

Problemi correlati