Word document omzetten naar html mbv PHP
ik heb een gebruiker die een *.htm bestand, gegenereert door MS-Word, upload naar de website.
In dat document staat heel veel overbodige en soms zelfs verkeerde html code. (MS houdt zich niet aan de standaard).
Is jullie een methode bekend (free of charge) om het document om te zetten naar schone code? Dan kan het in mijn PHP pagina includen.
Ik heb niet de mogelijkheid om een CGI script te runnen op de server.
Ik heb wel verschillende commerciele sites gevonden, maar die geven of een beperkte omzetting, of alleen voor kleine bestanden (<20K), of zijn erg duur.
Ik hoor graag van jullie (en zoek ondertussen verder).
CU, Ron
bedankt voor je snelle antwoord.
Ik krijg de indruk dat "tidy" de pecl extenties op PHP nodig heeft.
En die kan ik niet installeren. Ik beheer niet de server, alleen de website.
Hier kan je zien wat de provider ondersteunt:
http://www.gereformeerdekerklopik.nl/beheer/phpinfo.php
En eigelijk wil ook geen server permanent thuis hebben draaien (backups, altijd aan etc).
CU, Ron
Is volgesmij de meest snelle en makkelijke optie dan.
Kun je het niet gewoon overtypen en de fouten herstellen?
Ms word kan dit zelf ook niet, naja, het kan het wel, maar dan wil je echt niet de code zien.
Je hebt wel speciale dingen voor php, zoals docvert, alleen heb je dan wel een word processor nodig op de server, en die zul je vast en zeker niet hebben en niet kunnen krijgen.
Wat je ook kunt doen is de mensen het doc bestand laten plakken in tinymce (of een andere wysiwyg), je krijgt dan html. Alleen is dat dezelfde html als je word het laat omzetten.
Dat zou je dan moeten filteren...
http://www.getfreesofts.com/script/456/23079/Convert_MSWord_to_html_on_the_fly.html had je al gezien natuurlijl,aleen lijkt de link dood
bedankt voor et meedenken.
@Christiaan:
Ik heb Tidy gedownload, maar kan het niet zomaar uitvoeren (op een windows machine). Zie ik iets over het hoofd (een andere versie oid).
@Djemo:
Dat "overtypen" deed ik al, maar dat kost zo een uur.
Nu krijg ik de file als *.doc en *.htm (gegenereerd vanuit Word) door een computer "leek" aangeleverd. De *.htm file zit vol met HTML rommel en zelfs fouten. Ondanks dat kost het me nu gemiddeld 10 minuten om e.e.a. goed te krijgen. Maar..., ik wil dat de gebruiker het bestand kan uploaden en ik er geen werk meer aan heb (ook handig tijdens vakanties).
@Jeej:
Het klopt dat ik geen wordprocessor op de site ter beschikking heb.
Ik heb ook al Open Office geprobeerd, maar dat is ook geen schone code.
Je wordt bij beide gek van de styles die in elke regel staan. De dat hoeft niet, want ik gebruik zelf een eenvoudige stylesheet.
Ik zal toch eens kijken naar TinyMCE. Misschien is het voldoende.
@Klaas Jan:
De link is inderdaad dood. Maar ik denk dat ik de auteur heb gevonden en zal 'm eens een email sturen.
Bedankt voor jullie berichten,
Ron
Ron Kraaijkamp schreef op 11.04.2008 21:45:
@Jeej:
Het klopt dat ik geen wordprocessor op de site ter beschikking heb.
Ik heb ook al Open Office geprobeerd, maar dat is ook geen schone code.
Je wordt bij beide gek van de styles die in elke regel staan. De dat hoeft niet, want ik gebruik zelf een eenvoudige stylesheet.
Ik zal toch eens kijken naar TinyMCE. Misschien is het voldoende.
Het klopt dat ik geen wordprocessor op de site ter beschikking heb.
Ik heb ook al Open Office geprobeerd, maar dat is ook geen schone code.
Je wordt bij beide gek van de styles die in elke regel staan. De dat hoeft niet, want ik gebruik zelf een eenvoudige stylesheet.
Ik zal toch eens kijken naar TinyMCE. Misschien is het voldoende.
Hmm Open Office die er troep van maakt, dat had ik niet verwacht.
Ik kan het je nu wel voorspellen, die code van tinymce wil je ook niet zien, die is precies hetzelfde als wat word er van maakt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
//Word cleaner om rommel op te ruimen
function wordcleaner($html, $delstyles=true) {
$whitespace = array("\t","\n","\r");
$spaces = array(' ',' ',' ',' ');
$html = str_replace($whitespace, '', $html);
for ($t = 1; $t <= 5; $t++) {
$html = (str_replace($spaces, ' ', $html));
}
$commoncrap = array('"'
,'font-weight: normal;'
,'font-style: normal;'
,'line-height: normal;'
,'font-size-adjust: none;'
//,'FONT-SIZE: 12pt;'
,'COLOR: #000000;'
,'COLOR: #000000'
,'font-stretch: normal;');
$replace = array("'");
$html = str_replace($commoncrap, $replace, $html);
$patterns = array();
$replacements = array();
$patterns[] = '/(<table\s.*)(width=)(\d+%)(\D)/i'; # Fix unquoted non-alphanumeric characters in table tags
$replacements[] = '$1$2"$3"$4';
$patterns[] = '/(<td\s.*)(width=)(\d+%)(\D)/i';
$replacements[] = '$1$2"$3"$4';
$patterns[] = '/(<th\s.*)(width=)(\d+%)(\D)/i';
$replacements[] = '$1$2"$3"$4';
$patterns[] = '/<td( colspan="[0-9]+")?( rowspan="[0-9]+")?( width="[0-9]+")?( height="[0-9]+")?.*?>/i';
$replacements[] = '<td$1$2$3$4>';
$patterns[] = '/<tr.*?>
//Word cleaner om rommel op te ruimen
function wordcleaner($html, $delstyles=true) {
$whitespace = array("\t","\n","\r");
$spaces = array(' ',' ',' ',' ');
$html = str_replace($whitespace, '', $html);
for ($t = 1; $t <= 5; $t++) {
$html = (str_replace($spaces, ' ', $html));
}
$commoncrap = array('"'
,'font-weight: normal;'
,'font-style: normal;'
,'line-height: normal;'
,'font-size-adjust: none;'
//,'FONT-SIZE: 12pt;'
,'COLOR: #000000;'
,'COLOR: #000000'
,'font-stretch: normal;');
$replace = array("'");
$html = str_replace($commoncrap, $replace, $html);
$patterns = array();
$replacements = array();
$patterns[] = '/(<table\s.*)(width=)(\d+%)(\D)/i'; # Fix unquoted non-alphanumeric characters in table tags
$replacements[] = '$1$2"$3"$4';
$patterns[] = '/(<td\s.*)(width=)(\d+%)(\D)/i';
$replacements[] = '$1$2"$3"$4';
$patterns[] = '/(<th\s.*)(width=)(\d+%)(\D)/i';
$replacements[] = '$1$2"$3"$4';
$patterns[] = '/<td( colspan="[0-9]+")?( rowspan="[0-9]+")?( width="[0-9]+")?( height="[0-9]+")?.*?>/i';
$replacements[] = '<td$1$2$3$4>';
$patterns[] = '/<tr.*?>
$replacements[] = '<tr>';
$patterns[] = '/<\/st1:address>(<\/st1:\w*>)?<\/p>[\n\r\s]*<p[\s\w="\']*>/i';
$replacements[] = '<br />';
$patterns[] = '/<o:p.*?>/i';
$replacements[] = '';
$patterns[] = '/<\/o:p>/i';
$replacements[] = '<br />';
$patterns[] = '/<o:SmartTagType[^>]*>/i';
$replacements[] = '';
$patterns[] = '/<st1:[\w\s"=]*>/i';
$replacements[] = '';
$patterns[] = '/<\/st1:\w*>/i';
$replacements[] = '';
$patterns[] = '/<p class="MsoNormal"[^>]*>(.*?)<\/p>/i';
$replacements[] = '$1<br />';
$patterns[] = '/ style="margin-top: 0cm;"/i';
$replacements[] = '';
$patterns[] = '/<(\w[^>]*) class=([^ |>]*)([^>]*)/i';
$replacements[] = '<$1$3';
$patterns[] = '/<ul(.*?)>/i';
$replacements[] = '<ul>';
$patterns[] = '/<ol(.*?)>/i';
$replacements[] = '<ol>';
$patterns[] = '/<br \/> <br \/>/i';
$replacements[] = '<br />';
$patterns[] = '/ <br \/>/i';
$replacements[] = '<br />';
$patterns[] = '/<!-.*?>/';
$replacements[] = '';
$patterns[] = '/\s*style=(""|\'\')/';
$replacements[] = '';
$patterns[] = '/ style=[\'"]tab-interval:[^\'"]*[\'"]/i';
$replacements[] = '';
$patterns[] = '/behavior:[^;\'"]*;*(\n|\r)*/i';
$replacements[] = '';
$patterns[] = '/mso-[^:]*:"[^"]*";/i';
$replacements[] = '';
$patterns[] = '/mso-[^;\'"]*;*(\n|\r)*/i';
$replacements[] = '';
$patterns[] = '/\s*font-family:[^;"]*;?/i';
$replacements[] = '';
$patterns[] = '/margin[^"\';]*;?/i';
$replacements[] = '';
$patterns[] = '/text-indent[^"\';]*;?/i';
$replacements[] = '';
$patterns[] = '/tab-stops:[^\'";]*;?/i';
$replacements[] = '';
$patterns[] = '/border-color: *([^;\'"]*)/i';
$replacements[] = '';
$patterns[] = '/border-collapse: *([^;\'"]*)/i';
$replacements[] = '';
$patterns[] = '/page-break-before: *([^;\'"]*)/i';
$replacements[] = '';
$patterns[] = '/font-variant: *([^;\'"]*)/i';
$replacements[] = '';
$patterns[] = '/ lang="EN-GB"/';
$replacements[] = '';
$patterns[] = '/<span [^>]*><br \/><\/span><br \/>/i';
$replacements[] = '<br />';
$patterns[] = '/" "/';
$replacements[] = '""';
$patterns[] = '/[\t\r\n]/';
$replacements[] = '';
$patterns[] = '/\s\s/s';
$replacements[] = '';
$patterns[] = '/ style=""/';
$replacements[] = '';
$patterns[] = '/<span>(.*?)<\/span>/i';
$replacements[] = '$1';
$patterns[] = '/<span>(.*?)<\/span>/i';//twice, nested spans
$replacements[] = '$1';
$patterns[] = '/(;\s|\s;)/';
$replacements[] = ';';
$patterns[] = '/;;/';
$replacements[] = ';';
$patterns[] = '/";/';
$replacements[] = '"';
$patterns[] = '/<li(.*?)>/i';
$replacements[] = '<li>';
$patterns[] = '/\s*font-size:[^;"]*;?/i';
$replacements[] = '';
$patterns[] = '/ style=""/';
$replacements[] = '';
$patterns[] = '/<span> <br \/><\/span>/i';
$replacements[] = '<br />';
$patterns[] = '/<span>(.*?)<\/span>/i';
$replacements[] = '$1';
//$patterns[] = '/\s*color:[^;"]*;?/i';
//$replacements[] = '';
if($delstyles===true){
$patterns[] = '/ style=".*?"/';
$replacements[] = '';
}
ksort($patterns);
ksort($replacements);
$html = preg_replace($patterns, $replacements, $html);
for ($t=1;$t<=3;$t++) {
$html = (str_replace($spaces, ' ', $html));
}
return $html;
}
?>
Aanroepen als volgt (in geval van cms)
$content = wordcleaner($row['content']);
Helaas is de code omzetter van phphulp niet in staat om de code onder elkaar te plaatsen. Mijn excuses
Gewijzigd op 01/01/1970 01:00:00 door Ceasar Feijen
Ik ga beide vanavond eens bekijken.
Bedankt voor jullie support.
CU, Ron
Ceasar: Bij zo'n scriptjes is het beter om nog en te zetten.
Bedankt
http://www.sharewareplaza.com/obninsk-doc2text-converter-download_41185.html .
Gebruik de 2e mirror, de eerste is dood.
Ik weet dat het een oud topic is, maar voor iedereen die er (in de toekomst) naar zoekt: Gebruik de 2e mirror, de eerste is dood.
Gewijzigd op 04/07/2011 00:35:15 door Max van den Bosch