معرفی
در این آموزش قصد داریم با نحوه کار با فایل های PDF در NET Core آشنا شویم. من معتقدم این موضوع بسیار مهمی است. هنگام کار با فایلهای PDF، کتابخانههای زیادی در بازار و مخزن nuget موجود است. من از کتابخانه منبع باز استفاده خواهم کرد. این آموزش به 3 مورد و 1 سناریو تقسیم شده است. ابتدا اجازه دهید در مورد iText7 بدانیم.
iText7
iText7، که قبلا به عنوان iTextSharp شناخته می شد، کتابخانه PDF درجه سازمانی است که از تمام استانداردهای PDF و فناوری های مرتبط مراقبت می کند. تمام مشکلات مربوط به PDF را حل می کند و به توسعه دهندگان اجازه می دهد صرفاً روی منطق تجاری تمرکز کنند. این یک مدل سند انتزاعی را ارائه می دهد. این به ما توانایی ساخت، خواندن، حذف، درج اسناد PDF را می دهد. تمام استانداردهای جهانی PDF را برآورده می کند. همراه با مستندات جامع است. کارایی بالایی ارائه می دهد. قابل گسترش است. ما می توانیم با استفاده از iText7 Suite افزونه هایی را در آن انجام دهیم. در جاوا و دات نت موجود است. توسط جامعه حمایت می شود. کد منبع iText7 نیز منبع باز است و در Github موجود است.
مجوزهای رایگان
ما میتوانیم آن را بهصورت رایگان در انجمن iText7 تحت مجوز منبع باز AGPL استفاده کنیم. مجوز دارای محدودیت هایی است. برای اهداف تجاری لطفاً اسناد رسمی آن را برای مجوزها بخوانید.
چه مواردی در آموزش پوشش داده خواهد شد؟
در این آموزش من 3 تابع ایجاد خواهم کرد که در آنها عملیات خواندن را با استفاده از itext7 انجام می دهیم، محتوای دو فایل را با استفاده از diff_match_patch ارائه شده توسط Google به عنوان منبع رایگان در github مقایسه می کنیم و یک فایل pdf با استفاده از itext7 ایجاد می کنیم که نتیجه را ذخیره می کند. بنابراین، در مجموع میخواهیم 2 فایل pdf را با گرفتن یک سناریوی واقعی مقایسه کنیم. پس بیایید شروع کنیم!!
مورد 1
خواندن یک فایل پی دی اف به متن، با استفاده از iText7
- /*
- ..
- using iText.Kernel.Pdf;
- using iText.Kernel.Pdf.Canvas.Parser;
- using iText.Kernel.Pdf.Canvas.Parser.Listener;
- */
- public string ReadFile(string pdfPath) {
- var pageText = new StringBuilder();
- using(PdfDocument pdfDocument = new PdfDocument(new PdfReader(pdfPath))) {
- var pageNumbers = pdfDocument.GetNumberOfPages();
- for (int i = 1; i <= pageNumbers; i++) {
- LocationTextExtractionStrategy strategy = new LocationTextExtractionStrategy();
- PdfCanvasProcessor parser = new PdfCanvasProcessor(strategy);
- parser.ProcessPageContent(pdfDocument.GetFirstPage());
- pageText.Append(strategy.GetResultantText());
- }
- }
- return pageText.ToString();
- }
مورد 2
خواندن و مقایسه دو فایل پی دی اف با استفاده از تابع Above Function و Google diff_match_patch که اکنون منبع باز است و در اینجا موجود است . ما به سادگی آن فایل را دانلود کرده و کد زیر را می نویسیم.
این وصله تطبیق تفاوت یک کتابخانه قدرتمند برای مقایسه/دستکاری متون ساده است.
- /*
- ..
- using DiffMatchPatch;
- using System.IO;
- using System.Reflection;
- using System.Text;*/
- public string ComparePdfFiles() {
- string pdfPath1 = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + @ "SamplePdfsoriginal.pdf";
- string pdfPath2 = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) + @ "SamplePdfsaltered.pdf";
- StringBuilder compareResult = new StringBuilder();
- var text1 = ReadFile(pdfPath1);
- var text2 = ReadFile(pdfPath2);
- diff_match_patch dmp = new diff_match_patch();
- var diff = dmp.diff_main(text1, text2);
- foreach(var d in diff) {
- compareResult.Append(d + "n");
- }
- return compareResult.ToString();
- }
مورد 3 - ایجاد یک فایل PDF با استفاده از iText7