تا %60 تخفیف خرید برای 6 نفر با صدور مدرک فقط تا
00 00 00

آموزش تبدیل صفحات وب به PDF در سی شارپ به زبان ساده

حسین احمدی
حسین احمدی
0 پسند
124 بازدید
0 نظر
10 ماه قبل

یکی از قابلیت هایی که وب سایت های محتوا محور در اختیار کاربر قرار میدن، تبدیل صفحات HTML به PDF هست. در این قسمت با ابزار wkhtmltopdf آشنا میشیم که می تونید این کار رو به راحتی انجام بدید. این ابزار در محیط Command قابل استفاده هست و البته می تونید از طریق زبان های مختلف برنامه نویسی، مثل زبان سی شارپ با این ابزار کار کنید. در ابتدا این ابزار رو از طریق این لینک دانلود و نصب کنید. بعد از نصب این ابزار، به صورت زیر می تونید یک صفحه HTML رو به PDF تبدیل کنید:

C:\Program Files\wkhtmltopdf\bin>wkhtmltopdf.exe https://tosinso.com/fa/latest d:\tosinso.pdf
Loading pages (1/6)
QFont::setPixelSize: Pixel size <= 0 (0)=========>           ] 81%
QFont::setPixelSize: Pixel size <= 0 (0)==========>          ] 83%
QFont::setPixelSize: Pixel size <= 0 (0)===============>     ] 90%
Counting pages (2/6)
QFont::setPixelSize: Pixel size <= 0 (0)=====================] Object 1 of 1
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
QFont::setPixelSize: Pixel size <= 0 (0)=====================] Page 18 of 18
Done

با اجرای دستور بالا فایل tosinso.pdf در درایو D ایجاد می شود. نکته که باید بهش دقت کنیم اینه که این ابزار امکان پارس کردن کدهای JavaScript رو نداره و به همین خاطر اگر بخشی از صفحه شما بوسیله کدهای JavaScript بارگذاری میشه، توی خروجی مشکل خواهید داشت. یک روش بهینه برای استفاده از این ابزار ایجاد یک نسخه چاپی ساده از صفحه و بعد تبدیل اون صفحه به HTML هست. برای مثال، این لینک نسخه چاپی از یک مطلب در وب سایت نوسینسو هست:

https://programming.tosinso.com/fa/contents/printversion?id=29e059f4-6121-4f81-9872-d969a6269efc

داخل صفحه بالا هیچ کد جاوا اسکریپتی استفاده نشده و یک صفحه ساده هست و به همین دلیل بدون هیچ مشکلی به فرمت PDF تبدیل میشه. نکته قابل توجه این ابزار پشتیبانی از زبان های راست به چپ هست.

اما چطور می تونیم از این ابزار داخل زبان سی شارپ استفاده کنیم؟ یک متد خیلی ساده این کار رو برای ما انجام میده:

static void CreatePdfFromWeb(string address, string output)
{
    const string binPath = "C:\\Program Files\\wkhtmltopdf\\bin";

    var process = new Process();
    process.StartInfo = new ProcessStartInfo()
    {
        Arguments = $"\"{address}\" \"{output}\"",
        CreateNoWindow = true,
        FileName = Path.Combine(binPath, "wkhtmltopdf.exe"),
        UseShellExecute = false,
        RedirectStandardError = true,
        RedirectStandardOutput = true,
        WindowStyle = ProcessWindowStyle.Hidden
    };
    process.EnableRaisingEvents = true;
    process.OutputDataReceived += (sender, args) => { Console.WriteLine(args.Data); };
    var start = process.Start();
    process.WaitForExit();
}

و نحوه فراخوانی کد بالا:

CreatePdfFromWeb("https://programming.tosinso.com/fa/contents/printversion?id=29e059f4-6121-4f81-9872-d969a6269efc", "d:\\content.pdf");

تو کد بالا متدی تعریف کردیم که دو پارامتر میگیره، اولی آدرس صفحه وبی که قصد تبدیل اون به PDF رو داریم و پارامتر دوم مسیر فایل خروجی ما. داخل متد هم بوسیله ایجاد یک Process از ابزار wkthmltopdf برای تبدیل صفحه به pdf استفاده می کنیم. امیدوارم که این مطلب مورد استفاده دوستان واقع بشه.

نویسنده: حسین احمدی
منبع: جزیره برنامه نویسی توسینسو
هر گونه نشر و کپی برداری با ذکر نام نویسنده و منبع بلامانع است

نظر شما
برای ارسال نظر باید وارد شوید.
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...