Word document omzetten naar html mbv PHP

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ron Kraaijkamp

Ron Kraaijkamp

11/04/2008 12:12:00
Quote Anchor link
Hi,

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
 
PHP hulp

PHP hulp

23/12/2024 11:47:03
 
Christiaan Baartse

Christiaan Baartse

11/04/2008 12:58:00
Quote Anchor link
HTML tidy?
http://pecl.php.net/package/tidy
Gewijzigd op 01/01/1970 01:00:00 door Christiaan Baartse
 
Ron Kraaijkamp

Ron Kraaijkamp

11/04/2008 14:23:00
Quote Anchor link
Hi Christiaan,

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
 
Christiaan Baartse

Christiaan Baartse

11/04/2008 17:09:00
Quote Anchor link
Je kan ook Tidy als programmatje downloaden en de gebruikers eerst het html bestandje daar door heen laten trekken?

Is volgesmij de meest snelle en makkelijke optie dan.
 
Jesper Diovo

Jesper Diovo

11/04/2008 18:08:00
Quote Anchor link
Kun je het niet gewoon overtypen en de fouten herstellen?
 

11/04/2008 19:55:00
Quote Anchor link
Het is niet gemakkelijk om een script te schrijven in php die van een ms word doc bestand een nette html pagina kan bakken.
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...
 
Klaasjan Boven

Klaasjan Boven

11/04/2008 20:55:00
 
Ron Kraaijkamp

Ron Kraaijkamp

11/04/2008 21:45:00
Quote Anchor link
Hi Allemaal,

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
 

11/04/2008 23:33:00
Quote Anchor link
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.

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.
 
Ceasar Feijen

Ceasar Feijen

12/04/2008 09:34:00
Quote Anchor link
Als je een cms gebruikt heb ik hier een functie die alles opruimt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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('&quot;'
                ,'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.*?>
/i';
$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 \/>&nbsp;<br \/>/i';
$replacements[] = '<br />';
$patterns[] = '/&nbsp;<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>&nbsp;<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
 
Christiaan Baartse

Christiaan Baartse

12/04/2008 09:38:00
Quote Anchor link
@Ron:
Na een korte google kwam er dit bij mij uitrollen.
http://users.rcn.com/creitzel/tidy.html
 
Ron Kraaijkamp

Ron Kraaijkamp

12/04/2008 10:38:00
Quote Anchor link
Hi Ceasar en Christiaan,

Ik ga beide vanavond eens bekijken.

Bedankt voor jullie support.

CU, Ron
 
Hipska BE

Hipska BE

12/04/2008 11:58:00
Quote Anchor link
Bericht van ceasar aangepast zodat die de code wel goed toont.

Ceasar: Bij zo'n scriptjes is het beter om nog en te zetten.
 
Ceasar Feijen

Ceasar Feijen

12/04/2008 12:14:00
Quote Anchor link
Okay dat wist ik niet :)
Bedankt
 
Max van den Bosch

Max van den Bosch

04/07/2011 00:32:25
Quote Anchor link
Ik weet dat het een oud topic is, maar voor iedereen die er (in de toekomst) naar zoekt: http://www.sharewareplaza.com/obninsk-doc2text-converter-download_41185.html .

Gebruik de 2e mirror, de eerste is dood.
Gewijzigd op 04/07/2011 00:35:15 door Max van den Bosch
 
Joris van Rijn

Joris van Rijn

04/07/2011 06:15:13
Quote Anchor link
Danku! Dit is precies waar ik een lange tijd geleden naar zocht. Nu gelijk opslaan voordat het weer weg is. Dit is echt een goede toevoeging.

(Linkje naar die mirror: http://obninsk.name/obninsk_doc/obninsk_doc.zip)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.