Toon posts:

[C#] RTF-Text naar Crystal Reports 10

Pagina: 1
Acties:
  • 116 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

Ik heb dus een applicatie gemaakt in C# die RTF-Text wegschrijft naar een database. Dus de gebruiker kan tekst ingeven (vet, schuin, met kleur, ...) en die dan wegschrijven. Als ik dan een "Cyrstal Report" aanmaak en kies ik de in de database opgeslane RTF-text, lukt dit zonder probleem .. Alles wordt juist weergegeven ... (Na natuurlijk de eigenschappen van de tekstveld aan te passen naar -> RTF text - weergave)

Als de gebruiker een Foto toevoegt in mijn programma, wordt de code ook weggeschreven naar de database, maar de code wordt niet getoond in mijn "Crystal Report". Er staan dan enkel Letters en Cijfers .. Als ik de code van RTF-Text kopieer naar "Notepad" en het opsla als "Test.rpt", wordt de foto wel getoond als ik "Test.rpt" open in word...

Moet er iets speciaals gebeuren vooraleer je RTF-pictures kunt tonen in de "Crystal Report" ???

RTF van een foto ziet er zo uit ...

code:
1
2
3
4
5
6
7
8
9
{\rtf1\ansi\ansicpg1252\deff0\deflang2067{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}{\f1\fswiss\fprq2\fcharset0 Calibri;}}
{\colortbl ;\red0\green112\blue192;}
\viewkind4\uc1\pard\f0\fs17 test tes test\par
\par
\pard\sa200\sl276\slmult1\b\f1\fs22 Dit\b0  is een \ul test\ulnone  om te \cf1 testen\cf0\par
\pard\f0\fs17{\pict\wmetafile8\picw9629\pich11216\picwgoal5459\pichgoal6359 
010009000003888803000000728803000000050000000b0200000000050000000c...
}\fs17\par
}

  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 01-12 11:21

Shezzie

Lekker hoor!

Als ik de code van RTF-Text kopieer naar "Notepad" en het opsla als "Test.rpt", wordt de foto wel getoond als ik "Test.rpt" open in word...
Zo zit het niet helemaal in elkaar. Ook al noem je het bestand test.xyz, Word interpreteert het bestand als een RTF-file om de simpele reden dat dit aangegeven wordt in de header van het bestand: "{\rtf1..."
Neem maar eens een plaatje, test.jpg, hernoem deze naar test.x en open hem in een Internet Explorer: je ziet plaatje :) In de jpg staat namelijk in de header "JFIF", wat aangeeft dat de data als afbeelding moet worden gelezen. 8)

Wat voor jou het makkelijkste is, is om de afbeeldingen als picture-veld op te slaan in je database(MS SQL Server?), en deze in Crystal 10 te tonen: gewoon veld op je report slepen en klaar.

Verwijderd

Topicstarter
Shezzie schreef op woensdag 23 mei 2007 @ 14:58:
[...]


Zo zit het niet helemaal in elkaar. Ook al noem je het bestand test.xyz, Word interpreteert het bestand als een RTF-file om de simpele reden dat dit aangegeven wordt in de header van het bestand: "{\rtf1..."
Neem maar eens een plaatje, test.jpg, hernoem deze naar test.x en open hem in een Internet Explorer: je ziet plaatje :) In de jpg staat namelijk in de header "JFIF", wat aangeeft dat de data als afbeelding moet worden gelezen. 8)

Wat voor jou het makkelijkste is, is om de afbeeldingen als picture-veld op te slaan in je database(MS SQL Server?), en deze in Crystal 10 te tonen: gewoon veld op je report slepen en klaar.
Hoi,

Thx voor je antwoord .. Maar de klant moet bij een bepaalde "Foto" Commentaar kunnen beschrijven en meerdere foto's toevoegen .. Dus dacht ik aan een RTF-document, omdat normaal gezien "Crystal Reports" dit ondersteund...

Ik heb heel de namiddag gezocht of het mogelijk was "{\pict\...}" te tonen in "Crystal reports" .. Maar Overal waar ik keek stond erbij dat dit wss niet ondersteund is door "Crystal Reports".. Maar ze praatten altijd over de 8 (niet de 10). Dus ik weet niet of dit nu aanpasbaar is ..

Dus het is echt nodig dat de klant à la word (zullen we maar zeggen), tekst kan typen en foto'tjes kan toevoegen.. Daarvoor is RTF in mijn inziens de beste oplossing .. Mits de foto's weer te geven vallen.. Tot nu toe is het enkel gelukt met bold, italic, underline, left, right ... Maar nog niet met foto'tjes ... Ik dacht ook eerst om de RTF om te zetten naar HTML, maar daar is het ook nog niet mogelijk om foto's om te zetten .. Dus ik zit nu echt vast ..

En met zo'n Pictureveld, hoe gaat dit dan te werk .. Want ik werk met een DATAGRID, met allerlei producten, dan klikten ze op detail en opende er een soort wordje (B,S,I,...). Daar kunnen ze alles intypen enzo.. Hoe kan ik dan gemakkelijk bijv. een Foto Koppelen via de datagrid dat ze kunnen selecteren via een "Bestand Openen" menu ofzo ???

Enig idee ???

Mvg,
Frederic

  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 01-12 11:21

Shezzie

Lekker hoor!

Wat hier werkt en me wel een optie lijkt is je rtf-gegevens naar een tijdelijk bestand wegschrijven, en deze oproepen in een report:

1) Sla je RTF data op als c:\report.rtf.
2) Maak je rpt.
3) Voeg toe Insert -> Ole Object -> Bestand gebruiken, kies c:\report.rtf.

Je rtf wordt nu als een picture op je report gepresenteerd 8)

Verwijderd

Topicstarter
Shezzie schreef op woensdag 23 mei 2007 @ 15:59:
Wat hier werkt en me wel een optie lijkt is je rtf-gegevens naar een tijdelijk bestand wegschrijven, en deze oproepen in een report:

1) Sla je RTF data op als c:\report.rtf.
2) Maak je rpt.
3) Voeg toe Insert -> Ole Object -> Bestand gebruiken, kies c:\report.rtf.

Je rtf wordt nu als een picture op je report gepresenteerd 8)
Hoi,

Dit is idd een leuk alternatief, maar het probleem is dat we zo'n 1500 descriptions kan hebben.. Waardoor ik denk dat dit veel plaats zal innemen als dat nog eens verhonderdvoudigd :) .. Of ?

Ben nu aan't zien voor zo'n "Image"-veld in mijn database .. Met openFileDialog dat ze een JPG kiezen ... Maar ik zit wat vast hoe dit allemaal te wer ga .. ik heb nog nooit foto-behandleing gedaan in C# ...

Grtz,
frederic

Thx voor antwoord

  • Shezzie
  • Registratie: Januari 2005
  • Laatst online: 01-12 11:21

Shezzie

Lekker hoor!

Het is toch veel te warm om te werken, dus hier nog wat hulp :) Waar ik een filestream pak om onze webshop aan te passen, heb jij misschien een memorystream nodig, maar het principe is hetzelfde:


C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    string szArtNr = null;

    // DB link leggen
    SqlConnection sqlcon = new SqlConnection("ConnectionString");
    sqlcon.Open();
    string sqlqry = "UPDATE items SET Picture = @pic, PictureFilename = @fname WHERE itemcode = @item";
    SqlCommand sqlcmd = new SqlCommand(sqlqry, sqlcon);
    // parameters creeren
    sqlcmd.Parameters.Add("@pic", System.Data.SqlDbType.Image);
    sqlcmd.Parameters.Add("@fname", System.Data.SqlDbType.VarChar);
    sqlcmd.Parameters["@fname"].Size = 128;
    sqlcmd.Parameters.Add("@item", System.Data.SqlDbType.VarChar);
    sqlcmd.Parameters["@item"].Size = 30;
    // plaatje binair pakken
    Image imPic = Image.FromFile(szFilename);
    FileStream fs = new FileStream(szFilename, FileMode.Open, FileAccess.Read, FileShare.Read);
    FileInfo fiPic = new FileInfo(szFilename);
    byte[] arPic = new byte[Convert.ToInt32(fiPic.Length)];
    int iBytesRead = fs.Read(arPic, 0, Convert.ToInt32(fiPic.Length));
    fs.Close();
    // parameters vullen
    sqlcmd.Parameters["@pic"].Value = arPic;
    sqlcmd.Parameters["@pic"].Size = iBytesRead;
    sqlcmd.Parameters["@fname"].Value = @"G:\Apple\WEBSHOP_JPEG\" + szFilename);
    sqlcmd.Parameters["@item"].Value = szArtNr;
    // run
    sqlcmd.Prepare();           
    sqlcmd.ExecuteNonQuery();

    sqlcon.Close();



Resultaat: plaatje wordt databaseveld.

Good luck!

Verwijderd

Topicstarter
Hoi,

Thx voor je uitleg :) Ik heb het met een Memorystream moeten doen .. Maar nu wil ik het plaatje eruithalen zodat ze een preview van zien ...
Ze kunnen dus meerdere foto's toevoegen .. Deze namen worden dan getoond in een Listbox .. Hier heb je mijn code .. Maar ik krijg de error "The multi-part identifier "test.JPG" could not be bound"

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
            if (listBox1.SelectedIndex < 0)
            {
                MessageBox.Show("Please select a picture from the ListBox");
            }
            else
            {
                MessageBox.Show(listBox1.SelectedItem.ToString());
                string cmd = "select PICTURE from PICTURES where NAME=" + listBox1.SelectedItem.ToString() + " ORDER BY PICTURE;";
                SqlConnection cc = new SqlConnection(_connectionString);
                SqlCommand com = new SqlCommand(cmd, cc);


                try
                {
                    cc.Open();
                    byte[] b = (byte[])com.ExecuteScalar();//ds.Tables[0].Rows[listBox1.SelectedIndex]["Picture"];
                    MemoryStream mem = new MemoryStream(b);
                    pictureBox1.Image = Image.FromStream(mem);
                }
                catch (Exception ee)
                {
                    MessageBox.Show(ee.Message);
                }
                finally
                {
                    cc.Close();
                }
            }



Doe ik hier iets verkeerd ?? Hij is weldegelijk opgeslaan in database, als ik ernaar kijk staat er ---> <Binary Data>
Pagina: 1