当前位置:网站首页>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
边栏推荐
- 牛牛的组队竞赛
- 同事写了一个责任链模式,bug无数...
- Unity3d learning notes 5 - create sub mesh
- The tutor put forward 20 pieces of advice to help graduate students successfully complete their studies: first, don't plan to take a vacation
- 简单工厂和工厂方法模式
- How to mix embedded MCU, arm and DSP?
- Solution à la défaillance de l'installation d'Electron
- Nestjs configuration service, configuring cookies and sessions
- win10 上PHP artisan storage:link 出现 symlink (): Protocol error的解决办法
- Kubernetes 三打探针及探针方式
猜你喜欢
"Jianzhi offer 04" two-dimensional array search
vulnhub之pyexp
How to get started embedded future development direction of embedded
【mysql官方文档】死锁
Hongmeng third training (project training)
CGroup introduction
Download address and installation tutorial of vs2015
Xml的(DTD,xml解析,xml建模)
STL教程9-容器元素深拷贝和浅拷贝问题
同事写了一个责任链模式,bug无数...
随机推荐
This article explains the complex relationship between MCU, arm, MCU, DSP, FPGA and embedded system
小鹏 P7 撞护栏安全气囊未弹出,官方回应称撞击力度未达到弹出要求
Unity3d learning notes 5 - create sub mesh
Vulnhub's Tomato (tomato)
The uniapp scroll view solves the problems of high adaptability and bullet frame rolling penetration.
安装electron失败的解决办法
vulnhub之momentum
Optimize interface performance
Keepalived中Master和Backup角色选举策略
剑指offer专项32-96题做题笔记
量化计算调研
Simple factory and factory method mode
Web安全总结
R语言使用data.table包进行数据聚合统计计算滑动窗口统计值(Window Statistics)、计算滑动分组中位数(median)并合并生成的统计数据到原数据集中
Excel表格转到Word中,表格不超边缘纸张范围
Ripper of vulnhub
R language uses grid of gridextra package The array function combines multiple visual images of the ggplot2 package horizontally, and the ncol parameter defines the number of columns of the combined g
PHP导出word方法(一mht)
vulnhub之pyexp
PHP Basics