当前位置:网站首页>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
边栏推荐
- During FTP login, the error "530 login incorrect.login failed" is reported
- 同事写了一个责任链模式,bug无数...
- OPenGL 基本知识(根据自己理解整理)
- Ripper of vulnhub
- Test classification in openstack
- Interview experience in summer camp of Central South University in 2022
- DNS multi-point deployment IP anycast+bgp actual combat analysis
- Cacti监控Redis实现过程
- MySQL union和union all区别
- Qt OpenGL 纹理贴图
猜你喜欢
随机推荐
cgroup简介
R language uses grid of gridextra package The array function combines multiple visual images of the lattice package horizontally, and the ncol parameter defines the number of columns of the combined g
Based on MCU, how to realize OTA differential upgrade with zero code and no development?
The uniapp scroll view solves the problems of high adaptability and bullet frame rolling penetration.
MySQL union和union all区别
《剑指offer 03》数组中重复的数字
Solve msvcp120d DLL and msvcr120d DLL missing
Groovy test class and JUnit test
Notes on 32-96 questions of sword finger offer
Kibana~Kibana的安装和配置
Web安全总结
牛牛的组队竞赛
Niuniu's team competition
Excel表格转到Word中,表格不超边缘纸张范围
优化接口性能
R语言使用aggregate函数计算dataframe数据分组聚合的均值(sum)、不设置na.rm计算的结果、如果分组中包含缺失值NA则计算结果也为NA
Capturing and sorting out external Fiddler -- Conversation bar and filter [2]
Is BigDecimal safe to calculate the amount? Look at these five pits~~
OpenStack中的测试分类
vulnhub之cereal

![[learning notes] DP status and transfer](/img/5e/59c64d2fe08b89fba2d7e1e6de2761.png)






