ITextSharp ile pdf çıktısı oluştururken Türkçe karakterler görünmeyebiliyor. Bu sorunu aşmak için yeni bir font tanımlayıp,
iTextSharp.text.pdf.BaseFont STF_Helvetica_Turkish = iTextSharp.text.pdf.BaseFont.CreateFont("Helvetica", "CP1254", iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED);
iTextSharp.text.Font fontNormal = new iTextSharp.text.Font(STF_Helvetica_Turkish, 12, iTextSharp.text.Font.NORMAL);
ekleyeceğin metinlerde de parametre olarak bu fontu eklemen gerekiyor. Örnek olarak pdftable adında bir tabloya yeni bir hücre eklerken;
pdftable.AddCell(new Phrase("ğüşıöç ĞÜŞİÖÇ" , fontNormal));
gibi.
Teşekkürler.. Problemim çözüldü. UTF dönüştürmek bile gerekmedi.
YanıtlaSilEn Kolay Çözüm. Teşekkürler
YanıtlaSilÇok teşekkür ederim.
YanıtlaSilMerhaba bu sorunu Perpetuumsoft SharpShooter Reports windows 10 2018 şubat güncellemelerinden sonra yaşamaya başlamıştım.
YanıtlaSiliTextSharp 4.1.6 versiyonunu kullanıyordu raporlama aracı uzun zamandır yapamıyordum sonunda iTextSharp kaynak kodlarında yukarıdaki kodu entegre ederek çözdüm teşekkürler.
aynı sorunu yaşayan varsa; bf null geldiği için olmuyormuş.
iTextSharp.text.font.cs içinde:
public Font(BaseFont bf, float size, int style, Color color) {
iTextSharp.text.pdf.BaseFont STF_Helvetica_Turkish = iTextSharp.text.pdf.BaseFont.CreateFont("Helvetica", "CP1254", iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED);
if (bf == null) {
bf = STF_Helvetica_Turkish;
}
this.baseFont = bf;
this.size = size;
this.style = style;
this.color = color;
}
Teşekkür etmeyi unutmuşum :)
SilTeşekkürler Caner Kara
StringWriter sw = new StringWriter();
YanıtlaSilHtmlTextWriter hw = new HtmlTextWriter(sw);
hw.AddStyleAttribute("font-size", "10pt");
hw.AddAttribute("class", "textmode");
this.panel1.RenderControl(hw);
StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 90f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
var logo = iTextSharp.text.Image.GetInstance(Server.MapPath("~/gfx/logo.png"));
logo.SetAbsolutePosition(130, 750);
pdfDoc.Add(logo);
iTextSharp.text.pdf.BaseFont STF_Helvetica_Turkish = iTextSharp.text.pdf.BaseFont.CreateFont("Helvetica", "CP1254", iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED);
iTextSharp.text.Font fontNormal = new iTextSharp.text.Font(STF_Helvetica_Turkish, 12, iTextSharp.text.Font.NORMAL);
htmlparser.Parse(sr);
pdfDoc.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=" + fileName + "_nolu_siparis.pdf");
Response.Charset = "UTF-8";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Buffer = true;
Response.Write(pdfDoc);
Response.End();
kod yapım bu şekildedir. Font u nasıl ekleyebilirim? bu şekilde Ş ve I harfi görünmüyor.
Sanırım HTML'den PDF'e dönüşüm yapmaya çalışıyorsunuz. İnternet üzerinde arama yapınca HTMLWorker sınıfı deprecated görünüyor. Bunun yerine tüm PDF sayfasını logoyu sayfaya eklediğiniz şekilde oluşturursanız font belirleyip bu fontu diğer metin ekleme metodlarına parametre olarak göndererek kullanabiliyorsunuz. Mesela;
Silvar document = new Document(PageSize.A4, 20, 20, 20, 20);
var output = new MemoryStream();
var writer = PdfWriter.GetInstance(document, output);
document.Open();
iTextSharp.text.pdf.BaseFont STF_Helvetica_Turkish = iTextSharp.text.pdf.BaseFont.CreateFont("Helvetica", "CP1254", iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED);
iTextSharp.text.Font fontNormal = new iTextSharp.text.Font(STF_Helvetica_Turkish, 12, iTextSharp.text.Font.NORMAL);
Paragraph p = new Paragraph();
Chunk yazi = new Chunk("Lorem ipsum dolor set amet.\n", fontNormal);
p.Add(yazi);
document.Add(p);
document.Close();
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AddHeader("Content-Disposition","attachment;filename=form.pdf");
HttpContext.Current.Response.BinaryWrite(output);
Kodu denemedim ama çalışacağını düşünüyorum.
İyi çalışmalar...
Yuarıdaki kodu ekleyince ; Android telefonlarda yine sorun devam ediyor. WEb de ve iphne da sorun yok.
YanıtlaSil