Uzyskanie szerokości (CM) z dlugości stringa

0

Witam

Mógłby mnie ktoś naprowadzić na rozwiązanie którego mogę użyć? Potrzebuję uzyskać szerokość Stringa (w centymetrach lub twipsach). Zastanawiałem się czy jest możliwa jakaś konwersja długości Stringa (metoda LEN()) na centymetry? Jeśli nie proszę o nakierowanie na jakiś inny sposób (nie koniecznie w MS SQL również C# wchodzi w grę)

pozdrawiam

0

możesz nam zdradzić po co Ci to???

0

Tworzę aplikację w ASP połączoną z MS SQL. Jedna z jej opcji to export raportów xml. Procedurę służącą do eksportu już skończyłem muszę ją tylko rozwinąć o to dopasowanie szerokości tekstu. Użytkownik na stronie może wprowadzić tekst który później będzie wyświetlony w raporcie . Na podstawie wprowadzonego tekstu muszę obliczyć jaka powinna być szerokość pola w raporcie. Jak na razie ustawiłem domyślną szerokość jednak muszę to poprawić.

0

Dzieki za poważne podejście do sprawy pozdro

0

A teraz na poważnie. Przeczytaj to co napisałeś i zastanów się jaki to ma sens.

0

Jak nie wiesz jak pomóc to wstrzymaj sie od komentarzy ;)

Chce jakimś sposobem uzyskać szerokość Stringa (nie dlugość) w obojętnie jakim formacie (centymetry, twipsy itp) i to wszystko.

0

Wiesz, że szerokość w centymetrach zależy od rozdzielczości, przekątnej ekranu, rozmiarze i kroju czcionki?

0

Wiem wszystkie te dane mam bo szerokość muszę dopasować do raportu, którego rozmiary są zawsze stałe. Szerokość nie musi być w centymetrach. Nie chce całego rozwiązania zamieszczając ten temat miałem nadzieje ze ktoś mnie naprowadzi na jakieś rozwiązanie.

Znalazłem coś takiego
http://bytes.com/topic/c-sharp/answers/266167-get-actual-text-width

Jednak to rozwiązanie nie działa w ASP albo coś złe robię.

0

Przede wszystkim, co takie pytanie robi w dziale o bazach?
A po drugie - napisz może w ogóle od początku do końca o co chodzi. Bo w "raporcie XML" nie ma po co trzymać informacji o długości napisu. I czym w ogóle jest rozmiar raportu XML? Liczbą bajtów zajmowanych przez plik na dysku? No chyba, że na Twoim dysku pliki mierzy się w centymetrach.

0

Pisząc o stałej szerokości raportu miałem na myśli (w tym przypadku szerokość podana w twipsach, 1cm-566 twips):
....
<Layout>
<Width>11000</Width>
<MarginLeft>200</MarginLeft>
<MarginTop>200</MarginTop>
<MarginRight>200</MarginRight>
<MarginBottom>200</MarginBottom>
</Layout>
...

Pole w raporcie:
...
<Field>
** <Text>Test</Text>**
<Name>XXX</Name>
<Left>3000</Left>
<Top>2400</Top>
** <Width>1701</Width>**
<Height>227</Height>
<Align>0</Align>
</Field>
...

W aplikacji określamy wygląd nowego raportu. Właściwość *Text ** to string opisujący pole zostanie on wyświetlony w raporcie (edytowany za pomocą specjalnego programu). Szerokość pola Width powinna być dopasowana automatycznie do długości tekstu np.<Text>Test12345</Text> będzie mieć większa szerokość niż <Text>Test</Text>. Szerokość pola mogę obliczyć w Visual Studio C# lub w SQL (procedura do exportu raportu) jednak póki co nie bardzo mam pomysł jak to zrobić

0

Czyli wyświetlasz taki raport w tym specjalnym programie i on zawsze wyświetli te 566twipsów jako 1cm na ekranie? Niezależnie od czcionki i jej rozmiaru?

Ja umiem zmierzyć obszar, jaki zajmie tekst na ekranie w pikselach w taki sposób:

string text = "Measure String";
Font font = new Font("Arial", 16);

using (Bitmap bmp = new Bitmap(800, 600))
{
    using (Graphics g  = Graphics.FromImage(bmp))
    {
        SizeF size = g.MeasureString(text, font);
    }
}
0

Tak zawsze 1 cm to 566 twipsow. Czcionka jednak też też ma znaczenie ale to już nie problem. Twój sposób działa :) stworze bitmap o wymiarach raportu jak uzyskam szerokość pola w pikselach prze konwertuje je na twipsy. Dzięki za pomoc w przyszłości postaram sie dokładniej opisywać problem o ile zajdzie taka potrzeba.

1 użytkowników online, w tym zalogowanych: 0, gości: 1