سؤال

أرغب في تحويل صفحة ويب ASP.NET إلى PDF باستخدام ItextSharp. لقد كتبت بعض التعليمات البرمجية ولكن لا يمكنني جعلها تظهر الشخصيات التركية. هل يستطيع أي أحد مساعدتي؟

هنا هو الرمز:

using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

using System.Web.UI;
using System.Web;
using iTextSharp.text.html.simpleparser;
using System.Text;
using System.Text.RegularExpressions;

namespace Presentation
{
    public partial class TemporaryStudentFormPrinter : System.Web.UI.Page
    {
        protected override void Render(HtmlTextWriter writer)
        {
            MemoryStream mem = new MemoryStream();
            StreamWriter twr = new StreamWriter(mem);
            HtmlTextWriter myWriter = new HtmlTextWriter(twr);
            base.Render(myWriter);
            myWriter.Flush();
            myWriter.Dispose();
            StreamReader strmRdr = new StreamReader(mem);
            strmRdr.BaseStream.Position = 0;
            string pageContent = strmRdr.ReadToEnd();
            strmRdr.Dispose();
            mem.Dispose();
            writer.Write(pageContent);
            CreatePDFDocument(pageContent);
        }
        public void CreatePDFDocument(string strHtml)
        {
            string strFileName = HttpContext.Current.Server.MapPath("test.pdf");
            Document document = new Document(PageSize.A4, 80, 50, 30, 65);
            PdfWriter.GetInstance(document, new FileStream(strFileName, FileMode.Create));

            StringReader se = new StringReader(strHtml);
            HTMLWorker obj = new HTMLWorker(document);

            document.Open();

            obj.Parse(se);
            document.Close();
            ShowPdf(strFileName);
        }
        public void ShowPdf(string strFileName)
        {
            Response.ClearContent();
            Response.ClearHeaders();
            Response.AddHeader("Content-Disposition", "inline;filename=" + strFileName);
            Response.ContentType = "application/pdf";
            Response.WriteFile(strFileName);
            Response.Flush();
            Response.Clear();
        }

        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}
هل كانت مفيدة؟

المحلول

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);

يجب عليك تمرير الخط كوسيطة في أوامر معالجة ItextSharp مثل ذلك:

pdftable.AddCell(new Phrase(nn.InnerText.Trim(), fontNormal));

قد ترغب في التفكير في العمل مع أدوات الإبلاغ مع قدرة تصدير PDF بدلاً من العمل مع PDF والتي يمكن أن تكون صداعًا حقيقيًا ..

نصائح أخرى

ستحتاج إلى التأكد من أنك تكتب النص في خط يدعم مجموعة الأحرف التركية (أو على الأقل المشاركين الذين تحاولون كتابته).

لا أعرف ما الذي يفعله HTMLTextWriter من حيث استخدام الخط-من المفترض أنه سيستخدم أحد الخطوط المدمجة القياسية التي من غير المرجح أن تدعم الشخصيات التي تريد طباعتها إذا كان السقوط خارج لاتيني 1 أو لاتيني 1 يونيكود يونيكود .

أنا أستعمل BaseFont.createFont(...) للحصول على خط خارجي مدرج في PDF الخاص بي في Itext (Java) - وهو واحد يدعم جميع الشخصيات التي أكتبها. قد تكون قادرًا على إنشاء كائن الخط الخاص بك ثم تمريره إلى HTMLTextWriter؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top