Nettoyage-eni.ps1: permet de nettoyer un page HTML avant de l'importer dans LibreOffice

De Pegasus45

Lorsque j'achète un livre numérique sur un site d'un éditeur bien connue, le livre n'est pas téléchargeable en entier. Il n'est que consultable en online. L'idée est d'enregistrer chaque page sur son disque et de l'importer dans LibreOffice. Malheureusement, la page est remplie de milliers de lignes de javascript qui font planter l'import. Ce script permet de nettoyer tous ces lignes de script et de n'avoir que du code html basique.

L'arborescence que je crée est :

livre\01 - chapitre01\01.html
livre\01 - chapitre01\02.html
livre\01 - chapitre01\03.html
livre\02 - chapitre02\01.html
livre\02 - chapitre02\02.html
livre\03 - chapitre03\01.html
livre\03 - chapitre03\02.html
livre\03 - chapitre03\03.html
livre\03 - chapitre03\04.html
etc.

Pour l'utiliser, il suffit d'indiquer le chemin d'un des chapitres dans la variable $path.

Une fois exécutée, un nouveau fichier html apparaît dans le $path: chapitre.html. Ensuite, dans le Writer de LibreOffice, il suffit de faire "Insertion", "Fichier" et d'importer ce chapitre.html. Il reste à retravailler un peu les tableaux, quelques images et la mise en page mais l'essentiel du boulot est déjà fait par l'import.


Powershell nettoyage-eni.ps1
# nettoyage de fichiers html ENI
# Version 3
clear
$path = "C:\Temp\Eni\livre\01 - chapitre01"
$liste = Get-ChildItem $path *.htm
$newFichier = "chapitre.html"
if (Test-Path $path\$newFichier) {
	Remove-Item $path\$newFichier
}
	
