3 votes

Le caractère arabe ne fonctionne pas dans DOMPDF

J'ai un problème avec le caractère arabe lorsqu'il est utilisé dans DOMPDF... J'ai tout essayé, mais rien ne fonctionne...

Ma version DOMPDF est la dernière. J'ai essayé d'installer la police de caractères et de définir la chartre en UTF-8 et Windows-1256 mais cela ne fonctionne toujours pas...

Voici le code de la page HTML :

<?php require("login3.php"); ?>
<?php
    if (!empty($_POST)) {
        // Used for later to determine result
        $success = $error = false;

        // Object syntax looks better and is easier to use than arrays to me
        $post = new stdClass;

        // Usually there would be much more validation and filtering, but this
        // will work for now.
        foreach ($_POST as $key => $val)
            $post->$key = trim(strip_tags($_POST[$key]));

        // Check for blank fields
        if (empty($post->itemCode) OR
            empty($post->itemDesc) OR
            empty($post->itemQty) OR
            empty($post->itemPrice) OR
            empty($post->itemAgent))

            $error = true;
        else {
            // Get this directory, to include other files from
            $dir = dirname(__FILE__);

            // Get the contents of the pdf into a variable for later
            ob_start();
            require_once($dir . '/pdf.php');
            $pdf_html = ob_get_contents();
            ob_end_clean();

            // Load the dompdf files
            require_once($dir . '/dompdf/dompdf_config.inc.php');

            $dompdf = new DOMPDF(); // Create new instance of dompdf
            $dompdf->load_html($pdf_html, "UTF-8");  // Load the html
            $dompdf->render();  // Parse the html, convert to PDF
            $pdf_content = $dompdf->output(); // Put contents of pdf into variable for later

            // Get the contents of the HTML email into a variable for later
            ob_start();
            require_once($dir . '/html.php');
            $html_message = ob_get_contents();
            ob_end_clean();

            date_default_timezone_set('Asia/Amman');
            $tym = date('m-d-Y : hi a');
            $filename = ' Order ' . $tym;
            $dompdf->load_html($_SESSION['prints']['table']);

            $dompdf->stream( $_SESSION["username"] . $filename . ".pdf"); // Streams the PDF to the client. Will open a download dialog by default

            // Load the SwiftMailer files
            require_once($dir . '/swift/swift_required.php');

            $mailer = new Swift_Mailer(new Swift_MailTransport()); // Create new instance of SwiftMailer

            $message = Swift_Message::newInstance()
                           ->setSubject('New Order') // Message subject
                           ->setTo(array('hussammoz@aol.com', 'hussammoz@GMAIL.com' => 'Orange Pharmacy Store')) // Array of people to send to
                           ->setFrom(array('no-reply@net.tutsplus.com' => 'Orange Pharmacy Order System')) // From:
                           ->setBody($html_message, 'text/html') // Attach that HTML message from earlier
                           ->attach(Swift_Attachment::newInstance($pdf_content,  $_SESSION["username"] . $filename . ".pdf", 'application/pdf')); // Attach the generated PDF from earlier

            // Send the email, and show user message
            if ($mailer->send($message))
                $success = true;
            else
                $error = true;
        }
    }
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <link href="favicon.ico" rel="icon" type="image/x-icon" />
        <link rel="shortcut icon" href="favicon.ico" />
        <title>Orange Pharmacy Order System</title>

        <style type="text/css" title="currentStyle">
            @import "css/layout-styles.css";
            @import "css/themes/smoothness/jquery-ui-1.8.4.custom.css";

            {
                font-family: arabic, Arabic, Serif;
            }
        </style>

        <script type="text/javascript"  src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
        <script src="includes/jquery.ticker.js" type="text/javascript"></script>
        <script src="includes/site.js" type="text/javascript"></script>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

        <!-- jQuery libraries-->
        <script type="text/javascript" src="js/jquery-1.6.1.min.js"></script>
        <script type="text/javascript" src="js/jquery-ui-1.8.14.custom.min.js"></script>
        <script type="text/javascript" src="js/atooltip.jquery.js"></script>
        <script type="text/javascript" src="js/kwicks-1.5.1.pack.js"></script>
        <script type="text/javascript" src="js/script.js"></script>

        <!-- Our jQuery script to make everything work -->
        <script type="text/javascript" src="js/jq-ac-script.js"></script>
    </head>

    <body background="images/bg.jpg";>
        <div id="cont">
           <div style="position:absolute; top: 10px; left: 25px;">
           <a href="index.php" class="normaltip" style="text-decoration:none" title="Home"> <img src="images/home.png"height="48" width="48"></a></div>
           <div style="position:absolute; top: 60px; left: 25px;">
           <a href="order.php" class="normaltip" style="text-decoration:none" title="New  Order"><img src="images/system-software-update.png"height="48" width="48"></a></div>

        <div id="container">

        <h2 align="center"><img src="images/418694_259331167468533_385322251_n.jpg"></h1>
        <div class="panel">
            <div class="title-large">
            <div class="theme"></div>
        <p>
        <h4 align="left"><b>Branch: <FONT COLOR="white"><?php echo($_SESSION["username"]); ? ></b></h4>
        <script type="text/javascript">
            function GetClock(){
                d = new Date();
                nday   = d.getDay();
                nmonth = d.getMonth();
                ndate  = d.getDate();
                nyear  = d.getYear();
                nhour  = d.getHours();
                nmin   = d.getMinutes();
                nsec   = d.getSeconds();

                if (nyear<1000)
                    nyear=nyear+1900;

                if (nhour ==  0) {
                    ap = " AM";nhour = 12;
                }
                else if(nhour <= 11) {ap = " AM";}
                else if(nhour == 12) {ap = " PM";}
                else if(nhour >= 13) {ap = " PM";nhour -= 12;}

                if(nmin <= 9) {nmin = "0" +nmin;}
                if(nsec <= 9) {nsec = "0" +nsec;}

                document.getElementById('clockbox').innerHTML =
                    "" + (nmonth+1) + "/" + ndate + "/" + nyear + "  " +
                    nhour + ":" + nmin + ":" + nsec + ap + "";
                setTimeout("GetClock()", 1000);
            }
            window.onload = GetClock;
        </script>

        <div id="clockbox"></div></font></div>
        <?php if ($success) { ?>
            <div class="message success">
                <h4>Order Successfully Sent to Store </h4>
            </div>
        <?php } elseif ($error) { ?>
            <div class="message error">
                <h4>Sorry, an error occurred. Try again!</h4>
            </div>
        <?php } ?>
        <div class="content inpad">

            <div id="messageBox" style="margin-left:15px; padding-left:20px;  padding-bottom:5px; border:1px #ccc solid; display:none;"></div>

            <form method="post" action="#" id="itemsForm">
                <h1 align="center"><font color="black"><b>Branch Order Form</b> </font></h1><br><br>
                <select name="Priority" size="1">
                    <option value="Daily">Daily</option>
                    <option value="Monthly">Monthly</option>
                    <option value="Urgent">Urgent</option>
                </select>
                <table id="itemsTable" class="general-table">
                    <thead>
                        <tr>
                            <th></th>
                            <th>Item Code</th>
                            <th>Item Description</th>
                            <th>Item Qty</th>
                            <th>Item Price</th>
                            <th>Item Agent</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr class="item-row">
                            <td></td>
                            <td><input name="itemCode[]" value=""  class="tInput" id="itemCode" readonly="readonly" /> </td>
                            <td><input name="itemDesc[]" value="" class="tInput" id="itemDesc"  tabindex="1"/></td>
                            <td><input name="itemQty[]" value="" class="tInput" id="itemQty" tabindex="2"/></td>
                            <td><input name="itemPrice[]" value="" class="tInput" id="itemPrice" readonly="readonly" /> </td>
                            <td><input name="itemAgent[]" value="" class="tInput" id="itemAgent" readonly="readonly" /></td>
                        </tr>
                    </tbody>
                </table>
                <a href="#" id="addRow" class="button-clean large"><span> <img src="images/icon-plus.png" alt="Add" title="Add Row" /> Add Item</span> </a>&nbsp;&nbsp;&nbsp;

                </div>
                <input type="submit" value="SEND TO THE STORE">
            </form>
            </div>
        </div>

        <div id="container">
            <link href="styles/ticker-style.css" rel="stylesheet" type="text/css" />

            <h1></h1>

            <ul id="js-news" class="js-hidden">

                <li class="news-item">WELCOME&nbsp;&nbsp;&nbsp;<?php echo($_SESSION["username"]); ?>&nbspBranch Team:)</li>
                <li class="news-item"><a href="newItem.php"target="_blank">LIST OF EXPIRY OF 03/2013 </a></li>
                <li class="news-item">&#1575;&#1604;&#1578;&#1610; &#1578;&#1606;&#1578;&#1607;&#1610; &#1576;&#1578;&#1575;&#1585;&#1610;&#1582; 06/2013 avene &#1575;&#1604;&#1585;&#1580;&#1575;&#1569; &#1587;&#1581;&#1576; &#1580;&#1605;&#1610;&#1593; &#1571;&#1589;&#1606;&#1575;&#1601; </li>
                <li class="news-item">REMEMBER THAT URGENT ORDERS MUST BE BEFORE 10 A.M AND  AFTER THAT ONLY DAILY ORDER</li>
                <li class="news-item">URGENT ORDER IS THAT WHICH CONTAIN ITEMS YOU DON'T   HAVE IN BRANCH OR CUSTOMER REQUEST!</li>
                <li class="news-item"><FONT COLOR="RED">NEW ITEM<a href="newdrug.php">&nbsp&nbspProspan Sachet</a></FONT>is available in store now... ORDER IT :)</li>
                <li class="news-item">Further updates to jQuery News Ticker are coming soon!</li>
            </ul>

            <noscript>
                <h2>Latest News</h2>
                <ul id="no-js-news">
                    <li class="news-item">jQuery News Ticker now has support for multiple tickers per page!</li>
                    <li class="news-item">jQuery News Ticker now has support right-to-left languages!</li>
                    <li class="news-item">jQuery News Ticker now has support for loading content via an RSS feed!</li>
                    <li class="news-item">jQuery News Ticker now has an optional fade effect between items!</li>
                    <li class="news-item">New updates have been made to jQuery News Ticker! Check below for more details!</li>
                    <li class="news-item">jQuery News Ticker is now compatible with jQuery 1.3.2! See below for further details and for latest download.</li>
                    <li class="news-item">Further updates to jQuery News Ticker are coming soon, come back soon for more details.</li>
                </ul>
            </noscript>
        </div>
    </body>
