dompdf导出pdf中文乱码显示问号?
环境:PHP 8.0 框架:ThinkPHP 8 软件包:phpoffice/phpword 、dompdf/dompdf
看了很多教程(包括GitHub的issue、stackoverflow)都没有解决、最终找到解决问题的根本!
背景:用Word模板做转PDF的时候,中文乱码,做法是先用模板替换好变量以后,转成HTML,再转成PDF。
解决方案:
1、先将load_font.php放在项目根目录,跟vendor同级
A、GITHUB下载地址: load_font.php
B、新建文件load_font.php复制下面代码
<?php
// 1. [Required] Point to the composer or dompdf autoloader
require_once "vendor/autoload.php";// 2. [Optional] Set the path to your font directory
// By default dompdf loads fonts to dompdf/lib/fonts
// If you have modified your font directory set this
// variable appropriately.
//$fontDir = "lib/fonts";// *** DO NOT MODIFY BELOW THIS POINT ***use Dompdf\Dompdf;
use Dompdf\CanvasFactory;
use Dompdf\Exception;
use Dompdf\FontMetrics;
use Dompdf\Options;use FontLib\Font;/*** Display command line usage*/
function usage() {echo <<<EODUsage: {$_SERVER["argv"][0]} font_family [n_file [b_file] [i_file] [bi_file]]font_family: the name of the font, e.g. Verdana, 'Times New Roman',monospace, sans-serif. If it equals to "system_fonts", all the system fonts will be installed.n_file: the .ttf or .otf file for the normal, non-bold, non-italicface of the font.{b|i|bi}_file: the files for each of the respective (bold, italic,bold-italic) faces.If the optional b|i|bi files are not specified, load_font.php will search
the directory containing normal font file (n_file) for additional files that
it thinks might be the correct ones (e.g. that end in _Bold or b or B). If
it finds the files they will also be processed. All files will be
automatically copied to the DOMPDF font directory, and afm files will be
generated using php-font-lib (https://github.com/PhenX/php-font-lib).Examples:./load_font.php silkscreen /usr/share/fonts/truetype/slkscr.ttf
./load_font.php 'Times New Roman' /mnt/c_drive/WINDOWS/Fonts/times.ttfEOD;
exit;
}if ( $_SERVER["argc"] < 3 && @$_SERVER["argv"][1] != "system_fonts" ) {usage();
}$dompdf = new Dompdf();
if (isset($fontDir) && realpath($fontDir) !== false) {$dompdf->getOptions()->set('fontDir', $fontDir);
}/*** Installs a new font family* This function maps a font-family name to a font. It tries to locate the* bold, italic, and bold italic versions of the font as well. Once the* files are located, ttf versions of the font are copied to the fonts* directory. Changes to the font lookup table are saved to the cache.** @param Dompdf $dompdf dompdf main object * @param string $fontname the font-family name* @param string $normal the filename of the normal face font subtype* @param string $bold the filename of the bold face font subtype* @param string $italic the filename of the italic face font subtype* @param string $bold_italic the filename of the bold italic face font subtype** @throws Exception*/
function install_font_family($dompdf, $fontname, $normal, $bold = null, $italic = null, $bold_italic = null) {$fontMetrics = $dompdf->getFontMetrics();// Check if the base filename is readableif ( !is_readable($normal) )throw new Exception("Unable to read '$normal'.");$dir = dirname($normal);$basename = basename($normal);$last_dot = strrpos($basename, '.');if ($last_dot !== false) {$file = substr($basename, 0, $last_dot);$ext = strtolower(substr($basename, $last_dot));} else {$file = $basename;$ext = '';}if ( !in_array($ext, array(".ttf", ".otf")) ) {throw new Exception("Unable to process fonts of type '$ext'.");}// Try $file_Bold.$ext etc.$path = "$dir/$file";$patterns = array("bold" => array("_Bold", "b", "B", "bd", "BD"),"italic" => array("_Italic", "i", "I"),"bold_italic" => array("_Bold_Italic", "bi", "BI", "ib", "IB"),);foreach ($patterns as $type => $_patterns) {if ( !isset($$type) || !is_readable($$type) ) {foreach($_patterns as $_pattern) {if ( is_readable("$path$_pattern$ext") ) {$$type = "$path$_pattern$ext";break;}}if ( is_null($$type) )echo ("Unable to find $type face file.\n");}}$fonts = compact("normal", "bold", "italic", "bold_italic");$entry = array();// Copy the files to the font directory.foreach ($fonts as $var => $src) {if ( is_null($src) ) {$entry[$var] = $dompdf->getOptions()->get('fontDir') . '/' . mb_substr(basename($normal), 0, -4);continue;}// Verify that the fonts exist and are readableif ( !is_readable($src) )throw new Exception("Requested font '$src' is not readable");$dest = $dompdf->getOptions()->get('fontDir') . '/' . basename($src);if ( !is_writeable(dirname($dest)) )throw new Exception("Unable to write to destination '$dest'.");echo "Copying $src to $dest...\n";if ( !copy($src, $dest) )throw new Exception("Unable to copy '$src' to '$dest'");$entry_name = mb_substr($dest, 0, -4);echo "Generating Adobe Font Metrics for $entry_name...\n";$font_obj = Font::load($dest);$font_obj->saveAdobeFontMetrics("$entry_name.ufm");$font_obj->close();$entry[$var] = $entry_name;}// Store the fonts in the lookup table$fontMetrics->setFontFamily($fontname, $entry);// Save the changes$fontMetrics->saveFontFamilies();
}// If installing system fonts (may take a long time)
if ( $_SERVER["argv"][1] === "system_fonts" ) {$fontMetrics = $dompdf->getFontMetrics();$files = glob("/usr/share/fonts/truetype/*.ttf") +glob("/usr/share/fonts/truetype/*/*.ttf") +glob("/usr/share/fonts/truetype/*/*/*.ttf") +glob("C:\\Windows\\fonts\\*.ttf") +glob("C:\\WinNT\\fonts\\*.ttf") +glob("/mnt/c_drive/WINDOWS/Fonts/");$fonts = array();foreach ($files as $file) {$font = Font::load($file);$records = $font->getData("name", "records");$type = $fontMetrics->getType($records[2]);$fonts[mb_strtolower($records[1])][$type] = $file;$font->close();}foreach ( $fonts as $family => $files ) {echo " >> Installing '$family'... \n";if ( !isset($files["normal"]) ) {echo "No 'normal' style font file\n";}else {install_font_family($dompdf, $family, @$files["normal"], @$files["bold"], @$files["italic"], @$files["bold_italic"]);echo "Done !\n";}echo "\n";}
}
else {call_user_func_array("install_font_family", array_merge( array($dompdf), array_slice($_SERVER["argv"], 1) ));
}
2、下载配置字体
下载地址:simsun
下载之后将ttf字体文件放到项目根目录,跟load_font、vendor同级,这里我改名改成了SimSun.ttf
执行PHP命令:
php load_font.php "SimSun" SimSun.ttf
显示如下:
php load_font.php "SimSun" SimSun.ttf
Unable to find bold face file.
Unable to find italic face file.
Unable to find bold_italic face file.
Copying SimSun.ttf to D:\phpstudy_pro\WWW\newcrm.com\vendor\dompdf\dompdf/lib/fonts/SimSun.ttf...
Generating Adobe Font Metrics for D:\phpstudy_pro\WWW\newcrm.com\vendor\dompdf\dompdf/lib/fonts/SimSun...
如果php命令有问题,检查一下是不是没有配置环境变量,没有配置的话另行寻找配置教程
3、PHP代码如下:
public function test(){$path = '/storage/contract/' . date('Ymd');$directoryPath = public_path() . $path;if (!file_exists($directoryPath)) {mkdir($directoryPath, 0755, true);}$options = new Options();$options->set('isRemoteEnabled', true);// 重点设置字体$options->setDefaultFont('SimSun');$dompdf = new Dompdf($options);$htmlFile = $directoryPath . '/index.html';$htmlContent = file_get_contents($htmlFile);$dompdf->loadHtml($htmlContent,'UTF-8');$dompdf->setPaper('A4');$dompdf->render();$pdfName = 'index.pdf';$pathToSavePdf = $directoryPath . '/' . $pdfName;$output = $dompdf->output();file_put_contents($pathToSavePdf, $output);}
<!DOCTYPE html>
<html lang="en">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title></title>
</head>
<body>
<div>世界和平
</div>
</body>
</html>
生成PDF后
下面配一个WORD模板(动态变量)->转HTML->生成PDF文件
public function generateContract($param): array{$contract = $this->contractModel->with(['customer','contacts'])->where('id', $param['id'])->find();if (!$contract) {throw new BusinessException(Code::NOT_FOUND, '合同订单不存在');}$contract = $contract->toArray();$file = public_path() . '/static/template/contract/2024.docx';$templateProcessor = new TemplateProcessor($file);$templateProcessor->setValue('customer', $contract['customer_name']);$templateProcessor->setValue('address', $contract['customer_city'] . $contract['customer_address']);$path = '/storage/contract/' . date('Ymd');$directoryPath = public_path() . $path;if (!file_exists($directoryPath)) {mkdir($directoryPath, 0755, true);}$name = $contract['code'] . mt_rand(1000, 9999);$wordName = $name . '.docx';$pathToSave = $directoryPath . '/' . $wordName;$templateProcessor->saveAs($pathToSave);// 转换 Word 文件为 HTML$phpWord = IOFactory::load($pathToSave);$htmlWriter = IOFactory::createWriter($phpWord, 'HTML');$htmlFile = $directoryPath . '/' . $name . '.html';$htmlWriter->save($htmlFile);// 使用 Dompdf 将 HTML 转换为 PDF$options = new Options();$options->set('isRemoteEnabled', true);$options->setDefaultFont('SimSun');$dompdf = new Dompdf($options);$htmlFile = $directoryPath . '/' . $name . '.html';$htmlContent = file_get_contents($htmlFile);$dompdf->loadHtml($htmlContent,'UTF-8');$dompdf->setPaper('A4');$dompdf->render();$pdfName = $name . '.pdf';$pathToSavePdf = $directoryPath . '/' . $pdfName;$output = $dompdf->output();file_put_contents($pathToSavePdf, $output);// 删除临时 HTML 文件unlink($htmlFile);return ['url' => $path . '/' . $pdfName];}
注:doc文件不兼容,用docx模板文件
相关文章:
![](https://i-blog.csdnimg.cn/direct/b8326976cc6543d7a0d260f3291f309e.png)
dompdf导出pdf中文乱码显示问号?
环境:PHP 8.0 框架:ThinkPHP 8 软件包:phpoffice/phpword 、dompdf/dompdf 看了很多教程(包括GitHub的issue、stackoverflow)都没有解决、最终找到解决问题的根本! 背景:用Word模板做转PDF…...
![](https://i-blog.csdnimg.cn/direct/53d0ddd45bdb40908bb91095e525ed7b.png)
韩顺平Java-第二十四章:MYSQL基础篇
一 数据库 1 数据库简单原理图 2 使用命令行窗口连接MYSQL数据库 (1)mysql -h 主机名 -P 端口 -u 用户名 -p密码; (2)登录前,保证服务启动。 3 MySQL三层结构 (1)所谓安装MySQL数…...
![](https://i-blog.csdnimg.cn/direct/28df4526282749f088d6a15e1458aa28.png)
【动态规划算法题记录】最长/最大 问题汇总 (leetcode)
目录 32. 最长有效括号思路代码 300. 最长递增子序列思路代码 674. 最长连续递增序列思路1:双指针代码1:双指针思路2:dp代码2:dp 718. 最长重复子数组思路1:dp代码1:dp思路2:dp优化代码2&#x…...
![](https://i-blog.csdnimg.cn/direct/233982fbf8eb425699afdc2bdb2f71a9.png)
2020 位示图
2020年网络规划设计师上午真题解析36-40_哔哩哔哩_bilibili 假设某计算机的字长为32位,该计算机文件管理系统磁盘空间管理采用位示图(bitmap),记录磁盘的使用情况。若磁盘的容量为300GB,物理块的大小为4MB,…...
![](https://www.ngui.cc/images/no-images.jpg)
富格林:防止陷入黑幕欺诈平台
富格林指出,不少投资者因未做好投资准备而不慎误入黑幕欺诈平台,造成了不必要的亏损。投资者在投资前,需要时刻保持警惕,根据市场行情,作出有依据的投资决定,而不是依赖黑幕欺诈平台的噱头进行投资。建议投…...
![](https://www.ngui.cc/images/no-images.jpg)
Cookie、Session 、token
Cookie 优点: 简单易用: 浏览器自动管理 Cookie 的发送和接收。持久性: 可以设置过期时间,使其可以在浏览器关闭后依旧存在。广泛支持: 所有现代浏览器都支持 Cookie。 缺点: 安全性问题: 存储在客户端,容易被查看和篡改。敏感信息不应直接存储在 Co…...
![](https://www.ngui.cc/images/no-images.jpg)
Json-类型映射使用TypeFactory或者TypeReference
当你需要将JSON数据转换为Java中的复杂类型时,可以使用Jackson库中的TypeFactory或 者TypeReference。这两种方式可以帮助你处理复杂的泛型类型,例如 List<Map<String, Object>> 或者 Map<String, List<Object>>。 示例 1: 使用 TypeFactory 和 T…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
Linux shell编程学习笔记73:sed命令——沧海横流任我行(上)
0 前言 在大数据时代,我们要面对大量数据,有时需要对数据进行替换、删除、新增、选取等特定工作。 在Linux中提供很多数据处理命令,如果我们要以行为单位进行数据处理,可以使用sed。 1 sed 的帮助信息,功能ÿ…...
![](https://i-blog.csdnimg.cn/direct/7f2c90b14d574cc2b22d746137b51026.png)
内网渗透之icmp隧道传输
原理 # 为什么要建立隧道 在实际的网络中,通常会通过各种边界设备软/硬件防火墙、入侵检测系统来检查对外连接的情况,如果发现异常,会对通信进行阻断。 # 什么是隧道 就是一种绕过端口屏蔽的方式,防火墙两端的数据包通过防火墙…...
![](https://i-blog.csdnimg.cn/direct/a41ed43455584c69b0b8f07b82b70c74.png)
【C++ 第十五章】map 和 set 的封装(封装红黑树)
1. map 和 set 的介绍 ⭐map 与 set 分别是STL中的两种序列式容器; 它们是一种树形数据结构的容器,且其的底层构造为一棵红黑树; 而在上一篇文章中提到,其实红黑树本身就是一棵二叉搜索树,是基于二叉搜索树的性质对其增加了平衡的属性来提高其综合性能 ⭐当然也…...
![](https://i-blog.csdnimg.cn/direct/36ceef679cbc433cb22e4608e70eb89a.png)
LIN通讯
目录 1 PLinApi.h 2 TLINFrameEntry 结构体 3 自定义函数getTLINFrameEntry 4 TLINScheduleSlot 结构体 5 自定义函数 getTLINScheduleSlot 6 自定义LIN_SetScheduleInit函数 7 自定义 LIN_StartSchedule 8 发送函数 9 线程接收函数 1 PLinApi.h 这是官方头文件 ///…...
![](https://i-blog.csdnimg.cn/direct/e58653031ebd4f949a05059338983f5f.png)
zabbix常见架构及组件
Zabbix作为一个开源的、功能全面的监控解决方案,广泛应用于各类组织中,以实现对网络、服务器、云服务及应用程序性能的全方位监控。部署架构灵活性高,可支持从小型单一服务器环境到大型分布式系统的多种场景。基本架构通常包括监控端…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
plsql表格怎么显示中文 plsql如何导入表格数据
在Oracle数据库开发中,PL/SQL Developer是一款广泛使用的集成开发环境(IDE),它提供了丰富的功能来帮助开发人员高效地进行数据库开发和管理。在使用PL/SQL Developer时,许多用户会遇到表格显示中文的问题,以…...
![](https://i-blog.csdnimg.cn/direct/54d7c61f0ce84847bc892ba5a00b3b4a.png)
chromedriver下载地址大全(包括124.*后)以及替换exe后仍显示版本不匹配的问题
Chrome for Testing availability CNPM Binaries Mirror 若已经更新了系统环境变量里的chromdriver路径下的exe,仍显示版本不匹配: 则在cmd界面输入 chromedriver 会跳出version verison与刚刚下载好的exe不匹配,则再输入: w…...
![](https://www.ngui.cc/images/no-images.jpg)
拦截器实现 Mybatis Plus 打印含参数的 SQL 语句
1.实现拦截器 package com.sample.common.interceptor;import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.BoundSql; import or…...
![](https://www.ngui.cc/images/no-images.jpg)
Oracle Subprogram即Oracle子程序
Oracle Subprogram,即Oracle子程序,是Oracle数据库中存储的过程(Procedures)和函数(Functions)的统称。这些子程序是存储在数据库中的PL/SQL代码块,用于执行特定的任务或操作。下面详细介绍Orac…...
![](https://i-blog.csdnimg.cn/direct/7177f6e837be4421a6d71da2dd677fcc.png)
自然语言处理实战项目30-基于RoBERTa模型的高精度的评论文本分类实战,详细代码复现可直接运行
大家好,我是微学AI,今天给大家介绍一下自然语言处理实战项目30-基于RoBERTa模型的高精度的评论文本分类实战,详细代码复现可直接运行。RoBERTa模型是由 Facebook AI Research 和 FAIR 的研究人员提出的一种改进版的 BERT 模型。RoBERTa 通过采用更大的训练数据集、动态掩码机…...
![](https://img-blog.csdnimg.cn/img_convert/69403ac1319a5ec55559cf04833b9317.png)
RK3588J正式发布Ubuntu桌面系统,丝滑又便捷!
本文主要介绍瑞芯微RK3588J的Ubuntu系统桌面演示,开发环境如下: U-Boot:U-Boot-2017.09 Kernel:Linux-5.10.160 Ubuntu:Ubuntu20.04.6 LinuxSDK: rk3588-linux5.10-sdk-[版本号] (基于rk3…...
![](https://i-blog.csdnimg.cn/direct/8d671ac25eaf445b988349759c0b6c19.png)
基于GPT-SoVITS的API实现批量克隆声音
目标是将每一段声音通过GPT-SoVITS的API的API进行克隆,因为拼在一起的整个片段处理会造成内存或者缓存溢出。 将目录下的音频文件生成到指定目录下,然后再进行拼接。 通过AI工具箱生成的数据文件是这样的结构,temp目录下是没个片段生成的部分,connect_是正常拼接的音频文件…...
![](https://img-blog.csdnimg.cn/img_convert/850042f80baf18aef706763aea8424ba.png)
详解华为项目管理,附华为高级项目管理内训材料
(一)华为在项目管理中通过有效的沟通、灵活的组织结构、坚持不懈的努力、细致的管理和科学的考核体系,实现了持续的创新和发展。通过引进先进的管理模式,强调以客户需求为导向,华为不仅优化了技术管理和项目研发流程&a…...
![](https://www.ngui.cc/images/no-images.jpg)
Perl(Practical Extraction and Reporting Language)脚本
Perl(Practical Extraction and Reporting Language)是一种非常灵活的脚本语言,主要用于文本处理、系统管理以及快速原型开发等领域。Perl 脚本可以用来执行一系列任务,包括文件操作、网络通信、数据处理等。 下面是一些关于编写…...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fi.loli.net%2F2021%2F10%2F12%2F4kVzZ6mKBNsPdy3.png&pos_id=img-fXOkCyZV-1724216570558)
单例模式详细
文章目录 单例模式介绍八种方式1、饿汉式(静态常量)2、饿汉式(静态代码块)3、懒汉式(线程不安全)4、懒汉式(线程安全,同步方法)5、懒汉式(线程不安全…...
![](https://i-blog.csdnimg.cn/direct/620cb347e3064d71b90cf80c2f69f00b.png#pic_center)
Unity3D 自定义窗口
Unity3D 自定义窗口的实现。 自定义窗口 Unity3D 可以通过编写代码,扩展编辑器的菜单栏和窗口。 简单的功能可以直接一个菜单按钮实现,复杂的功能就需要绘制一个窗口展示更多的信息。 编辑器扩展的脚本,需要放在 Editor 文件夹中。 菜单栏…...
![](https://i-blog.csdnimg.cn/direct/300ebc8d0eb143629bb75e7f63c85e30.png)
dubbo:dubbo整合nacos实现服务注册中心、配置中心(二)
文章目录 0. 引言1. nacos简介及安装2. 注册中心实现3. 配置中心实现4. 源码5. 总结 0. 引言 之前我们讲解的是dubbozookeeper体系来实现微服务框架,但相对zookeeper很多企业在使用nacos, 并且nacos和dubbo都是阿里出品,所以具备一些天生的契合性&#…...
![](https://www.ngui.cc/images/no-images.jpg)
个人博客指路
Pudding 个人博客 比较懒,直接 github page 了,没国内代理加速。 欢迎大佬们,踩一踩 没做留言,觉得很鸡肋。有问题可以在本文底下评论、或者直接邮件...
![](https://i-blog.csdnimg.cn/direct/38702d5bc8b349b39c65fc861fbb2546.png)
【STM32 HAL】多串口printf重定向
【STM32 HAL】多串口printf重定向 前言单串口printf重定向原理实现CubeMX配置Keil5配置 多串口printf重定向 前言 在近期项目中,作者需要 STM32 同时向上位机和手机发送数据,传统的 printf 重定向只能输出到一个串口。本文介绍如何实现 printf 同时输出…...
![](https://img-blog.csdnimg.cn/img_convert/dbd60d15ab53239ab4f2d3c11c52aae6.png)
帆软报表,达梦数据库驱动上传失败
1、按照正常操作新建数据库连接,上传准备好的达梦驱动时,提示如图一需要修改SystemConfig.driverUpload为true才可以。 2、FineDB存储了数据决策系统中除平台属性配置以外的所有信息。详情请参见: FineDB 数据库简介。 3、因此管理员可通过…...
![](https://www.ngui.cc/images/no-images.jpg)
CSS选择器的优先级是如何确定的?有哪些方法可以提高选择器的效率?
CSS选择器的优先级是如何确定的? CSS选择器的优先级决定了当多个选择器同时应用于一个元素时,哪个选择器将最终生效。CSS选择器的优先级由多个因素决定,主要包括以下几个方面: 特殊性(Specificity) 特殊性…...
![](https://www.ngui.cc/images/no-images.jpg)
【MySQL】基础入门(第二篇)
1.MySQL基本数据类型 数值类型 MySQL 支持所有标准 SQL 数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。 关键字INT是INTEGER的同义词,关键字DEC是D…...
![](https://i-blog.csdnimg.cn/direct/ec33eaf8a0b248fc9cea77835cf9f344.jpeg)
勇闯机器学习(第二关-数据集使用)
以下内容,皆为原创,重在无私分享高质量知识,制作实属不易,请点点关注。 好戏开场了~~~(这关涉及到了加载数据集的代码,下一关,教你们安装机器学习库) 一.数据集 这一关的目标 知道数据集被分为训练集和测…...
![](/images/no-images.jpg)
手机上的html编辑器/天津搜索引擎seo
android apk文件的反编译现在有两种形式,一种是转换成smali的字节码格式,一种是专为jar格式的class文件. 先讲第一种. 首先去下一个apktool.它能将apk转译成smali文件并解析出正确的xm格式l的布局文件. 使用时将需要反编译到apk(如weibo.apk)放到解压后的apktool目录下,运行…...
![](/images/no-images.jpg)
织梦网站tag怎么做/站长工具免费
AcWing 直方图中最大的矩形 题目: 有图。转链接题解: 单调栈。学OI二年了才去学这道经典题… …一种朴素做法就是每次以当前矩形的高为高,然后往左右两边找到第一个高度比自己小的矩形(也就是找到了左右边界)ÿ…...
![](/images/no-images.jpg)
做我女朋网站源码/什么是引流推广
总体分为翻译类编程类应用类(占大多数)翻译类标题格式tra-openpgptra-sqlitetra-bash工具类标题格式win-client-putty,Bitvisewin-client-VNCViewerwin-client-tortoiseSVNwin-client-toad,navicat服务类标题格式分守护类与内核类守护类分网络类与系统类…...
![](https://images0.cnblogs.com/i/572167/201405/291032330099022.jpg)
今日头条母公司做网站规划/管理方面的培训课程
TokenStream是一个能在被调用后产生语汇单元流的类,但是 TokenStream 类有两个不同的类型:Tokenizer 类和 TokenFilter 类。这两个类都是从抽象类TokenStream类继承而来。Tokenizer 对象通过Java.io.Reader 对象读取字符创建语汇单元,而Token…...
![](/images/no-images.jpg)
有谁知道知乎网站是谁做的/四川餐饮培训学校排名
region数量的影响: 通常较少的region可使集群运行的更加平稳,官方指出,每个regionServer大约100个regions的时候效果最佳,理由如下: 1)hbase的一个特性MSLAB,它有助于防止堆内存的碎片化&#x…...