Friday, 31 August 2012
3 years...
Friday, 17 July 2009
ItexSharp generowanie dokumentów PDF z zewnętrznego dokumentu XML wraz z polskimi znakami
Ostatnio musiałem wygenerować dokumenty PDF z zewnętrznych dokumentów XML myślę sobie OK! … użyje biblioteki ITexSharp (port dla .NET C# z iText, a free Java-Pdf libr ary ), jest szybka i pozwala w prosty sposób generować dokumenty PDF. Dokumentacja jest przejrzysta znajduje się nawet przykładowy parser. No ale jak to w życiu bywa... pojawił się problem z generowanie polskich znaków w dokumentach PDF.
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.xml;
using iTextSharp.text.pdf;
public class XmlToPdf
{
public static void Main()
{
Console.WriteLine("XML to PDF conversion example");
// step 1: creation of a document-object
Document document = new Document();
try
{
// step 2:
// we create a writer that listens to the document
// and directs a XML-stream to a file
PdfWriter.GetInstance(document, new FileStream("document.pdf", FileMode.Create));
// step 3: we create a parser
ITextHandler xmlHandler = new ITextHandler(document);
// step 4: we parse the document
xmlHandler.Parse("document.xml");
}
catch (Exception e)
{
Console.Error.WriteLine(e.StackTrace);
Console.Error.WriteLine(e.Message);
if (e.InnerException != e)
{
Console.Error.WriteLine(e.InnerException.Message);
}
}
finally
{
Console.WriteLine("Finished - Hit any enter to close this window.");
}
Console.ReadLine();
}
}
Przeglądając różne grupy dyskusyjne znalazłem trochę rozwiązań ale jak już działało to z użyciem „hardcode” czyli dokument XML był zakodowany w wewnątrz plików *.cs .
Metodą testów udało mi się dojść do rozwiązania problemu mianowicie jeśli mamy wygenerować dokument PDF z wykorzystaniem ItexSharp z zewnętrznych dokumentów XML musimy zmodyfikować naszego parsera dokumentów przykład poniżej.
Zmodyfikowany parser :
using System;
using System.Text;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.xml;
using iTextSharp.text.pdf;
using iTextSharp.text.factories;
using iTextSharp.text.html;
namespace generationDocument
{
public class xmlToPdf
{
public static void Main()
{
Console.WriteLine("XML to PDF conversion");
BaseFont arial = BaseFont.CreateFont(@"C:\WINDOWS\Fonts\arial.ttf", "iso-8859-2", BaseFont.EMBEDDED);
Font font = newFont(arial, 9);
//creation of a document-object
Document document = newDocument();
try
{
PdfWriter.GetInstance(document, newFileStream("generowanyDokument.pdf", FileMode.Create));
//create a parser
ITextHandler xmlHandler = newITextHandler(document, newHtmlTagMap(), arial);
//parse the document
xmlHandler.Parse("generowanyDokument.xml");
}
catch (Exception e)
{
Console.Error.WriteLine(e.StackTrace);
Console.Error.WriteLine(e.Message);
if (e.InnerException != e)
{
Console.Error.WriteLine(e.InnerException.Message);
}
}
finally
{
Console.WriteLine("Finished - Hit any enter to close this window.");
}
Console.ReadLine();
}
}
}
W ten oto sposób uzyskamy upragnione polskie znaki w naszych dokumentach PDF.
Dodam że dokument XML musi być zakodowany w formacie utf-8. Przykładowy dokument XML znajduje się poniżej :
<?xml version="1.0" encoding="utf-8" ?>
<itext>
<list numbered="false" symbolindent="350" first="-2" listsymbol="" font="Helvetica" size="20.0" fontstyle="bold">
<listitem leading="18.0" font="unknown" align="Default" indentationleft="20.0">
.....................
</listitem>
</list>
<paragraph leading="18.0" font="unknown" align="Default">
.....................
</paragraph>
<paragraph leading="18.0" font="unknown" align="Default">
.....................
</paragraph>
<paragraph leading="18.0" font="unknown" align="Default">
.....................
</paragraph>
<paragraph leading="18.0" font="unknown" align="Default">
<newline />
</paragraph>
<table columns="0" width="100%" height ="100%" align="Center" borderwidth="0.0" left="true" right="true" top="true" bottom="true" red="0" green="0" blue="0">
<row>
<cell rowspan="0" borderwidth="0.0" left="false" right="false" top="true" bottom="true" horizontalalign="Center" verticalalign="Center" header="true" leading="18.0">
<paragraph leading="10.0" font="arial" size="20.0" align="Center">Przykład : </paragraph>
<paragraph leading="18.0" font="unknown" align="Default">
<newline />
</paragraph>
</cell>
</row>
</table>
<paragraph leading="18.0" font="unknown" align="Center">
<newline />
</paragraph>
<paragraph leading="18.0" font="unknown" align="Center">
<newline />
</paragraph>
<paragraph leading="6.0" font="unknown" align="Center">
<newline />
</paragraph>
<paragraph leading="18.0" font="arial" align="Default">
Polskie Znaki ąśęółźżć
</paragraph>
<paragraph leading="18.0" font="unknown" align="Default">
<newline />
</paragraph>
<list numbered="false" symbolindent="350" first="-2" listsymbol="" font="Helvetica" size="20.0" fontstyle="bold">
</list>
<paragraph leading="18.0" font="unknown" align="Center">
<newline />
</paragraph>
</itext>
Przykładowo wygenerowany dokument PDF z powyższego pliku XML

Mam nadzieje że ten krótki tekst zaoszczędzi trochę czasu oraz nerwów tym, którzy borykają się z problemem generowania polskich znaków z wykorzystaniem ItexSharp.
Strona domowa biblioteki ItexSharp : http://itextsharp.sourceforge.net/
Artykuł został również opublikowany w serwisie codeguru.pl pod adresem :
www.codeguru.pl/Default.aspx?Page=Articles/Details&pubid=761
Monday, 6 July 2009
Break Stereotype...
Tuesday, 2 June 2009
Opera i Silverlight
W końcu... zanośi się że przeglądarka opera w nowej wersji oznaczonej numerkiem 10, będzie obsługiwała Microsoftowskiego Silverlight dla przykładu Opera 10 Beta radzi sobie doskonale np. z stroną : http://www.silverlightsudoku.com/Sudoku.aspx podczas gdy wydanie 9.64 wyświetla tylko biała planszę.
Na marginesie aby korzystać z możliwośći platformy silverlight pod przeglądarką opera musimy się identyfikować np. jako firefox. ( Będąc na witrynie wykorzystującej Microsoft Silverlight musimy naćisnąc F12 -> Edit Site Preferences -> Network -> Identify as Firefox -> Ok. Co ciekawe jeśli wybierzemy opcję Identify as Internet Exploler, przeglądarka może się "wysypać " - osobiste doświadczenia przeglądając materiały na channel 9 msdn.)
Aha jeszcze jedno strony które wymagają do działania technologi Silverlight ver. 1.1 nie będą działać gdyż Opera nie oficjalnie (jak narazie :( ) współpracuje jedynie od wersji Silverlight 2.0
Do przetestowania technologi silverlight można użyć strony http://bubblemark.com/
Silverlight 3 powinien działać już bez większego problemu z Operą, zobaczymy... Gdyż jest to narazie jedna z bardziej znanych przeglądarek, które nie wspiera technologi Microsoft.
Tuesday, 26 May 2009
Eksport wiadomości z Thunderbird do Outlook 2007
Przeglądając google natrafiłem co prawda na sporo tutoriali ale albo nie działały albo trzeba trochę pokombinować żeby wykonać import np. użyć narzędzia IMAPSize musimy wyeksportować pliki do odpowiedniego formatu następnie zaimportować pliki do Outlook Express czy też Windows Mail (odpowiednik expressa w Vista) dopiero po tych czynnościach możliwy jest import z Outlook Express do Outlook 2007... jeśli dojdzie do tego parę skrzynek pocztowych, robi się to trochę uciążliwe.
Po dość długim przeglądaniu googl'a natrafiłem na polski program MboxProxy który to umożliwia w bardzo prosty i szybki sposób zaimportowanie skrzynek z formatu MBOX do np. Outlook 2007.
Czynność importu sprowadza się do wybrania folderu gdzie Thunderbird trzyma pocztę, naciśnięnie przycisku "Włącz serwer" w MboxProxy i tyle... w Outlooku konfigurujemy nowe konto pocztowe jako serwery pop3 oraz smtp podajemy localhost (127.0.0.1), dane dostępowe czyli login i hasło wpisujemy obojętnie co... ważne musi coś być następnie warto wskazać w outlook folder gdzie poczta ma zaostać zapisana na koniec pobieramy naszą pocztę... ;)
Opis zastosowania programu znajduje się w dokumentacji jest napisany bardzo prosto.
Sam program Mboxproxy dostępny jest TU .

Opis eksportu za pomocą programu IMAPSize o którym wspomniałem wcześniej dostępny jest pod adresem :
http://www.broobles.com/imapsize/th2outlook.php
Monday, 25 May 2009
Synchronizacja kalendarza outlook'a z kalendarzem google

Program jak i informacje o nim dostępne są na stronie projektu :
http://www.google.com/support/calendar/bin/answer.py?answer=98563
Tuesday, 19 May 2009
Wyłączanie - Shutdown event tracker w Windows Server 2008/2003
1. Otwieramy start --> wpisujemy gpedit.msc
2. w gpedit.msc przechodzimy
>Local Computer Policy
->Computer Configuration
-->Administrative Templates
--->System
---->"Display Shutdown Event Tracker" --> prawy klawisz myszy --> properties --> Disable -----> Apply
