Doc omzetten naar html

Status
Niet open voor verdere reacties.

Thomasje

Gebruiker
Lid geworden
12 mei 2007
Berichten
337
Iemand levert mij vaak documenten aan in Microsoft Word die ik voor zijn website moet omzetten naar HTML-pagina's. Ik heb in de loop der jaren vaak gezocht naar oplossingen en geexperimenteerd hoe ik dat het beste kan doen. Tegenwoordig open ik zo'n Word document met Libre Office (een Linux kloon van Microsoft Word) en kies dan voor "Opslaan als html". Dat gaat goed en de lay-out blijft grotendeels in takt, maar met 1 hinderlijk nadeel: bij het omzetten worden er honderden witregels! toegevoegd (het zijn vaak grote documenten, boeken). Het kost me veel tijd en inspanning om die witregels te verwijderen. Bovendien moeten de inspringingen van alle alinea's opnieuw worden aangebracht omdat die bij het verwijderen van de witregels verdwijnen. Wie weet een betere werkwijze?
 
Opslaan als HTML kan ook gewoon met Microsoft Word.

Libre Office is niet specifiek voor Linux. Het is ook beschikbaar onder windows.
 
Opslaan als HTML kan ook gewoon met Microsoft Word.

Dat is een ramp! Omdat er allerlei storende code meekomt. Jarenlang heb ik van alles geprobeerd om een betere methode te vinden.

Libre Office is niet specifiek voor Linux. Het is ook beschikbaar onder windows.

Dat weet ik. Maar ik weet niet of er in de werking onder de motorkap tussen die twee verschillen zitten. Overigens gebruik ik Word al jaren niet meer.
 
Laatst bewerkt:
Je zou er over kunnen denken de documenten als doc/pdf op de website te zetten. Met een samenvatting in HTML. Geen idee wie namelijk een boek rechtstreeks in een browser gaat lezen namelijk.

Alterntief kun je een website aanleveren op basis van een CMS (Wordpress, Joomla, ...). De auteur kan dan zelf de teksten toevoegen en hoef jij je alleen maar druk te maken over de layout van de site.
 