</html>

Et le code de la page générant le PDF :

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <style type="text/css">
            HTML, BODY
            {
                font-family: Serif, arabic;
            }
        </style>
            <h1 align="center"><img src=http://orangepharmacy.hostzi.com/418694_259331167468533_385322251_n.jpg></h1>
    </head>

    <body>
        <h3 align="center"><b>Items&nbsp;<?php echo($_POST["Priority"]); ?>&nbsp;Order <br>   Branch: <FONT COLOR="ORANGE"><?php echo($_SESSION["username"]); ?></h3>
        <h6>
            <table id="itemsTable" border="1" width="100%">
                <thead>
                    <tr>
                        <th></th>
                        <th>Item Code</th>
                        <th>Item Description</th>
                        <th> Qty</th>
                        <th> Price</th>
                        <th> Agent</th>
                    </tr>
                </thead>

                <tbody>
                    <?php
                        foreach  ($_POST["itemCode"] as $Key=> $itemCode) {
                            $itemDesc=$_POST["itemDesc"][$Key];
                            $itemPrice=$_POST["itemPrice"][$Key];
                            $itemQty=$_POST["itemQty"][$Key];
                            $itemAgent=$_POST["itemAgent"][$Key];
                            echo "<tr><td></td><td>" . $itemCode . "</td><td>" . $itemDesc .
                                 "</td><td>" . $itemQty . "  </td><td>" . $itemPrice .
                                 "</td><td>" . $itemAgent ."</td></tr>";
                        }
                    ?>
                </tbody>
            </table>
        </h6>

        <script type="text/php">

            if (isset($pdf))
            {
                $font = Font_Metrics::get_font("serif");

                // If verdana isn't available, we'll use sans-serif.

                if (!isset($font)) {
                    Font_Metrics::get_font("serif");
                }

                $size = 6;
                $color = array(0,0,0);
                $text_height = Font_Metrics::get_font_height($font, $size);
                $w = $pdf->get_width();
                $h = $pdf->get_height();

                // ------------------ FOOTER ------------------------------------------

                 if ($PAGE_NUM > 0)
                 {
                     $footer = $pdf->open_object();
                     $y = $h - 3 * $text_height - 24;
                     $text = "Orange Pharmacy   Tel: 5536170 - Fax: 5536171"; //"Page {PAGE_NUM} of  {PAGE_COUNT}"
                     $width = Font_Metrics::get_text_width("Orange Pharmacy    Tel: 5536170 - Fax: 5536171", $font, $size);
                     $pdf->page_text($w / 2 - $width / 2, $y, $text, $font, $size, $color);

                     // Copyright line
                     $y += $text_height * 2;
                     $text = "Madina Monawara - University Street - Hussain - Dabouq - Jabal Amman -  Airport - Dahet Alrasheed - Jubaiha - Yasmeen - Zarqa";

                     // Center the text
                     $width = Font_Metrics::get_text_width($text, $font, $size);
                     $pdf->page_text($w / 2 - $width / 2, $y, $text, $font, $size, $color);

                     // Add a logo
                     $img_w = 0.5 * 72; // 0.5 inches, in points
                     $img_h = 0.5 * 72; // 0.5 inch, in points -- change these as required

                     //$pdf->image("", 0, $y, $img_w, $img_h);
                     $pdf->close_object();
                     $pdf->add_object($footer, "all");
                 }

                 // ------------------ FOOTER END ------------------------------------------
             }
        </script>

        <script type="text/php">
            if ( isset($pdf) ) {
                $font = Font_Metrics::get_font("serif", "bold");
                $pdf->page_text(36, 9, "Page: {PAGE_NUM} of {PAGE_COUNT}",
                                $font, 6, array(0,0,0));
            }
        </script>
    </body>
</html>

J'ai tout essayé pendant un mois, mais rien ne marche. Comment puis-je le réparer ?

1voto

J'ai eu le même problème. J'étais sur le point d'abandonner DOMPDF jusqu'à ce que je mette ce qui suit en haut du html :

<style type="text/css">
    body { font-family: DejaVu Sans, sans-serif; }
</style>

Simple, mais tous les points d'interrogation apparaissant à la place de l'arabe ont disparu.

1voto

Hussein mahyoub Points 31

Pour moi, j'ai utilisé les éléments suivants

 $html=mb_convert_encoding($html, 'UTF-8',
              mb_detect_encoding($html, 'UTF-8, ISO-8859-1', true));
$mpdf = new \Mpdf\Mpdf();
$mpdf->autoScriptToLang = true;
$mpdf->autoLangToFont = true;
$mpdf->WriteHTML($html);
$mpdf->Output();

alors ça marche.

0voto

mohammad asghari Points 198

J'utilise ce packege pour Persian et son travail bien :

    https://github.com/mccarlosen/laravel-mpdf

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X