EVO PDF Logo

Select Media Type When Converting HTML to PDF

EVO PDF Client for .NET Core

In the HTML document you can define different styles for different media types using @media rules. For example you can have a style for screen with background colors and images and a style for printing without background colors or images to save ink. EVO HTML to PDF Converter allows you to select the media type for which you want to render the HTML document using the HtmlToPdfConverterMediaType property.

Code Sample - Select Media Type When Converting HTML to PDF

C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;

using Microsoft.AspNetCore.Hosting;

// Use EVO PDF Namespace
using EvoPdfClient;

namespace EvoHtmlToPdfDemo.Controllers.HTML_to_PDF.Media_Types
{
    public class Select_Screen_or_Print_Media_TypeController : Controller
    {
        private readonly Microsoft.AspNetCore.Hosting.IWebHostEnvironment m_hostingEnvironment;
        public Select_Screen_or_Print_Media_TypeController(IWebHostEnvironment hostingEnvironment)
        {
            m_hostingEnvironment = hostingEnvironment;
        }

        private void SetCurrentViewData()
        {
            ViewData["ContentRootPath"] = m_hostingEnvironment.ContentRootPath + "/wwwroot";

            HttpRequest request = this.ControllerContext.HttpContext.Request;
            UriBuilder uriBuilder = new UriBuilder();
            uriBuilder.Scheme = request.Scheme;
            uriBuilder.Host = request.Host.Host;
            if (request.Host.Port != null)
                uriBuilder.Port = (int)request.Host.Port;
            uriBuilder.Path = request.PathBase.ToString() + request.Path.ToString();
            uriBuilder.Query = request.QueryString.ToString();

            ViewData["CurrentPageUrl"] = uriBuilder.Uri.AbsoluteUri;
        }

        public ActionResult Index()
        {
            SetCurrentViewData();

            return View();
        }

        [HttpPost]
        public ActionResult ConvertHtmlToPdf(IFormCollection collection)
        {
            // Get the server options
            string serverIP = collection["textBoxServerIP"];
            uint serverPort = uint.Parse(collection["textBoxServerPort"]);
            string servicePassword = collection["textBoxServicePassword"];
            bool useServicePassword = servicePassword.Length > 0;
            bool useTcpService = collection["ServerType"] == "radioButtonUseTcpService";
            string webServiceUrl = collection["textBoxWebServiceUrl"];

            // Create the HTML to PDF converter object
            HtmlToPdfConverter htmlToPdfConverter = null;
            if (useTcpService)
                htmlToPdfConverter = new HtmlToPdfConverter(serverIP, serverPort);
            else
                htmlToPdfConverter = new HtmlToPdfConverter(true, webServiceUrl);

            // Set optional service password
            if (useServicePassword)
                htmlToPdfConverter.ServicePassword = servicePassword;

            // Set license key received after purchase to use the converter in licensed mode
            // Leave it not set to use the converter in demo mode
            htmlToPdfConverter.LicenseKey = "4W9+bn19bn5ue2B+bn1/YH98YHd3d3c=";

            // Set an adddional delay in seconds to wait for JavaScript or AJAX calls after page load completed
            // Set this property to 0 if you don't need to wait for such asynchcronous operations to finish
            htmlToPdfConverter.ConversionDelay = 2;

            // Set the media type for which to render HTML to PDF
            htmlToPdfConverter.MediaType = collection["MediaType"] == "printMediaTypeRadioButton" ? "print" : "screen";

            byte[] outPdfBuffer = null;

            if (collection["HtmlPageSource"] == "convertHtmlRadioButton")
            {
                string htmlWithForm = collection["htmlStringTextBox"];
                string baseUrl = collection["baseUrlTextBox"];

                // Convert a HTML string to a PDF document for the selected media type
                outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlWithForm, baseUrl);
            }
            else
            {
                string url = collection["urlTextBox"];

                // Convert the HTML page to a PDF document for the selected media type
                outPdfBuffer = htmlToPdfConverter.ConvertUrl(url);
            }

            // Send the PDF file to browser
            FileResult fileResult = new FileContentResult(outPdfBuffer, "application/pdf");
            fileResult.FileDownloadName = "Select_Screen_or_Print_Media_Type.pdf";

            return fileResult;
        }
    }
}
HTML Code with @media Rules

XML
<!DOCTYPE html>
<html>
<head>
    <title>Media Type Rules</title>
    <style type="text/css">
        /* Set the body text family and font size both for screen and print*/
        body
        {
            width: 1000px;
            margin: 10px;
            font-family: 'Times New Roman';
            font-size: 18px;
        }

        /* Set the title text font size and weight both for screen and print*/
        .title
        {
            font-size: 24px;
            font-weight: bold;
        }

        @media screen
        {
            /* Set a background color only when the HTML page is displayed on screen*/
            body
            {
                background-color: aliceblue;
            }

            /* Use blue to write the text on screen*/
            p
            {
                color: darkblue;
            }
        }

        @media print
        {
            /* Hide images when priting*/
            img
            {
                display: none;
            }

            /* Use black to write the text on screen*/
            p
            {
                color: black;
            }
        }


        @media screen,print
        {
            /* Set the paragraph text family and font size both for screen and print*/
            p
            {
                font-family: 'Times New Roman';
                font-size: 20px;
            }
        }
    </style>
</head>
<body>
    <span class="title">Media Type Rules</span><br />
    <br />
    This document have different styles when it is displayed on the screen and when it is printed.
    You can instruct the converter to use the style you want setting its <i>MediaType</i> property.<br />
    <br />
    <b>The image below is visible only when the selected media type is 'screen' and is hidden when the selected media type is 'print'</b>:<br />
    <br />
    <img alt="Logo Image" src="img/logo.jpg" />
    <br />
    <br />
    <b>The text below will be dark blue when the selected media type is 'screen' and black when the selected media type is 'print':</b>
    <p>
        Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut 
        laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation 
        ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure 
        dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla 
        facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit 
        augue duis dolore te feugait nulla facilisi.
    </p>
</body>
</html>