当前位置:网站首页>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
边栏推荐
- 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
- Go language to realize static server
- Keepalived中Master和Backup角色选举策略
- PHP Basics
- R语言使用aggregate函数计算dataframe数据分组聚合的均值(sum)、不设置na.rm计算的结果、如果分组中包含缺失值NA则计算结果也为NA
- Ripper of vulnhub
- Uniapp implementation Click to load more
- DNS multi-point deployment IP anycast+bgp actual combat analysis
- Duplicate numbers in the array of sword finger offer 03
- Hongmeng fourth training
猜你喜欢

vulnhub之presidential

Download address and installation tutorial of vs2015

Unity3d learning notes 5 - create sub mesh

牛牛的组队竞赛

ArcGIS application (XXI) ArcMap method of deleting layer specified features

Visual Studio 2022下载及配置OpenCV4.5.5

Vulnhub's presidential

小鹏 P7 撞护栏安全气囊未弹出,官方回应称撞击力度未达到弹出要求

基于turtlebot3实现SLAM建图及自主导航仿真

MCDF Experiment 1
随机推荐
Kubernetes 三打探针及探针方式
Solve msvcp120d DLL and msvcr120d DLL missing
Excel快速跨表复制粘贴
ArcGIS应用(二十一)Arcmap删除图层指定要素的方法
Uniapp implementation Click to load more
How to mix embedded MCU, arm and DSP?
typeScript
在CoreOS下部署WordPress实例教程
Groovy测试类 和 Junit测试
银泰百货点燃城市“夜经济”
CGroup introduction
The excel table is transferred to word, and the table does not exceed the edge paper range
vulnhub之GeminiInc v2
Nestjs配置服务,配置Cookie和Session
VS2015的下载地址和安装教程
STL教程10-容器共性和使用场景
"Jianzhi offer 04" two-dimensional array search
导师对帮助研究生顺利完成学业提出了20条劝告:第一,不要有度假休息的打算.....
[learning notes] DP status and transfer
During FTP login, the error "530 login incorrect.login failed" is reported