2015-06-12 19 views
6

Używam PDFsharp do eksportowania legendy wykresu. Używam pętli for i tabeli do wyświetlania właściwości. W rzeczywistości jest tylko jedna właściwość: nazwa Subdivision. Obiekt ma odpowiedni kolor RGB do użycia. Jak mogę narysować kwadraty obok niej, tak jak legendy wykresów wyświetlają serię? Wybacz mi dla nazw zmiennych, odejdę od przykładu.Jak rysować kwadraty i dynamicznie przypisywać właściwość koloru (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); 

} 

Oto wynik:

pdf

to co muszę to wyglądać pic

+0

W tym tygodniu straciłem liczbę pytań podobnych do kafelków. pojawia się smród zgłoszeń do uczelni/uczelni ... Szkoda, że ​​nie oddajesz tego zadania dobrze, sam, który wie, że możesz być w tym dobry. –

+0

Próbowałem i nie wiem jak dynamicznie zmieniać kolor obiektu. Nie ustanowiłbym nagrody, chyba że naprawdę potrzebowałabym pomocy – texas697

Odpowiedz

6

użyłem tej struktury dla Demo:

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

Oto moje dane testowe:

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"} 
       }; 

A oto kod, który jest rysunek:

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 i B są składowych koloru (zakres od 0 do 255).

+0

Użyj 'gfx.DrawRectangle (brush, snoColumnVal);' zamiast 'gfx.DrawRectangle (XPens.Black, brush, snoColumnVal) ;, jeśli nie chcesz mieć czarnej ramki wokół prostokąta koloru. –

+0

'gfx' jest obiektem XGraphics, który był również używany w konstruktorze XTextFormatter. –

+0

, więc musiałbym parsować rgb (67.142.215) do R = wartość, G = wartość, B = wartość – texas697

2

Wystarczy narysować kwadrat tak:

// 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); 

Oto jak można ustawić kolor:

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

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

+0

, więc umieściłbym kod koloru wewnątrz pętli? item.color miałaby zastąpić (0,255,0) Zakładam, że e.Graphics będzie XGraph.Graphics, jeśli mam XGraphics xGrap = XGraphics.FromPdfPage (pdfpage); Jeśli tak, to xGraph nie zbiera grafiki w intellesense – texas697

+0

Ta odpowiedź pokazuje, jak rysować prostokąty na ekranie za pomocą C# i GDI +. Klasy używane przez PDFsharp są podobne, ale nieco inne (zobacz moją odpowiedź). –