Introduction
I am working/dealing with Indic scripts for my project and I got so many problems due to partial/no support given by the s/w's or Libraries/Languages/Frameworks. I tried to resolve my problems. One of them is generating PDF's dynamically.
You know iTextSharp is a wonderful library for generating PDf Files dynamically. It supports unicode but not Indic Scripts. iText/iTextSharp has ready answer for this problem/bug/non support but not solution. I am not criticising iText/iTextsharp. Because it's open source one can imporve it.
Background and Terms
I assume you have very basic idea/familier of iText/iTextSharp and GIST and these terms ISCII,Unicode,IsFoc.
My Intermediate Solution
Going Back to History.
I used GIST(Developed by CDAC) and ISCII.
- Step1:
- First you have to Convert the Unicode HTML String to ISCII HtmlString .
- Step2:
- Convert the ISCII string to ISFOC and Send this string to the iText HtmlParser
- Step2 and Step3 can be merged by directly Converting Unicode string to ISFoc.This method is exposed by GIST. Can refer the GIST documentation
- Step3:
Step1
public static string UniCode2ISCII(string S)
{
if (S == null) { return null; }
try
{
Encoding encFrom = Encoding.GetEncoding(57002);
Encoding encTo = Encoding.GetEncoding(1252);
string str = S;
Byte[] b = encFrom.GetBytes(str);
return encTo.GetString(b);
}
catch { return null; }
}
Step2
Public Class ISCII2ISFOC
Declare Function Iscii2Isfoc Lib "ismapi32.dll" (ByVal s1 As String,
ByVal s2 As String, ByVal ilen As Integer, ByVal sc As String) As Integer
Public Function ToIsfoc(ByVal str1 As String,ByVal sc as String ) As String
Dim stext1 As String
Dim ilen As Integer
Dim iret As Integer
stext1 = Space(str1.Length * 2)
ilen = str1.Length
iret = Iscii2Isfoc(str1, stext1, ilen, sc)
ToIsfoc = stext1
End Function
End Class
Note:Above method is written in VB.Net So you have to Compile it as a seperate library and have to consume it.I tried with C# ref Variables.(Not got fruitful results. Needs to be written in C#.)
Step3
publc void PublishPdf(string IsFochtmlString){
string htmlString = "<html><body><font face=\"DVBSR0XT.ttf\">" +
IsFochtmlString+ "</font></body></html>";
HttpRequest Request = System.Web.HttpContext.Current.Request;
HttpResponse Response = System.Web.HttpContext.Current.Response;
Response.Clear();
Response.ContentType = "application/pdf";
System.IO.MemoryStream m = new System.IO.MemoryStream();
iTextSharp.text.Document document = new iTextSharp.text.Document();
iTextSharp.text.pdf.PdfWriter writer =
iTextSharp.text.pdf.PdfWriter.GetInstance(document, m);
document.Open();
System.Xml.XmlTextReader _xmlr = new System.Xml.XmlTextReader(
new StringReader(htmlString));
iTextSharp.text.html.HtmlParser.Parse(document, _xmlr);
writer.Flush();
Response.OutputStream.Write(m.GetBuffer(), 0, m.GetBuffer().Length);
Response.OutputStream.Flush();
Response.OutputStream.Close();
Response.End(); }
Advantages
- Compact and tiny compared with unicode.(Obviously.)
Limitations
- It inherit's the all limitations from ISCII .
- It support's Bilingual Only(i.e. English + the Indic Language).
- It's not the recommended way/It fails when there are multiple languages (Can overcome by splitting the String but It's difficult at runtime but still one can try. It's possible) because It can't recognize the difference between the languages(Indic).
History
- Article Raw Version 1 on 13 Aug 2008
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.