从 HTML 生成带有 <SELECT> 表单字段的 PDF 总是显示多行下拉菜单

Posted

技术标签:

【中文标题】从 HTML 生成带有 <SELECT> 表单字段的 PDF 总是显示多行下拉菜单【英文标题】:generating PDF with <SELECT> form field from HTML displays always multiline dropdown 【发布时间】:2019-12-16 16:00:40 【问题描述】:

我使用的是 mPDF 7.x 版,我需要生成带有可填写表格的 PDF。一切正常,除了一件事 - 下拉列表 (SELECT) 始终显示为“多”行 - 我无法创建具有如下下拉列表的文档:https://osuch.com/formtools/exp/mpdfexp/project_mpdf/pdfb04_basic_active_form.php

我的代码:

<?php

require_once 'vendor/autoload.php';

        $mpdf= new \Mpdf\Mpdf();

        //==============================================================

        $html = '
        <style>
        body
        
            padding-bottom:0px;
            margin-bottom:0px;
            margin-top:0px;
            padding-top:0px;
        
        h2
        

            padding-bottom:0px;
            margin-bottom:0px;
            margin-top:5px;
            padding-top:0px;
            font-family: Arial;
            font-size:200%;
            color:green;
        
        p
        

            padding-bottom:0px;
            margin-bottom:5px;
            margin-top:10px;
            padding-top:5px;
            font-family: Arial;
            font-size:100%;
            font-weight:normal;

        
        .inp
        

            padding-bottom:0px;
            margin-bottom:0px;
            margin-top:5px;
            padding-top:0px;
            font-family: Arial;
            font-size:100%;
            width:100%;
            border-bottom:1px solid #000000;
            background-color:#dedede;
        
        fieldset
        

            padding-bottom:0px;
            margin-bottom:0px;
            margin-top:5px;
            padding-top:0px;
            border: 1px solid #000000;
            padding:10px;
            font-family: Arial;
            font-size:150%;
            font-weight:bold;
            margin-top:10px;
        

        textarea
        
            font-family: Arial;
            font-size:100%;
            border:2px solid #000000;
            background-color: #dadada;
            background-color:#dedede;
        

        </style>

        <body>
        <h2>Basic PDF Active Form</h2>
        <form action="#" method="post">
        <fieldset>Personal Information
        <p>Name:</p>
        <div class="inp"><input type="text" size="200" name="inputname" value="" title="Enter your name"/> </div>
        <p>Company:</p>
        <div class="inp"><input type="text" size="200" name="inputco" value="" title="Company name"/> </div>
        <p>Email:</p>
        <div class="inp"><input type="text" size="200" name="inputemail" value="" title="Email address"/> </div>
        <p>Mobile:</p>
        <div class="inp"><input type="text" size="200" name="inputmobile" value="" title="Mobile telephone number"/> </div>
        </fieldset>

        <fieldset>Additional Information

        <p>How many languages do you speak?</p> 

        <input type="radio" name="num_languages" value="1" checked="checked" > One      
        <input type="radio" name="num_languages" value="2" > Two      
        <input type="radio" name="num_languages" value="3" > Three      
        <input type="radio" name="num_languages" value="4" > Four      
        <input type="radio" name="num_languages" value="5" > Five +      

        <br /><br />


        <input type="checkbox" name="email" value="email_subscrbe" checked="checked" /> Please send me regular information by e-mail<br>
        <input type="checkbox" name="subscribe" value="newsletter_subscribe" /> Please subscribe me to the Newsletter

           <p>Seminar Information</p> 
          <label for="reg_seminar">Seminar</label>
          <select size="1" name="reg_seminar" id="reg_seminar">
            <option value="Guitar for Beginners" >Guitar for Beginners</option>
            <option value="javascript Today" >JavaScript Today</option>
            <option value="Time is on our side" >Time is on our side</option>
          </select>

          <label for="reg_location">Location</label>
          <select size="0" name="reg_location" id="reg_location">
            <option value="New York" >New York</option>
            <option value="Paris" >Paris</option>
            <option value="Munich" >Munich</option>
            <option value="Gartmorn" >Gartmorn</option>
          </select>

          <p>Payment Type</p>
           <label><input type="radio" name="regpay" id="reg_payment01" value="Voucher" >
        Voucher</label>

           <label><input type="radio" name="regpay" id="reg_payment02" value="Cash" >
         Cash</label>

           <label><input type="radio" name="regpay" id="reg_payment03" value="CreditCard" >
         Credit Card</label>

           <label><input type="radio" name="regpay" id="reg_payment04" value="BitCoin" >
         BitCoin</label>

          <p>Comments:</p>
        <textarea name="textareafield"  rows="4" cols="80" wrap="virtual"></textarea>
          </fieldset>

        </form>
        ';
        //==============================================================
    $mpdf->useActiveForms = true;
    /*
        $mpdf->formUseZapD = false;
        $mpdf->form_border_color = '0.6 0.6 0.72';
        $mpdf->form_button_border_width = '2';
        $mpdf->form_button_border_style = 'S';
        $mpdf->form_radio_color = '0.0 0.0 0.4';    // radio and checkbox
    $mpdf->form_radio_background_color = '0.9 0.9 0.9';
     */
        $mpdf->WriteHTML($html);
        // OUTPUT
        $mpdf->Output('test.pdf'); exit;

        //==============================================================
?>

我的输出:

mpdf 由 composer 加载,最新版本。代码取自随 mpdf 分发的样本。 “缺少”HTML,HEADER 标签对结果没有影响。

我的输出 PDF 没有反映任何 CSS 格式、“大小”属性、样式,什么都没有。

以前有人遇到过这个问题吗? (并找到了解决方案?)

任何建议将不胜感激。

【问题讨论】:

我首先尝试包含&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;标签并将样式放在&lt;head&gt;&lt;/head&gt;中。 无法重现,Chrome 79 Windows 8.1。我将选择视为下拉列表而不是列表 @FunkFortyNiner 感谢您的提示,但正如我在帖子中提到的,这对输出没有影响。我已经试过了。 @ZohirSalak 忘了提及 - 我在 Linux(debian 9)、chrome 77 上运行。但它也没有效果 - 如果我将生成的 PDF 保存到文件然后使用浏览器打开它(使用 PDF 插件)或 PDF 阅读器(Linux 上的 Evince,Windows 上的 Adob​​e Acrobat),SELECT 始终显示为列表。但是感谢您的复制,它指向某种本地问题,然后是 mpdf 库中的错误。 该死,我确信那会有所作为。好吧,我可以在这里添加的只是查看 HTML 源代码的外观以及浏览器中的开发人员工具。我很难说为什么它会失败,因为我之前没有使用外部库完成 CSS。 【参考方案1】:

知道了 :) 似乎我不是第一个,也是唯一一个遇到同样问题的人。 这是帮助我的解决方案(解决方法): https://github.com/mpdf/mpdf/issues/852#issuecomment-546851163

【讨论】:

以上是关于从 HTML 生成带有 <SELECT> 表单字段的 PDF 总是显示多行下拉菜单的主要内容,如果未能解决你的问题,请参考以下文章

html select 怎么动态生成option

<Select> 带有无限滚动下拉菜单的小部件

多选模式下带有 md-select 的 md-chips

使用带有自定义引导样式的 Django 模板放置 <select> 字段

生成带有和不带有 HTML 标签的相同文本?

如何从 JavaScript 更改 <select> 值