Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Majkel
Člen
Avatar
Majkel:27.2.2015 14:54

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:27.2.2015 17:26

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.