使用数据库中存储的 unicode 字符生成 PDF 文档

2024-02-02

我想生成带有 unicode 字符的 PDF 文档。 我存储了使用utf8_unicode_ci在数据库中。

这是我的桌子:

language(word_id,english,sinhala,tamil)

这是我生成pdf的代码。但僧伽罗语和泰米尔语却没有出现。

<?php
$word_id=  '2';
require_once '../model/language.php';
$obj=new Word();
$result=($obj->getWord($word_id));

include_once 'common/dompdf/dompdf_config.inc.php';
$date=date("Y/m/d");
$html="Word Details<br/>";
$value=  mysql_fetch_assoc($result);
$html.='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<div style="float:left;width:96%">
     <table border="0" width="100%">

        <tr>
            <th>English Word : </th>
            <td><input type="text" name="enhlish" value="'.$value['english'].'"/></td>
        </tr>
        <tr>

            <td colspan="2"><hr/></td>
        </tr>
        <tr>
            <th>Sinhala Word : </th>
            <td><input type="text" name="sinhala" value="'.$value['sinhala'].'"/></td>
        </tr>
        <tr>
            <th>Tamli Word : </th>
            <td><input type="text" name="tamli" value="'.$value['tamil'].'"/></td>
        </tr>

       </table>';


$dompdf = new DOMPDF();
$dompdf = new DOMPDF(); $html = iconv('UTF-8','Windows-1250',$html);
$dompdf->load_html($html,'UTF-8');
$dompdf->render();
$dompdf->stream("dompdf_out.pdf",
array("Attachment" => false));
exit(0);


 include("foot.inc"); 
?>

这是模型中的代码:

require_once 'connection.php';
class Word{
function getWord($word_id){
        $conn = new Connection();
        $sql = "select * from language where word_id='$word_id'";
        $result = $conn->query($sql);
        return $result;
        }
    }  

谁能告诉我这有什么问题以及我该如何纠正这个问题?


首先是一些一般性建议......

除了将数据存储为 UTF8 之外,您还需要确保数据库连接采用 UTF8 格式。如何执行此操作取决于您的数据访问库。我不太清楚你正在使用什么数据访问库,但我看到一些经典的 mysql 函数。如果这就是您使用的内容,您将在连接到数据库后使用以下内容:

mysql_query("SET NAMES 'utf8'");

您还应该确保 PHP 在 UTF8 中本地工作。这里有两件事是您需要的。首先,dompdf 需要 MBString 扩展才能正确处理多字节字符。其次,您可能想使用以下代码告诉 PHP 将字符数据视为 UTF8:

mb_internal_encoding('UTF-8');

最后,为了在 PDF 中显示 Windows ANSI 字符集之外的字符,您需要支持这些字符的字体。 dompdf v0.6.x 默认包含 DejaVu 字体,但这些字体不支持泰米尔语,因此您必须将字体加载到 dompdf 中。最简单的方法是使用@font-face。您应该仔细阅读dompdf Unicode 操作方法 https://github.com/dompdf/dompdf/wiki/UnicodeHowTo(它有点过时了,但仍然有有用的信息)。然后查看这是问题“dompdf 并设置不同的字体系列”的答案 https://stackoverflow.com/a/24517882/264628.


现在一些具体建议...

1)全程使用UTF8。您正在使用基于 UTF8 的字符集,并且应该将其保留在该字符集中。旧版本的 dompdf(0.5.x 及更早版本)仅支持 Windows-ANSI。较新的版本以 UTF8 原生工作,即使您不使用任何“特殊”字符,UTF8 也是首选文档编码。

2) 不要从 UTF8 转换为较小的编码。我所说的较小编码是指从支持大字符集的 UTF8 等包容性编码转换为 iso-8859-x 或 Windows-12XX 等有限编码。同样,如果目标编码不支持您的字符,您将丢失信息。您将文档字符串从 UTF8 转换为 Windows-1250。该编码是否支持您正在使用的字符?

3) 您的文档应始终指定正确的编码。您在文档元标记中指定文档以 UTF8 编码,因此 dompdf 将假定这是要使用的适当编码。如果您转换为另一种编码,您的字符可能无法正确表示。

4) 如上所述,您需要一种支持文档中使用的字符的字体。您根本不指定任何字体,因此将使用 PDF 核心字体。这些字体仅支持使用 Windows ANSI 编码的文本。请阅读有关显示泰米尔字符的 dompdf 问题跟踪器上的这篇文章:https://github.com/dompdf/dompdf/issues/838#issuecomment-47415806 https://github.com/dompdf/dompdf/issues/838#issuecomment-47415806

考虑到上述内容,您的代码应该看起来更像这样:

include_once 'common/dompdf/dompdf_config.inc.php';
$date=date("Y/m/d");
$value=  mysql_fetch_assoc($result);