foreach ($fichier in $liste) {
	Write-Host "Je traite le fichier $fichier"
	
	if ($fichier.Name -eq "01.htm") {
		$chapitre = "<h1>Chapitre " + $path.Split("\")[-1] + "</h1>"
		Add-Content $path\$newFichier $chapitre
	}
	$contenu = Get-Content $path\$fichier
	foreach ($ligne in $contenu) {
	if ($ligne.Contains("<h1 class=`"title`">")) {
		$bActif = 1
		}
		
		if (($ligne.Contains("//<![CDATA[")) -and ($bActif -eq 1)) {
			$bActif = 0
		}
		
		if ($bActif -eq 1) {
			$ligne = $ligne.Replace(" class=`"title`"","")
			$ligne = $ligne.Replace("img class=`"imagedata`"","img")
			$ligne = $ligne.Replace("img class=`"inlineobject`"","img style=`"display:inline; padding:3px 3px 3px 3px; margin:5px 4px 5px 4px; vertical-align:middle;`"")
			$ligne = $ligne.Replace("p class=`"defaut`"","p style=`"font-family:verdana; font-size:9pt; margin-left:10px;`"")
			$ligne = $ligne.Replace("p class=`"para`"","p style=`"font-family:verdana; font-size:9pt; margin-left:10px;`"")
			$ligne = $ligne.Replace("p class=`"paralistitem`"","p style=`"color:Black;`"")
			$ligne = $ligne.Replace("p class=`"ex`"","p style=`"font-size:9pt; font-style:italic; text-decoration:underline;`"")
			$ligne = $ligne.Replace("p class=`"lib`"","p style=`"font-size:9pt; font-style:italic;`"")
			$ligne = $ligne.Replace("p class=`"ps`"","p style=`"font-size:9pt;`"")
			$ligne = $ligne.Replace("p class=`"paralistitempal`"","p")
			$ligne = $ligne.Replace("p class=`"liste1`"","p style=`"margin:5px 0px 5px 0px; font-family:verdana; font-size:9pt;`"")
			$ligne = $ligne.Replace("p class=`"remarque`"","p style=`"display:block; margin-left:10px; margin-top:0px; text-align:justify; font-size:9pt;`"")
			$ligne = $ligne.Replace("p class=`"remarque_suite`"","p style=`"font-style:normal; font-family:verdana; font-size:9pt;`"")
			$ligne = $ligne.Replace("p class=`"commentaire`"","p style=`"font-style:italic; font-size:9pt; display:table; width:95%; margin:10px 0px 10px 10px; text-align:center;`"")
			$ligne = $ligne.Replace("p class=`"tableau_texte`"","p")
			$ligne = $ligne.Replace("p class=`"tableau_titre`"","p style=`"text-align:center; font-weight:bold;`"")
			$ligne = $ligne.Replace("p class=`"liste2`"","p style=`"list-style-type:square;`"")
			$ligne = $ligne.Replace("p class=`"tableau_texte_centre`"","p style=`"text-align:center;`"")
			$ligne = $ligne.Replace("p class=`"p_url`"","p style=`"font-family:verdana; font-size:9pt; font-style:italic;`"")
			$ligne = $ligne.Replace("p class=`"legende`"","p style=`"text-align:center; font-style:italic;`"")
			$ligne = $ligne.Replace("p class=`"titre_niv0`"","p style=`"font-size:12pt; color: #800000; font-weight:300; margin-left:10px; margin-top:20px;`"")
			$ligne = $ligne.Replace("p class=`"enum_obj`"","p style=`"background-image:url('../images/cepuceobj.gif'); background-repeat:no-repeat;background-position:0px 3px; padding-left:20px; margin-left:20px;`"")
			$ligne = $ligne.Replace("p class=`"question`"","p style=`"margin:10px 10px 10px 50px; font-size:9pt;font-style:normal; text-align:left;`"")
			$ligne = $ligne.Replace("p class=`"question_rep`"","p style=`"margin:10px 10px 10px 50px; font-size:9pt; font-style:normal; text-align:left;`"")
			$ligne = $ligne.Replace("p class=`"reponse`"","p style=`"margin:10px 10px 10px 50px; font-size:9pt; font-style:italic; text-align:left;`"")
			$ligne = $ligne.Replace("p class=`"titre_tp`"","p style=`"font-size:12pt; color: #800000; font-weight:300; margin-left:5px; margin-top:20px;`"")
			$ligne = $ligne.Replace("p class=`"para_liste1`"","p style=`"margin:5px 0px 5px 0px; font-family:verdana; font-size:9pt;`"")
			$ligne = $ligne.Replace("p class=`"para_liste2`"","p style=`"margin:5px 0px 5px 0px; font-family:verdana; font-size:9pt;`"")
			$ligne = $ligne.Replace("p class=`"reponse_liste1`"","p style=`"margin:10px 10px 10px 50px; font-size:9pt; font-style:italic; text-align:left;`"")
			$ligne = $ligne.Replace("p class=`"definition`"","p style=`"font-family:verdana; font-size:9pt;`"")
			$ligne = $ligne.Replace("p class=`"ple`"","p")
			$ligne = $ligne.Replace("p class=`"`"","p")
			$ligne = $ligne.Replace("p class=`"p_res`"","p style=`"font-family:verdana; font-size:9pt;`"")
			$ligne = $ligne.Replace("p class=`"int`"","p style=`"font-style:italic; font-size:9pt;`"")
			$ligne = $ligne.Replace("p class=`"pal`"","p style=`"font-size:9pt; margin-top:10px; margin-bottom:15px;`"")
			$ligne = $ligne.Replace("p class=`"point_cle`"","p style=`"display:inline; font-size:9pt; margin:10px 0 0px 20px; border-bottom:solid 2px gray; color: #800000; font-weight:bold; text-align:left;`"")
			$ligne = $ligne.Replace("p class=`"enum_cle`"","p style=`"background-image:url('../images/cepucecle.gif'); background-repeat:no-repeat; background-position:0px 3px; padding-left:20px; margin-left:20px;`"")
			$ligne = $ligne.Replace("p class=`"q`"","p style=`"margin:10px 10px 10px 40px; font-size:9pt; font-style:normal; text-align:left;`"")
			$ligne = $ligne.Replace("<p class=`"page`"></p>","<p></p>")
			$ligne = $ligne.Replace("div class=`"itemizedlist`"","div style=`"margin-left:10px; font-size:9pt; color:Black;`"")
			$ligne = $ligne.Replace("div class=`"sect2`"","div")
			$ligne = $ligne.Replace("div class=`"sect3`"","div")
			$ligne = $ligne.Replace("div class=`"image`"","div")
			$ligne = $ligne.Replace("div class=`"remark`"","div style=`"font-family:verdana; text-align:justify; font-size:9pt; border-top:solid 2px silver; border-bottom:solid 2px silver; padding:10px 5px 15px 0px; margin:10px 10px 10px 10px;`"")
			$ligne = $ligne.Replace("div class=`"remarkimg`"","div style=`"font-family:verdana; text-align:justify; font-size:9pt; text-align:left; float:left; vertical-align:top;`"")
			$ligne = $ligne.Replace("div class=`"mediaobject`"","div style=`"width:auto; padding:5px 5px 5px 5px; text-align:center;`"")
			$ligne = $ligne.Replace("div class=`"textobject`"","div style=`"text-align:center; font-style:italic;`"")
			$ligne = $ligne.Replace("div class=`"orderedlist`"","div style=`"margin-left:-25px; font-size:9pt; color:Black;`"")
			$ligne = $ligne.Replace("div class=`"epigraph`"","div style=`"margin-left:0px;`"")
			$ligne = $ligne.Replace("div class=`"para`"","div style=`"font-family:verdana; font-size:9pt; margin-left:10px;`"")
			$ligne = $ligne.Replace("div class=`"epigraphimg`"","div style=`"text-align:left; float:left; vertical-align:top; margin-left:0px; margin-right:5px; margin-bottom:0px; margin-top:-5px; padding-right:5px;`"")
			$ligne = $ligne.Replace("div class=`"inlineobject`"","div style=`"display:inline; padding:3px 3px 3px 3px; margin:5px 3px 5px 3px; vertical-align:middle;`"")
			$ligne = $ligne.Replace("div class=`"divliste1`"","div style=`"margin-left:10px; margin-top:0px; width:98%;`"")
			$ligne = $ligne.Replace("div class=`"note`"","div style=`"display:block; font-size:10pt; font-style:normal;width:98%; height:auto; font-family:verdana;margin:10px 10px 10px 10px; border-top:solid 2px silver; border-bottom:solid 2px silver;`"")
			$ligne = $ligne.Replace("div class=`"divinline`"","div style=`"margin-left:0px;`"")
			$ligne = $ligne.Replace("div class=`"manip`"","div style=`"display:table; padding:0px 10px 0px 15px; margin:10px 0px 10px 5px; font-size:10pt; font-style:normal; width:94%; font-family:verdana;`"")
			$ligne = $ligne.Replace("div class=`"table`"","div style=`"display:block; width:99%; margin:5px 5px 5px 10px; float:left;`"")
			$ligne = $ligne.Replace("div class=`"divliste2`"","div style=`"margin-left:20px; text-align:justify; width:97%;`"")
			$ligne = $ligne.Replace("div class=`"programlisting`"","div style=`"border:solid 1px black; padding:5px 5px 5px 5px; margin:10px 0 10px 10px; font-size:9pt; width:99%; float:left; display:block;`"")
			$ligne = $ligne.Replace("div class=`"divreponse_liste1`"","div style=`"margin-left:10px; margin-top:0px; width:98%;`"")
			$ligne = $ligne.Replace("div class=`"manip_suite`"","div style=`"display:block; padding:0px 10px 5px 10px; margin:5px 5px 10px 0px; font-size:10pt; font-style:normal; width:92%; text-align:left;`"")
			$ligne = $ligne.Replace("div class=`"tableau_texte`"","div style=`"`"")
			$ligne = $ligne.Replace("div class=`"liste1`"","div style=`"margin:5px 0px 5px 0px;`"")
			$ligne = $ligne.Replace("div class=`"remarque`"","div style=`"display:block; margin-left:10px; margin-top:0px;`"")
			$ligne = $ligne.Replace("div class=`"sect2 manip_suite`"","div style=`"text-align:left; width:92%; font-style:normal; font-size:10pt;`"")
			$ligne = $ligne.Replace("div class=`"sect2 quest`"","div style=`"margin-left:10px; font-size:9pt; font-style:normal;`"")
			$ligne = $ligne.Replace("div class=`"sect2 result`"","div")
			$ligne = $ligne.Replace("div class=`"sect2 rep`"","div")
			$ligne = $ligne.Replace("div class=`"qtext`"","div style=`"margin:10px 10px 10px 40px; font-size:9pt; font-style:normal; text-align:left;`"")
			$ligne = $ligne.Replace("div class=`"step`"","div style=`"display:table-row; margin-left:0px; margin-right:10px; margin-bottom:5px; font-size:9pt; width:88%;`"")
			$ligne = $ligne.Replace("div class=`"stepNum`"","div style=`"display:table-cell; width:20px; padding-right:5px; text-align:right; float:left; margin-top:10px;`"")
			$ligne = $ligne.Replace("div class=`"steptext`"","div style=`"display:table-cell; text-align:left; color: black; margin-left:5px; margin-right:5px; float:left; width:88%; margin-top:10px;`"")
			$ligne = $ligne.Replace("div class=`"pal`"","div style=`"font-size:9pt;`"")
			$ligne = $ligne.Replace("div class=`"divliste3`"","div style=`"margin-left:30px; width:96%;`"")
			$ligne = $ligne.Replace("ul class=`"`"","ul")
			$ligne = $ligne.Replace("ul class=`"liste1`"","ul style=`"list-style-type:disc;`"")
			$ligne = $ligne.Replace("ul class=`"reponse_liste1`"","ul style=`"list-style-type:disc;`"")
			$ligne = $ligne.Replace("ul class=`"liste2`"","ul style=`"list-style-type:square;`"")
			$ligne = $ligne.Replace("ul class=`"manip_suite`"","ul style=`"display:block; padding:0px 10px 5px 10px; margin:5px 5px 10px 0px; font-size:10pt; font-style:normal; width:92%; text-align:left;`"")
			$ligne = $ligne.Replace("li class=`"listitem`"","li style=`"margin:5px 0 5px 0;`"")
			$ligne = $ligne.Replace("li class=`"liste1`"","li style=`"list-style-type:disc;`"")
			$ligne = $ligne.Replace("li class=`"liste2`"","li style=`"list-style-type:square;`"")
			$ligne = $ligne.Replace("li class=`"reponse_liste1`"","li style=`"list-style-type:square;`"")
			$ligne = $ligne.Replace("li class=`"manip_suite`"","li style=`"display:block; padding:0px 10px 5px 10px; margin:5px 5px 10px 0px; font-size:10pt; font-style:normal; width:92%; text-align:left;`"")
			$ligne = $ligne.Replace("ol class=`"liste1`"","ol style=`"list-style-type:disc;`"")
			$ligne = $ligne.Replace("span class=`"itl`"","span style=`"font-style:italic; font-size:9pt;`"")
			$ligne = $ligne.Replace("span class=`"bold`"","span style=`"font-weight:bold; font-size:9pt;`"")
			$ligne = $ligne.Replace("span class=`"italic`"","span style=`"font-style:italic;`"")
			$ligne = $ligne.Replace("span class=`"code`"","span style=`"font-family:Courier New;`"")
			$ligne = $ligne.Replace("span class=`"int`"","span style=`"font-style:italic; font-size:9pt;`"")
			$ligne = $ligne.Replace("span class=`"bridgehead`"","span style=`"font-size:9pt; margin:10px 0 0px 10px; text-decoration:underline; color: #800000; font-weight:bold;`"")
			$ligne = $ligne.Replace("span class=`"bridgeheadb1`"","span style=`"font-size:8pt; margin:10px 0 0px 10px; text-decoration:underline; color: black; font-weight:bold;`"")
			$ligne = $ligne.Replace("span class=`"sl`"","span style=`"font-size:9pt; text-decoration:underline;`"")
			$ligne = $ligne.Replace("span class=`"maniplogo`"","span style=`"background-image:url('../images/icn_bullet.gif'); background-repeat:no-repeat;background-position:left 5px; margin-left:-15px; width:15px; display:inline-block;`"")
			$ligne = $ligne.Replace("span class=`"courier`"","span style=`"font-family:Courier New; font-size:10pt;`"")
			$ligne = $ligne.Replace("span class=`"titre_exemple`"","span style=`"font-style:italic; font-size:9pt; text-decoration:underline;`"")
			$ligne = $ligne.Replace("span class=`"bridgehead_niv4`"","span style=`"display: inline-block; font-size:10pt; font-weight:bold; color: #800000; text-align:left; text-decoration:underline;`"")
			$ligne = $ligne.Replace("span class=`"courier_gras_11`"","span style=`"font-family:Courier New; font-size:10pt; font-weight:bold;`"")
			$ligne = $ligne.Replace("span class=`"courier_gras`"","span style=`"font-family:Courier New; font-size:10pt; font-weight:bold;`"")
			$ligne = $ligne.Replace("span class=`"courier_gras_9`"","span style=`"font-family:Courier New; font-size:9pt; font-weight:bold;`"")
			$ligne = $ligne.Replace("span class=`"courier_italique`"","span style=`"font-family:Courier New; font-size:10pt; text-decoration:underline;;`"")
			$ligne = $ligne.Replace("span class=`"exemple`"","span style=`"font-style:italic; font-size:9pt;`"")
			$ligne = $ligne.Replace("span class=`"num_question`"","span style=`"width:20px; text-align:right; font-size:9pt; font-weight:bold; display:inline-block; float:left;`"")
			$ligne = $ligne.Replace("span class=`"num_tp`"","span style=`"width:20px; text-align:right; font-size:9pt; font-weight:bold; display:inline-block; float:left;`"")
			$ligne = $ligne.Replace("span class=`"bridgehead_niv5`"","span style=`"display:block; font-size:10pt; font-weight:bold; margin:10px 0 0px 0px; color: #800000; text-align:left;`"")
			$ligne = $ligne.Replace("span class=`"courier11`"","span style=`"font-family:Courier New; font-size:9pt;`"")
			$ligne = $ligne.Replace("span class=`"courier9`"","span style=`"font-family:Courier New; font-size:9pt;`"")
			$ligne = $ligne.Replace("span class=`"italique_souligne`"","span style=`"font-style:italic; text-decoration:underline;`"")
			$ligne = $ligne.Replace("span class=`"res`"","span style=`"font-family:verdana; font-size:9pt;`"")
			$ligne = $ligne.Replace("span class=`"cara9`"","span style=`"font-family:verdana; font-size:9pt;`"")
			$ligne = $ligne.Replace("span class=`"bridgehead_niv6`"","span style=`"display:block; font-size:9pt; font-weight:bold; margin:10px 0 0px 0px; color: #800000;text-align:left;`"")
			$ligne = $ligne.Replace("span class=`"ex`"","span style=`"font-size:9pt; font-style:italic; text-decoration:underline;`"")
			$ligne = $ligne.Replace("span class=`"lib`"","span style=`"font-size:9pt; font-style:italic;`"")
			$ligne = $ligne.Replace("span class=`"productnumber`"","span style=`"width:20px; text-align:right; font-size:9pt; font-weight:bold; display:inline-block; float:left;`"")
			$ligne = $ligne.Replace("span class=`"arial`"","span style=`"font-family:arial;`"")
			$ligne = $ligne.Replace("pre class=`"programlisting`"","pre style=`"border:solid 1px black; padding:5px 5px 5px 5px; font-size:9pt;`"")
			$ligne = $ligne.Replace("pre class=`"literallayout`"","pre style=`"font-family:courier; font-size:9pt; margin-left:10px;`"")
			$ligne = $ligne.Replace("table class=`"informaltable`"","table style=`"border:solid 1px gray; table-layout:auto; margin:0 10px 0 10px; border-collapse:collapse; font-size:9pt;`"")
			$ligne = $ligne.Replace("table class=`"informaltable1`"","table style=`"border:solid 0px black;`"")
			$ligne = $ligne.Replace("tbody class=`"tbody`"","tbody")
			$ligne = $ligne.Replace("tr class=`"RowBody`"","tr")
			$ligne = $ligne.Replace("td class=`"entry border`"","td style=`"border-left:solid 1px black; border-right:solid 1px black; border-bottom:solid 1px black;`"")
			$ligne = $ligne.Replace("td class=`"entry`"","td style=`"font-family:verdana; font-size:9pt; border:solid 1px black; padding:2px 5px 3px 5px; text-align:left;vertical-align:top; border-color:black;`"")
			$ligne = $ligne.Replace("td class=`"entry noBorder `"","td style=`"border-left:solid 0px black; border-right:solid 0px black;`"")
			$ligne = $ligne.Replace("td class=`"entry noBorder`"","td style=`"border-left:solid 0px black; border-right:solid 1px black; border-bottom:solid 0px black; border-top:solid 0px black;`"")
			$ligne = $ligne.Replace("td rowspan=`"2`" class=`"entry`" ","td rowspan=`"2`" style=`"padding:2px 5px 3px 5px; text-align:left; vertical-align:top; border-color:black;`" ")
			$ligne = $ligne.Replace("td rowspan=`"3`" class=`"entry`" ","td rowspan=`"3`" style=`"padding:2px 5px 3px 5px; text-align:left; vertical-align:top; border-color:black;`" ")
			$ligne = $ligne.Replace("thead class=`"thead`"","thead style=`"font-weight:bold;`"")
			$ligne = $ligne.Replace("tr class=`"RowHead`"","tr")
			$ligne = $ligne.Replace("sup class=`"superscript`"","sup")
			$ligne = $ligne.Replace("a class=`"url`"","a style=`"font-family:verdana; font-size:9pt;`"")
		
			$ligne = $ligne -replace "</div></div><script type=`"text/javascript`">","</div></div>"
			$ligne = $ligne.Replace("<h2 class=`"ob`"","<h2")
		
		$ligne = $ligne -replace "<h4>","<h5>"
		$ligne = $ligne -replace "</h4>","</h5>"
		$ligne = $ligne -replace "<h3>","<h4>"
		$ligne = $ligne -replace "</h3>","</h4>"
		$ligne = $ligne -replace "<h2>","<h3>"
		$ligne = $ligne -replace "</h2>","</h3>"
		$ligne = $ligne -replace "<h1>","<h2>"
		$ligne = $ligne -replace "</h1>","</h2>"
		
			
		
			while ($ligne.Contains("<span class=`"exposant`">")) {
				$nbIndexStart = $ligne.IndexOf("<span class=`"exposant`">")
				$longueur = $ligne.Length - 1
				for ($i=$nbIndexStart; $i -le $longueur; $i++) {
					$a = $ligne.Substring($i,7)
					if ($a -eq "</span>") {
						$ligne = $ligne.Remove($i,7)
						$ligne = $ligne.Insert($i,"</sup>")
						$ligne = $ligne.Remove($nbIndexStart,23)
						$ligne = $ligne.Insert($nbIndexStart,"<sup>")
						break
					}
				}	
			}
		
			while ( $ligne.Contains("<var style=`"display:none`">") ) {
				$nbIndexStart = $ligne.IndexOf("<var style=`"display:none`">")
				$longueur = $ligne.Length - 1
				for ($i=$nbIndexStart; $i -le $longueur; $i++) {
					$a = $ligne.Substring($i,6)
					if ($a -eq "</var>") {
						$ligne = $ligne.Remove($nbIndexStart,$i - $nbIndexStart + 6)
						break
					}
				}	
			}
		
		
			Add-Content $path\$newFichier $ligne
		}
	}
	Write-Host "J'ai fini de traiter le fichier $fichier"
}
Write-Host "J'ai fini de traiter tous les fichiers. Bye!"