hi thomasje, ik denk dat er meer met dit probleem te kampen hebben. Soms krijg ik een Word bestand met zoveel troep dat ik alles als "clean" tekst naar een text editor kopieer, dan alles in het cms zet, en dan zelf de opmaak er aan toevoeg. Ellende :(
 
Ik worstel al 10! jaar met dit probleem. Je begrijpt, als het Word document een heel boek is dat helemaal opnieuw opmaken dan vreselijk veel werk is en geen optie.
 
Laatst bewerkt:
hi thomasje
ik heb een script van deze site wat gefixed. Deze herkent de volgende tags en zet alles om in schone html: alle headers, paragraaf, breakline, bold, italic, underline. Wellicht zijn er anderen die hierin dingen kunnen aanvullen.

Hoe het werkt: je docx opslaan als xml bestand en dan door het script halen.

PHP:
<?php

// www.jackreichert.com/2012/11/09/how-to-convert-docx-to-html/
// some fixes by bron

// location of xml file (save docx as xml file)
$myFile = 'test.xml';
$myDir = dirname(__FILE__).'/word/';
$xmlFile = $myDir.$myFile;
$reader = new XMLReader;
$reader->open($xmlFile);

// setup variables for formatting
$text = '';
$formatting['bold'] = 'closed';
$formatting['italic'] = 'closed';
$formatting['underline'] = 'closed';
$formatting['header'] = 0;

// loop through docx xml dom
while ($reader->read()){
  
  // look for new paragraphs
  if ($reader->nodeType == XMLREADER::ELEMENT && $reader->name === 'w:p'){

    // new instance of XMLReader for parsing paragraph independantly
    $paragraph = new XMLReader;
    $p = $reader->readOuterXML();
    $paragraph->xml($p);

    // search for heading
    preg_match('/w:pStyle w:val="(Header|Kop)([1-6])"/',$p,$matches);
    if (!empty($matches)) {
      $pos = strpos('0123456', $matches['2']);
      $formatting['header'] = ($pos === false) ? 0 : $pos;
    }else{
      $formatting['header'] = 0;
    }

    // open <h> or <p> tag
    $text .= ($formatting['header'] > 0) ? '<h'.$formatting['header'].'>' : '<p>';

    // loop through paragraph dom
    while ($paragraph->read()){

      // look for elements
      if ($paragraph->nodeType == XMLREADER::ELEMENT && $paragraph->name === 'w:r'){
        $node = trim($paragraph->readInnerXML());

        // add <br /> tags
        if (strstr($node,'<w:br ')) $text .= '<br />';

        // look for formatting tags          
        $formatting['bold'] = (strstr($node,'<w:b/>')) ? (($formatting['bold'] == 'closed') ? 'open' : $formatting['bold']) : (($formatting['bold'] == 'opened') ? 'close' : $formatting['bold']);
        $formatting['italic'] = (strstr($node,'<w:i/>')) ? (($formatting['italic'] == 'closed') ? 'open' : $formatting['italic']) : (($formatting['italic'] == 'opened') ? 'close' : $formatting['italic']);
        $formatting['underline'] = (strstr($node,'<w:u ')) ? (($formatting['underline'] == 'closed') ? 'open' : $formatting['underline']) : (($formatting['underline'] == 'opened') ? 'close' : $formatting['underline']);

        // build text string of doc
        $text .=  (($formatting['bold'] == 'open') ? '<strong>' : '').
             (($formatting['italic'] == 'open') ? '<em>' : '').
             (($formatting['underline'] == 'open') ? '<u>' : '').
             htmlentities(iconv('UTF-8', 'ASCII//TRANSLIT',$paragraph->expand()->textContent)).
             (($formatting['underline'] == 'close') ? '</u>' : '').
             (($formatting['italic'] == 'close') ? '</em>' : '').
             (($formatting['bold'] == 'close') ? '</strong>' : '');

        // reset formatting variables
        foreach ($formatting as $key=>$format){
          if ($format == 'open') $formatting[$key] = 'opened';
          if ($format == 'close') $formatting[$key] = 'closed';
        }
      }  
    }    
    $text .= ($formatting['header'] > 0) ? '</h'.$formatting['header'].'>' : '</p>';
  }
}
$reader->close();

// suppress warnings. fix invalid html
$doc = new DOMDocument();
$doc->encoding = 'UTF-8';
@$doc->loadHTML($text);
$goodHTML = simplexml_import_dom($doc)->asXML();
$goodHTML = preg_replace('/<p\/>/','',$goodHTML);

echo $goodHTML;

?>

Ik ben geen php coder dus er zijn vast verbeteringen in aan te brengen. Het werkt in ieder geval.
 
Ik heb in de loop der jaren al zoveel programma's en websites gevonden die beloven Word-doc's mooi om te zetten naar html (steeds meer mensen lezen zulke pagina's op een reader, vandaar de noodzaak van omzetten naar html), maar geen van alle doen ze het netjes.

Inmiddels heb ik de oplossing eindelijk gevonden: ik heb degene die de doc's aanlevert gevraagd om eens te kijken of hij weet waarom er witregels in komen. Hij vond dat bij een andere opmaak in Word het verschijnsel zich niet voor doet. Scheelt vele uren werk.

Iedereen bedankt voor het meedenken!

P.S. Dit is de site die het betreft: www.verbodengeschriften.nl
 
Laatst bewerkt:
Je zou er over kunnen denken de documenten als doc/pdf op de website te zetten. Met een samenvatting in HTML. Geen idee wie namelijk een boek rechtstreeks in een browser gaat lezen namelijk.

Alterntief kun je een website aanleveren op basis van een CMS (Wordpress, Joomla, ...). De auteur kan dan zelf de teksten toevoegen en hoef jij je alleen maar druk te maken over de layout van de site.

Op de website waarvoor ik die documenten omzet staat van elk document al een versie in Doc, Pdf en Epub omdat webpagina's tegenwoordig steeds vaker met een Ereader en iPad worden gelezen. De website waarom het gaat onderhoud ik al een jaar of tien en heeft een historie zoals je begrijpt. Al werkend eraan is de meest geschikte werkwijze voor het onderhoud ontstaan en CMS bleek daar niet geschikt voor te zijn. Ik heb bovendien gemerkt dat er meer mensen onhandig met de computer zijn dan vaak wordt gedacht en waarvoor CMS geen oplossing is.
 
Laatst bewerkt:
Terzijde: het is me een raadsel hoe dit topic ook hier terecht is gekomen.
Vermoedelijk omdat je hem zelf twee keer hebt geplaatst ;)

Wellicht op de vorige knop gedrukt om een wijziging aan te maken en toen opnieuw verzonden.

Bij deze de twee vragen samengevoegd :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan