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

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

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

چهارشنبه, 17 بهمن 1397 13:03

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

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

چهارشنبه, 17 بهمن 1397 14:00
چهارشنبه, 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,
شنبه, 20 بهمن 1397 14:29

سلام.

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

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

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

ارسال پاسخ برای این تاپیک

ارسال پاسخ مخصوص اعضا سایت می باشد ! میتوانید با حساب کاربری خود وارد سایت شده یا ثبت نام کنید