Zacząłem interesować się sposobami konwersji plików xml do innych formatów. Jeżeli chodzi o konwersję docbooka do formatu pdf z poziomu php nie znalazłem nic ciekawego, oprócz adresu
http://validate.sf.net// Strona pozwala skonwertować dowolny plik docbooka do pdfu. Postanowiłem stworzyć skrypcik udający przeglądarkę, wysyłający metodą POST adres pliku xml i odbierający plik pdf.
Działanie klasy
- klasa wysyła metodą POST http adres pliku xml, który musi być dostępny przez internet.
- konwerter na zdanym serwerze zwraca stronę z tagiem <META HTTP-EQUIV="Refresh" w którym jest adres pliku pdf
- skrypt wyciąga adres pliku pdf i pobiera go metodą GET http
- skrypt zapisuje pdf do pliku.
<?php
class Docbook2pdf
{
function Docbook2pdf( $sDocbookUrl, $sPdfFileName )
{
$output = $this->PostVars( 'http://www.xml-dev.com/blog/xml2pdf.php', array( 'xmlurl' => $sDocbookUrl ) );
$aFile = explode( \"n\", $output );
for( $i=0
, $count = count( $aFile ); $i<$count; $i++ ) {
if( empty( $aFile[$i] ) ) {
}
}
$pdf = $this->getPDF( $adres );
$fp = fopen( $sPdfFileName, 'w' ); }
function getPDF( $adres )
{
if ($fp = fsockopen( $url['host'], $url['port'] ) ) {
fputs($fp, \"GET \" . $url['path'] . \" HTTP/1.0rnrn\". \"Host: \". $_SERVER[\"HTTP_HOST\"] .\"rn\".
\"Accept: text/xml,application/xml,application/pdf,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5rn\".
\"Accept-Encoding: gzip,deflatern\".
\"Accept-Language: pl,en-us;q=0.7,en;q=0.3rn\".
\"Negotiate: transrn\".
\"Mozilla/5.0 (Windows; U; Windows NT 5.1; pl-PL; rv:1.7.6) Gecko/20050226 Firefox/1.0.1rnrn\" );
$return = '';
while ($buf = fgets($fp ) ) {
$return .= $buf;
}
return $return;
}
return false;
}
function PostVars($url, $vars)
{
$result = $post = '';
{
return false;
}
foreach ($vars as $k => $v)
{
}
{
\"POST \" . $url['path'] . \" HTTP/1.0rn\" .
//\"Accept: image/gif, image/x-xbitmap, image/jpeg, \" .
//\"image/pjpeg, application/msword, \" .
//\"application/x-shockwave-flash, */*rn\" .
//\"Accept-Language: plrn\" .
\"Content-Type: application/x-www-form-urlencodedrn\" .
//\"Accept-Encoding: gzip, deflatern\" .
//\"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; \" .
//\"Windows NT 5.1)rn\" .
//\"Host: \" . $url['host'] . \"rn\" .
\"Content-Length: \" . strlen($post) . \"rn\" .
//\"Connection: Keep-Alivern\" .
\"rn\" . $post . \"rn\");
while ($buf = fread($fp, 8192
)) {
$result .= $buf;
}
return $result;
}
return false;
}
}
?>
użycie:
<?php
$oDocBook2Pdf = new Docbook2pdf( 'http://example.net/example_docbook.xml', 'docelowy_plik.pdf' );
?>