Diskuze: Načítání dat z XML a zápis do bitmapy

C# .NET .NET (C# a Visual Basic) Načítání dat z XML a zápis do bitmapy American English version English version

Avatar
Majkel
Člen
Avatar
Majkel:

Ahoj, mám uložený .xaml soubor, který generuje RichTextBox. A nyní řeším zakreslení jeho obsahu s příslušnou velikostí písma do .jpg.

obsah xml je např. takovýto:

<Section>
<Paragraph>
<Run xml:lang="cs-cz" FontSize="20">1r První řádek,</Run>
<Run xml:lang="cs-cz" FontSize="18"> pokračování prvního řádku</Run>
</Paragraph>
<Paragraph>
<Run xml:lang="cs-cz" FontSize="16">2r Druhý řádek</Run>
</Paragraph>
<Paragraph>
<Run xml:lang="cs-cz" FontSize="14">3r Třetí řádek,</Run>
<Run xml:lang="cs-cz" FontSize="12"> pokračování třetího řádku</Run>
</Paragraph>
</Section>

Vše mezi <Paragraph></Pa­ragraph>, patří do jednoho řádku. Každý <Paragraph> označuje nový řádek. Když použiji tuto metodu:

XDocument xdoc = XDocument.Load("sample.xaml");

                foreach (XElement xel in xdoc.Descendants("Run"))
                {
                        string s = xel.Value;

                        string fntSz = item.Attribute("FontSize").Value;

                        int sizefon = Convert.ToInt32(fntSz);

                        StringMeasureFn(s, "Arial", sizefon); //Zavolá funkci měřící string


                        //Zapisuje do bitmapy
                        using (Font arialFont = new Font("Arial", sizefon, FontStyle.Regular, GraphicsUnit.Point))
                        {
                            gr.DrawString(s, arialFont, Brushes.White, xPoint, stred, stringFormat);
                        }
                 }

Tak mi to všechno zapíše do jednoho řádku, protože nevím, jak určit, kdy končí <Paragraph> a tím vytvořit nový řádek.
Snad je to tak srozumitelné. A díky za případné rady.

 
Odpovědět 27.2.2015 14:54
Avatar
Lako
Člen
Avatar
Odpovídá na Majkel
Lako:

Procházíš elementy Run
tak procházej elementy Paragraph, tedy přidáš ještě jeden foreach..

 foreach (XElement paragraph in xdoc.Descendants("Paragraph"))
{
foreach (XElement run in paragraph.Descendants("Run"))
  {
//...zbytek metody
}
//..zalomit řádek
}
 
Nahoru Odpovědět 27.2.2015 17:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.