Search code examples
javascriptc#htmlcssironpdf

-webkit-transform CSS property not working in IronPdf


I want to convert a html page in a ASP .NET project with IronPdf

This is the HTML that I give to IronPdf:

<!doctype html>
<html lang="en">
<head>
    <!-- Required meta tags -->
    <meta charset="UTF-8">
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <style type="text/css">
        .meter {
            width: 100%;
            height: 100%;
        }

        .circle {
            fill: none;
            -webkit-transform-origin: 50% 50%;
            -webkit-transform: rotateZ(-90deg) rotateX(180deg);
        }

        .outline, .mask {
            stroke: #F1F1F1;
            stroke-width: 30;
        }

        .range {
            stroke-width: 30;
        }
    </style>

</head>
<body>
    <div class="container">
        <h5 id="headline">Test Render</h5>
        <svg class="meter">
            <circle class="outline-curves circle outline" cx="50%" cy="50%" r="100"></circle>
            <circle class="low circle range" cx="50%" cy="50%" stroke="#FDE47F" r="100"></circle>
            <circle class="mask circle" cx="50%" cy="50%" r="100"></circle>
            <circle class="outline-ends circle outline" cx="50%" cy="50%" r="100"></circle>
            <text class="text" x="50%" y="50%" dominant-baseline="middle" text-anchor="middle">70%</text>
        </svg>
    </div>
</body>
</html>
<footer>
    <script lang="text/javascript">
        /* Set radius for all circles */
        var r = 100;
        var circles = document.querySelectorAll('.circle');
        var total_circles = circles.length;
        for (var i = 0; i < total_circles; i++) {
            circles[i].setAttribute('r', r);
        }

        /* Set meter's wrapper dimension */
        var meter_dimension = (r * 2) + 100;
        var meters = document.querySelectorAll(".meter");
        for (var i = 0; i < meters.length; i++) {
            meters[i].style.width = meter_dimension + "px";
            meters[i].style.height = meter_dimension + "px";
        }

        /* Add strokes to circles  */
        var cf = 2 * Math.PI * r;
        var semi_cf = cf;
        var outlineCurves = document.querySelectorAll(".outline-curves")
        var lows = document.querySelectorAll(".low")
        var outlineEnds = document.querySelectorAll(".outline-ends");
        var masks = document.querySelectorAll(".mask");

        for (var i = 0; i < outlineCurves.length; i++) {
            outlineCurves[i].setAttribute("stroke-dasharray", semi_cf + "," + cf);
        }
        for (var i = 0; i < lows.length; i++) {
            lows[i].setAttribute("stroke-dasharray", semi_cf + "," + cf);
        }
        for (var i = 0; i < outlineEnds.length; i++) {
            outlineEnds[i].setAttribute("stroke-dasharray", 2 + "," + (semi_cf - 2));
        }

        function setGaugeValue(value) {
            var percent = value;
            var meter_value = semi_cf - ((percent * semi_cf) / 100);
            for (var i = 0; i < masks.length; i++) {
                masks[i].setAttribute("stroke-dasharray", meter_value + "," + cf);
            }
        }

        setGaugeValue(70);
    </script>
</footer>

And here are the settings used for IronPdf in C#:

var _renderer = new HtmlToPdf();
_renderer.PrintOptions.SetCustomPaperSizeInInches(8.5, 11);
_renderer.PrintOptions.PaperOrientation = PdfPrintOptions.PdfPaperOrientation.Portrait;
_renderer.PrintOptions.Title = "X";
_renderer.PrintOptions.EnableJavaScript = true;
_renderer.PrintOptions.RenderDelay = 5000; //ms
_renderer.PrintOptions.CssMediaType = PdfPrintOptions.PdfCssMediaType.Screen;
_renderer.PrintOptions.DPI = 300;
_renderer.PrintOptions.GrayScale = false;
_renderer.PrintOptions.FitToPaperWidth = true;
_renderer.PrintOptions.InputEncoding = Encoding.UTF8;
_renderer.PrintOptions.Zoom = 90;
_renderer.PrintOptions.ViewPortWidth = 1280;
_renderer.PrintOptions.CreatePdfFormsFromHtml = true;
_renderer.PrintOptions.MarginTop = 10; //millimeters
_renderer.PrintOptions.MarginLeft = 10; //millimeters
_renderer.PrintOptions.MarginRight = 10; //millimeters
_renderer.PrintOptions.MarginBottom = 10; //millimeters
_renderer.PrintOptions.FirstPageNumber = 1;

According to their documentation this should work: https://ironpdf.com/docs/questions/rotating-text/

When I try the HTML in the browser it works as expected but when IronPdf converts it into a PDF everything works except the -webkit-transform CSS properties.

I don't know if I overlooked something to make it work but I'm at the end of my wisdom.


Solution

  • I figured out what my problem was:

    -webkit-transform is only working in IronPdf when used on a svg-Element and is NOT working on a circle-Element.