مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

hosseinesteki

عضویت از 1397/11/17

خواندن محتوای pdf

  • چهارشنبه 17 بهمن 1397
  • 13:03
تشکر میکنم

سلام. چطور میتونم یک فایل pdf فارسی رو طوری بخونم که حروفش به هم نریزه. میخوام در نهایت String برگردونه. ممنون.

پاسخ های این پرسش

تعداد پاسخ ها : 3 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • چهارشنبه 17 بهمن 1397
  • 14:00

این لینک رو ببینید 

کاربر سایت

kaveh.norozi

عضویت از 1394/11/30

  • چهارشنبه 17 بهمن 1397
  • 15:25

سلام

من خیلی دنبال این حرکت بودم ولی واقعا برای فونت های فارسی جواب نمیده!!!!

من خودم هم از ITexhsharp استفاده کردم که برای اعداد و حروف انگلیسی جواب میده ولی رو فارسی مشکل داره!!!

مشکل من این بود: یک فایل PDF داشتم که 6984 صفحه بود و کارنامه قبولی دانشجوها که تعداد 1300 نفر بودن پشت سر هم بود! چالش من این بود که کارنامه هر دانشجو رو تو پرونده خودش ذخیره کنم! برای هر دانشجو تعداد صفحه ثابت نبود یعنی دانشجوی 1 از صفحه 1 تا 10 بود، دانشجوی 2 از صفحه 11 تا 12، دانشجوی 3 از صفحه 13 تا 33 و . . .

راه حل من:

خوشبختانه توی کارنامه شماره پرونده هر دانشجو مشخص بود که یه عدد 6 رقمی بود و فقط تو صفحه اول هر کارنامه اومده بود !!!!

من کل فایل رو با itextsharp خوندم هر جا که به یه عدد 6 رقمی میرسیدم شماره صفحه رو ذخیره میکردم، با این کار، شماره پرونده، شماره صفحه فعلی و شماره صفحه قبلی رو داشتم!

پس تونستم کارنامه هر دانشجو رو استخراج کنم و بصورت یک فایل جدا ذخیره کنم!!!

روش کار من :

اولا itextsharp ( همونی که مهندس مدائنی لینک رو قرار دادند) رو به پروژه اضافه کردم

StringBuilder text = new StringBuilder();
            StringBuilder textNum = new StringBuilder();
            PdfReader reader = new PdfReader("D:\\Mvc_project\\PDFSample\\PDFSample\\PDFSample\\7182.pdf");
            string pattern = @"3\d{5}\d";
            List<StdModel> MyList = new List<StdModel>();
            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                text.Append(PdfTextExtractor.GetTextFromPage(reader, i));
                if (Regex.Match(PdfTextExtractor.GetTextFromPage(reader, i), pattern).Length > 0)
                {
                    MyList.Add(new StdModel
                    {
                        Student = Regex.Match(PdfTextExtractor.GetTextFromPage(reader, i), pattern).ToString(),
                        FirstPage = i
                    });
                    //textNum.Append(Regex.Match(PdfTextExtractor.GetTextFromPage(reader, i), pattern));
                    //textNum.Append(":");
                    //textNum.Append(i);
                    //textNum.Append("</br>");
                }

            }

تو تیکه کد بالا من فایل رو میخونم و هرجا که یه عدد 6 رقمی میبینم اونو به لیستم اضافه میکنم.

 public class StdModel
    {
        public string Student { get; set; }
        public int FirstPage { get; set; }
    }

با تموم شدن این کار لیست من کامل شده که شامل شماره پرونده دانشجو و شماره صفحه مربوط به دانشجو است

حالا وقتشه که کارنامه هارو فراخوانی کنیم برای این کار :

 int LengthList = MyList.Count();
            for (int i = 0; i < LengthList; i++)
            {
                string outputPath = @"C:\kavehNorouzi\";
                Document document = new Document();
                string pageName = MyList[i].Student;
                PdfCopy copy = new PdfCopy(document, new FileStream(outputPath + "\\" + pageName + ".pdf", FileMode.Create));
                document.Open();
                int FirstPage = MyList[i].FirstPage;
                int SecondPage = MyList[i + 1].FirstPage;
                for (int pagenumber = FirstPage; pagenumber < SecondPage; pagenumber++)
                {
                    if (reader.NumberOfPages >= pagenumber)
                    {

                        copy.AddPage(copy.GetImportedPage(reader, pagenumber));
                    }
                    else
                    {
                        break;
                    }

                }
                document.Close();
            }

تو این تکه کد من کارنامه هر شخص رو تو فولدری در درایو C با نام کد پرونده دانشجو ذخیره می کنم.

بعد از اینکار کافیه فایلهای ذخیره شده رو در سامانه خودمون ذخیره کنیم.

کاربر سایت

hosseinesteki

عضویت از 1397/11/17

  • شنبه 20 بهمن 1397
  • 14:29

سلام.

جواب نداد مهندس مدائنی.

شاید اگر که با روش کارش آشنا بشیم بتونیم درستش کنیم.کسی روش کار رو نمیدونه؟

مشکل از StringBuilder هست یا iTextSharp؟

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)