当前位置:网站首页>Php Export word method (One MHT)
Php Export word method (One MHT)
2022-07-03 11:57:00 【Ignativs Amor】
Autres articles:
phpwordGénérerwordDocumentation,phpwordUtilisation de
Contexte
Un style personnalisé est nécessaire dans le projet,Possibilité d'exporter le CV de l'utilisateur,Un CV.,Mieux vaut exporterwordOupdfDe,Enfin, l'exportation versword
Recherche
ExporterwordIl y a plusieurs façons,Aujourd'hui, parlons d'abord de l'utilisationMHTEnregistrerwordMéthode
Utiliser les connaissances préalables pour compléter
1. Qu'est - ce queMHT
MHT,Nom completmono html.MHTML.Les fichiers sont aussi appelés agrégatsHTMLDocumentation、WebPages d'archives ou de documents uniques.Une seule page de fichier peut contenir tous les éléments du site(Comprend le texte et les graphiques)Tous enregistrés dans un seul fichier..Cette Encapsulation vous permet de publier l'ensemble du site en une seule ligneMIME (MIME:Adoption Internet Une liste de critères de connexion pour la livraison de ressources multimédias.MIMEContenu contenu de l'objet de notification de type(Comme dans les graphiques、Son ou vidéo)Agrégation deHTMLDocumentation(MHTML)Documentation,Ou envoyer l'ensemble du site comme un e - mail ou une pièce jointe.Internet Explorer 4.0Ce format est pris en charge dans les versions ultérieures.
2. Qu'est - ce queHTML
HTML,Nom completHyperTextMark-upLanguage,C'est - à - dire le langage de balisage hypertexte ou le langage de balisage hypertexte, Est actuellement la langue la plus largement utilisée sur le réseau , C'est aussi la langue principale qui constitue le document de la page Web .ConceptionHTML Le but de la langue est de permettre un lien facile entre le texte ou les graphiques stockés dans un ordinateur et le texte ou les graphiques stockés dans un autre ordinateur ,Pour former un tout organique, .Les gens n'ont pas à se demander si l'information est sur l'ordinateur actuel ou sur d'autres ordinateurs du réseau . Il suffit de cliquer sur une icône au milieu d'un document ,Internet Va immédiatement au contenu associé à cette icône , Et cette information peut être stockée dans un autre ordinateur du réseau . HTMLLe texte est rédigé parHTML.Texte descriptif composé de commandes,HTMLLes commandes peuvent décrire le texte、Graphique、Animation、Le son、Tableaux、Liens, etc..HTML La structure comprend la tête (Head)、Sujet(Body)Deux parties., Où l'en - tête décrit les informations requises par le navigateur , Et le corps contient le contenu spécifique à décrire
3. MHTAvecHTMLLa différence entre
mhtFormat ethtmlC'est très similaire.,C'est juste que...mhtDans le format, Fichiers liés à l'extérieur ,Comme des photos.、Javascript、CSSSerabase64 Effectuer un stockage codé .Donc,,Uniquemht Le fichier enregistre toutes les ressources d'une page web ,Bien sûr.,Comparé àhtml, Il sera plus grand. .
- a *Essentiellement,Les deux.,Ça ne change rien., Est un format intuitif de navigation sur le Web .
- b *Une simple compréhension, La différence entre eux est de préserver ,mht Vous pouvez enregistrer tout ce que vous voyez directement ,html Vous ne pouvez pas tout enregistrer. , Le fichier côté serveur ne peut pas être sauvegardé localement , Besoin de compter sur le réseau ,
4.Compris.word
word C'est très puissant. ,Ça peut s'ouvrir.htmlFichiers formatés, Et peut conserver le formatage , Même si le suffixe est doc, Il reconnaît également l'ouverture normale . C'est pratique pour nous. .
Mais il y a un problème,html .Les images dans le fichier format n'ont qu'une seule adresse , Les vraies images sont conservées ailleurs ,C'est - à - dire,SiHTMLFormat écritdocMoyenne,Alorsdoc L'image ne sera pas incluse . Comment créer des images docEt les documents?? On peut l'utiliser et htmlTrès prochemhtFormat.
5. mht Le format peut être word Vous l'avez identifié?
Faisons l'expérience,Ouvrez n'importe quelle page web, Enregistrer le début comme mhtDocumentation,Puis changez le nom du suffixedoc,RéutiliserwordOuvre.,OK,wordOn peut aussi identifiermhtDocumentation, Et peut afficher des images .
PuisquedocIdentifiablemht, Voici comment mettre l'image dans mhtC'est.Parce quehtml .Les adresses des images dans le Code sont toutes écrites dans imgÉtiquettesrcDans les propriétés,Donc,, Il suffit d'extraire htmlDans le CodesrcValeur de l'attribut, Vous pouvez obtenir l'adresse de l'image .Bien sûr., Il est possible que vous obteniez un chemin relatif ,C'est bon,PlusURLPréfixe, Changez - le en chemin absolu. . Avec l'adresse de la photo ,On peut passer.file_get_content La fonction obtient le contenu spécifique du fichier image ,Puis appelezbase64_encode Fonction pour encoder le contenu du fichier dans base64Codage,Dernière insertion dansmht L'emplacement approprié du document est suffisant.
Utiliser
Étapes1. Rendre d'abord les styles de page
list($oResume,$oIntension,$oWorkexp,$oEduexp,$oAttach) = self::ViewResume($iMedliveId);
$sHtmlContent = view('enterprise.resume.resume_doc',
compact('oResume','oIntension','oWorkexp','oEduexp','oAttach','title','updated_at'))
->render();
return $sHtmlContent;
Étapes2. SelonHTMLAcquisition de codewordContenu du document
Introduction des principes ci - dessus , Encapsulé dans une fonction d'exportation ,Cette fonction peutHTML Le Code est exporté vers un mhtDocumentation,Les paramètres sont:3- Oui.,Dont2 Paramètres optionnels :
- content:À CONVERTIRHTMLCode
- absolutePath: SiHTML Les adresses des images dans le Code sont toutes des chemins relatifs , Donc ce paramètre est HTML Chemin absolu manquant dans le Code .
- isEraseLink:Supprimer ou nonHTML Hyperliens dans le Code
/** * SelonHTMLAcquisition de codewordContenu du document * Créer un mhtDocuments, Cette fonction analyse le contenu du fichier et télécharge les ressources d'image de la page à distance * Cette fonction dépend de la classe MhtFileMaker * Cette fonction analyse imgÉtiquettes,ExtractionsrcValeur de l'attribut pour.Mais,src La valeur de l'attribut doit être entourée de guillemets , Sinon, on ne peut pas extraire * param string $content HTMLContenu * param string $absolutePath Le chemin absolu de la page .SiHTML Le chemin de l'image dans le contenu est relatif , Vous devez remplir ce paramètre , Pour que la fonction se remplisse automatiquement en chemin absolu . Ce paramètre doit enfin être défini comme suit: /Fin * param bool $isEraseLink Supprimer ou nonHTML Liens dans le contenu */
public static function getWordDocument( $content , $absolutePath = "" , $isEraseLink = false )
{
$mht = new MhtFileMaker();
if ($isEraseLink){
$content = preg_replace('/<a\s*.*?\s*>(\s*.*?\s*)<\/a>/i' , '$1' , $content); // Supprimer le lien
}
$images = array();
$files = array();
$matches = array();
// Cet algorithme exige src Les valeurs des attributs suivants doivent être incluses dans des guillemets || preg_match_all('/url\s*\(([^\)]+)\)/i',$content ,$matches )
if ( preg_match_all('/<img.*?src="(.*?)".*?>/is',$content ,$matches)){
$arrPath = $matches[1];
for ( $i=0;$i<count($arrPath);$i++){
$path = $arrPath[$i];
$imgPath = trim( $path );
if ( $imgPath != "" ){
$files[] = $imgPath;
if( substr($imgPath,0,7) == 'http://'){
//Lien absolu,Sans préfixe
}else{
// $imgPath = $absolutePath.$imgPath;
$imgPath = public_path($imgPath);
}
$images[] = $imgPath;
}
}
}
$mht->AddContents("tmp.html",$mht->GetMimeType("tmp.html"),$content);
for ( $i=0;$i<count($images);$i++){
$image = $images[$i];
info($image);
if ( @fopen($image , 'r') ){
$imgcontent = @file_get_contents( $image );
if ( $content )
$mht->AddContents($files[$i],$mht->GetMimeType($image),$imgcontent);
}else{
return ;//echo "file:".$image." not exist!<br />";
}
}
return $mht->GetFile();
}
Étapes3.CatégorieMhtFileMaker
<?php
namespace App\Services;
/** *@author *@version 1.0 */
class MhtFileMaker{
var $config = array();
var $headers = array();
var $headers_exists = array();
var $files = array();
var $boundary;
var $dir_base;
var $page_first;
function MhtFile($config = array()){
}
function SetHeader($header){
$this->headers[] = $header;
$key = strtolower(substr($header, 0, strpos($header, ':')));
$this->headers_exists[$key] = TRUE;
}
function SetFrom($from){
$this->SetHeader("From: $from");
}
function SetSubject($subject){
$this->SetHeader("Subject: $subject");
}
function SetDate($date = NULL, $istimestamp = FALSE){
if ($date == NULL) {
$date = time();
}
if ($istimestamp == TRUE) {
$date = date('D, d M Y H:i:s O', $date);
}
$this->SetHeader("Date: $date");
}
function SetBoundary($boundary = NULL){
if ($boundary == NULL) {
$this->boundary = '--' . strtoupper(md5(mt_rand())) . '_MULTIPART_MIXED';
} else {
$this->boundary = $boundary;
}
}
function SetBaseDir($dir){
$this->dir_base = str_replace("\\", "/", realpath($dir));
}
function SetFirstPage($filename){
$this->page_first = str_replace("\\", "/", realpath("{$this->dir_base}/$filename"));
}
function AutoAddFiles(){
if (!isset($this->page_first)) {
exit ('Not set the first page.');
}
$filepath = str_replace($this->dir_base, '', $this->page_first);
$filepath = 'http://mhtfile' . $filepath;
$this->AddFile($this->page_first, $filepath, NULL);
$this->AddDir($this->dir_base);
}
function AddDir($dir){
$handle_dir = opendir($dir);
while ($filename = readdir($handle_dir)) {
if (($filename!='.') && ($filename!='..') && ("$dir/$filename"!=$this->page_first)) {
if (is_dir("$dir/$filename")) {
$this->AddDir("$dir/$filename");
} elseif (is_file("$dir/$filename")) {
$filepath = str_replace($this->dir_base, '', "$dir/$filename");
$filepath = 'http://mhtfile' . $filepath;
$this->AddFile("$dir/$filename", $filepath, NULL);
}
}
}
closedir($handle_dir);
}
function AddFile($filename, $filepath = NULL, $encoding = NULL){
if ($filepath == NULL) {
$filepath = $filename;
}
$mimetype = $this->GetMimeType($filename);
$filecont = file_get_contents($filename);
$this->AddContents($filepath, $mimetype, $filecont, $encoding);
}
function AddContents($filepath, $mimetype, $filecont, $encoding = NULL){
if ($encoding == NULL) {
$filecont = chunk_split(base64_encode($filecont), 76);
$encoding = 'base64';
}
info($filecont);
$this->files[] = array('filepath' => $filepath,
'mimetype' => $mimetype,
'filecont' => $filecont,
'encoding' => $encoding);
}
function CheckHeaders(){
if (!array_key_exists('date', $this->headers_exists)) {
$this->SetDate(NULL, TRUE);
}
if ($this->boundary == NULL) {
$this->SetBoundary();
}
}
function CheckFiles(){
if (count($this->files) == 0) {
return FALSE;
} else {
return TRUE;
}
}
function GetFile(){
$this->CheckHeaders();
if (!$this->CheckFiles()) {
exit ('No file was added.');
} //www.jb51.net
$contents = implode("\r\n", $this->headers);
$contents .= "\r\n";
$contents .= "MIME-Version: 1.0\r\n";
$contents .= "Content-Type: multipart/related;\r\n";
$contents .= "\tboundary=\"{$this->boundary}\";\r\n";
$contents .= "\ttype=\"" . $this->files[0]['mimetype'] . "\"\r\n";
$contents .= "X-MimeOLE: Produced By Mht File Maker v1.0 beta\r\n";
$contents .= "\r\n";
$contents .= "This is a multi-part message in MIME format.\r\n";
$contents .= "\r\n";
foreach ($this->files as $file) {
$contents .= "--{$this->boundary}\r\n";
$contents .= "Content-Type: $file[mimetype]\r\n";
$contents .= "Content-Transfer-Encoding: $file[encoding]\r\n";
$contents .= "Content-Location: $file[filepath]\r\n";
$contents .= "\r\n";
$contents .= $file['filecont'];
$contents .= "\r\n";
}
$contents .= "--{$this->boundary}--\r\n";
return $contents;
}
function MakeFile($filename){
$contents = $this->GetFile();
$fp = fopen($filename, 'w');
fwrite($fp, $contents);
fclose($fp);
}
function GetMimeType($filename){
$pathinfo = pathinfo($filename);
switch ($pathinfo['extension']) {
case 'htm': $mimetype = 'text/html'; break;
case 'html': $mimetype = 'text/html'; break;
case 'txt': $mimetype = 'text/plain'; break;
case 'cgi': $mimetype = 'text/plain'; break;
case 'php': $mimetype = 'text/plain'; break;
case 'css': $mimetype = 'text/css'; break;
case 'jpg': $mimetype = 'image/jpeg'; break;
case 'jpeg': $mimetype = 'image/jpeg'; break;
case 'jpe': $mimetype = 'image/jpeg'; break;
case 'gif': $mimetype = 'image/gif'; break;
case 'png': $mimetype = 'image/png'; break;
default: $mimetype = 'application/octet-stream'; break;
}
return $mimetype;
}
}
Étapes4.On s'en occupera.mht Enregistrement ou téléchargement de fichiers
Nous avons deux façons d'envoyer des fichiers au client :
.L'un est de générer d'abord un docDocumentation,Et j'ai mis çadoc Enregistrer l'adresse du document , Enfin, demandez au client de télécharger ceci doc.
L'autre est l'envoi direct. htmlDemande,ModifierHTMLAccordheaderSection, Envoyer le contenu du fichier directement au client , Le client peut également télécharger ceci docDocumentation.
Par exemple: Télécharger directement sur le client :
$filename = $oUser->truename?$oUser->truename."Curriculum vitae":"Curriculum vitae";
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: ".strlen($content));
header('Content-Type: application/octet-stream');
$filename=iconv("utf-8","gb2312",$filename);
header('Content-Disposition: attachment; filename='.$filename.'.doc');
header("Pragma:no-cache");
header("Expires:0");
echo $content;
Fin
Il y a d'autres façons.,C'est l'utilisation.PHPwordExtension, Le prochain enregistrement
边栏推荐
- 《剑指offer 03》数组中重复的数字
- During FTP login, the error "530 login incorrect.login failed" is reported
- (数据库提权——Redis)Redis未授权访问漏洞总结
- STL教程9-容器元素深拷贝和浅拷贝问题
- 利用Zabbix动态监控磁盘I/O
- php 获取文件夹下面的文件列表和文件夹列表
- R language uses the aggregate function to calculate the mean value (sum) of dataframe data grouping aggregation without setting na The result of RM calculation. If the group contains the missing value
- uniapp scroll view 解决高度自适应、弹框滚动穿透等问题。
- typeScript
- 基于turtlebot3实现SLAM建图及自主导航仿真
猜你喜欢

Xiaopeng P7 hit the guardrail and the airbag did not pop up. The official responded that the impact strength did not meet the ejection requirements

vulnhub之momentum

Unity3D学习笔记5——创建子Mesh

836. 合并集合(DAY 63)并查集

Vulnhub narak

The world's most popular font editor FontCreator tool

MCDF实验1
![Capturing and sorting out external Fiddler -- Conversation bar and filter [2]](/img/04/e9cc027d753e7049f273d866eefdce.png)
Capturing and sorting out external Fiddler -- Conversation bar and filter [2]

vulnhub之presidential

GCC compilation process and dynamic link library and static link library
随机推荐
Ripper of vulnhub
Vulnhub's Tomato (tomato)
Differences between MySQL Union and union all
PHP导出word方法(一phpword)
vulnhub之tomato(西红柿)
安装electron失败的解决办法
Unity3D学习笔记5——创建子Mesh
Concurrent programming - singleton
Test classification in openstack
Kibana - installation and configuration of kibana
抓包整理外篇fiddler———— 会话栏与过滤器[二]
Master and backup role election strategy in kept
简单工厂和工厂方法模式
R language ggplot2 visualization: gganimate package creates dynamic line graph animation (GIF) and uses transition_ The reveal function displays data step by step along a given dimension in the animat
Web安全总结
vulnhub之raven2
2022年湖南工学院ACM集训第二次周测题解
【学习笔记】dp 状态与转移
win10 上PHP artisan storage:link 出现 symlink (): Protocol error的解决办法
VS2015的下载地址和安装教程