$html = '
  <html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <style>
    @font-face {
      font-family: latha;
      font-style: normal;
      font-weight: 400;
      src: url(http://yourfontprovider.com/latha.ttf) format("true-type");
    }
    </style>
  </head>
  <body>
    Word Details<br/>
    <div style="float:left;width:96%">
    <table border="0" width="100%">
      <tr>
        <th>English Word : </th>
        <td><input type="text" name="enhlish" value="'.$value['english'].'"/></td>
      </tr>
      <tr>
        <td colspan="2"><hr/></td>
      </tr>
      <tr>
        <th>Tamli Word : </th>
        <td><input type="text" name="tamli" value="'.$value['tamil'].'" style="font-family: latha, sans-serif;" /></td>
      </tr>
    </table>
  </body>
  </html>
';

$dompdf = new DOMPDF();
$dompdf->load_html($html,'UTF-8');
$dompdf->render();
$dompdf->stream("dompdf_out.pdf", array("Attachment" => false));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用数据库中存储的 unicode 字符生成 PDF 文档 的相关文章

  • 为什么网格项目不居中?

    由于某种原因 两个输入范围使网格中的前两项偏离中心 我假设这是因为它们的影子 DOM 样式 事实真的是这样吗 有谁知道为什么范围使项目 A 和 B 偏离中心 这是一个代码笔 https codepen io tOkyO1 pen QOeKL
  • PHP-docker容器中的环境变量

    我想在我的 docker 容器中显示一个环境变量 PHP 脚本如下所示 我使用 OpenShift 来启动容器 PHP 容器显示 env is 现在我更改容器的 dc 配置 oc env dc envar USER Pieter deplo
  • 付款成功后保存到数据库(paypal)

    我试图找出在客户使用 paypal 支付商品费用后将数据 之前以表单提交 保存到数据库的最佳方法 沿着这个过程的一些事情 1 在实际网站上填写表格 gt 2 登录 Paypal gt 3 立即付款 PayPal gt 4 数据已插入数据库
  • 用于渲染 html 子集的 Django templatetag

    我有一些 html 在本例中是通过 TinyMCE 创建的 我想将其添加到页面中 但是 出于安全原因 我不想只打印用户输入的所有内容 有谁知道模板标签 最好是过滤器 只允许呈现 html 的安全子集 我意识到 Markdown 和其他人就是
  • 可以使用带有 HTML5 播放器的 Amazon S3/CloudFront 流式传输视频吗?

    我想使用 HTML5 视频播放器并流式传输视频 S3 CloudFront 可以实现这一点吗 我了解 Amazon 使用 RTMP 流媒体协议和 HTML5video标签不支持 RTMP 有没有办法用 HTML5 播放器播放视频 Wayne
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • php oracle客户端oci8安装出现什么问题

    我尝试了安装 PHP Oracle 客户端的所有过程 1 我安装了客户端版本8和32位 2 我在php ini中取消了oci的注释 3 重新启动Wamp 4 不确定是否真的安装 但我在 php ini 中得到了引用 5 但仍然无法连接 泰汉
  • 当我使用 session_start() 时,Xampp 7.0.1 Apache 崩溃

    当我在 PHP 中使用 session start 启动会话时 我的 Apache 服务器停止工作 我正在使用 Windows 版 Xampp 7 0 1 我的配置文件如下所示 即使我把它放在文件的第一行 它也不起作用 有人知道如何解决这个
  • Paypal 将钱从一个帐户转移到另一个帐户

    我知道这个建议如何汇款至任何 PayPal 账户 https stackoverflow com questions 1559808 paypal api send money to any paypal account但到目前为止我所尝试
  • 使(文本到图像)图像具有一定的宽度但无限的长度?

    我有下面的代码 可以用大量文本生成图像 我希望该图像的宽度为 700 像素 我还希望它保留字符串所具有的段落结构 该字符串来自 MySQL 数据库 我怎样才能实现这一点 font 2 width imagefontwidth font st
  • php如何生成动态list()?

    根据我的理解 这就是 list 的工作原理 list A1 A2 A3 array B1 B2 B3 所以在帮助下list 我们可以相应地从数组中分配值 这是我的问题 如何生成动态list 1 基于数据库返回结果 我不确定有多少 但我将其全
  • PHP 共享标头而不使用服务器端脚本?

    到目前为止我总是通过 PHP 解决简单的问题 您有一个包含页眉 菜单 页脚和内容字段的网站 每个页面的页眉 菜单和页脚通常是相同的 在没有 PHP 或任何其他服务器端语言的情况下 如何使页眉 菜单和页脚数据仅存在于一个文件中 例如 您不会有
  • CSS - div 与父 div 底部对齐(内联块)

    我知道这个 html 很草率 有一些不必要的额外 div 但无论如何 我无法理解为什么 ID 为 info box right 的 div 与父 div 的底部对齐 您可以看到 文本 与下面的 jsfiddle 示例的底部 有什么想法可以让
  • 为什么这评估为 true

    为什么这评估结果为真
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 不使用控件时,视频元素在 Chrome 中消失

    So I think这是一个浏览器错误 它出现在一个更复杂的设计 网站中 但我已经进行了很好的尝试 简化了我的代码和设计等 并发现了以下内容 嵌入时
  • 在 PowerShell 中显示 Unicode 表情符号

    我想在 PowerShell 中显示像 U 1F4A9 这样的 Unicode 表情符号 我知道这仅在 ISE 控制台内有效 但我不知道如何操作 到目前为止我尝试过的 CharBytes System Text Encoding Unico
  • AngularJS 在指令运行之前通过 AJAX 检索数据

    我正在使用 AngularUIuiMap http angular ui github com directives map实例化谷歌地图的指令 uiMap 指令非常适合处理硬编码数据 mapOptions and myMarkers 但是
  • 通过 Sparkpost 发送 iCal 邀请

    我正在尝试使用 SparkPost 通过电子邮件以附件形式发送日历邀请 但收到电子邮件后邀请不会打开 我使用两个文件 calendarinvite php 来创建邀请 使用 Sendemail php 来发送电子邮件 calendarinv
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航

随机推荐