Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Konwersja docbooka do pdf, Klasa, PHP 4 i 5
aleksander
post 10.03.2005, 12:59:27
Post #1





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

Ostrzeżenie: (0%)
-----


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.

  1. <?php
  2. class Docbook2pdf
  3. {
  4. function Docbook2pdf( $sDocbookUrl, $sPdfFileName )
  5. {
  6. $output = $this->PostVars( 'http://www.xml-dev.com/blog/xml2pdf.php', array( 'xmlurl' => $sDocbookUrl ) );
  7.  
  8. $aFile = explode( &#092;"n\", $output );
  9.  
  10. for( $i=0, $count = count( $aFile ); $i<$count; $i++ )
  11. {
  12. if( empty( $aFile[$i] ) )
  13. {
  14. unset( $aFile[$i] );
  15. }
  16. }
  17. $lin = end( $aFile );
  18. $line = prev( $aFile );
  19. $line2 = substr( $line, strpos( $line, 'http' ) );
  20. $adres = substr( $line2, 0, strpos( $line2, '\"' ) );
  21.  
  22. $pdf = $this->getPDF( $adres );
  23.  
  24. $fp = fopen( $sPdfFileName, 'w' );
  25. $p = fwrite( $fp, $pdf );
  26. fclose( $fp );
  27. echo 'gotowe';
  28. }
  29.  
  30.  
  31. function getPDF( $adres )
  32. {
  33. $url = parse_url( $adres );
  34. if ($fp = fsockopen( $url['host'], $url['port'] ) )
  35. {
  36. fputs($fp, &#092;"GET \" . $url['path'] . \" HTTP/1.0rnrn\".
  37. &#092;"Host: \". $_SERVER[\"HTTP_HOST\"] .\"rn\".
  38. &#092;"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\".
  39. &#092;"Accept-Encoding: gzip,deflatern\".
  40. &#092;"Accept-Language: pl,en-us;q=0.7,en;q=0.3rn\".
  41. &#092;"Negotiate: transrn\".
  42. &#092;"Mozilla/5.0 (Windows; U; Windows NT 5.1; pl-PL; rv:1.7.6) Gecko/20050226 Firefox/1.0.1rnrn\" );
  43.  
  44. $return = '';
  45. while ($buf = fgets($fp ) )
  46. {
  47. $return .= $buf;
  48. }
  49.  
  50. fclose($fp);
  51. return $return;
  52. }
  53. return false;
  54. }
  55.  
  56.  
  57. function PostVars($url, $vars)
  58. {
  59. $result = $post = '';
  60. $url = parse_url($url);
  61. if (!is_array($vars))
  62. {
  63. return false;
  64. }
  65.  
  66. foreach ($vars as $k => $v)
  67. {
  68. $post .= urlencode($k) . '=' . urlencode($v) . '&';
  69. }
  70.  
  71. $post = substr($post, 0, -1);
  72.  
  73. if ($fp = @fsockopen($url['host'], 80))
  74. {
  75. fputs($fp,
  76. &#092;"POST \" . $url['path'] . \" HTTP/1.0rn\" .
  77. //\"Accept: image/gif, image/x-xbitmap, image/jpeg, \" .
  78. //\"image/pjpeg, application/msword, \" .
  79. //\"application/x-shockwave-flash, */*rn\" .
  80. //\"Accept-Language: plrn\" .
  81. &#092;"Content-Type: application/x-www-form-urlencodedrn\" .
  82. //\"Accept-Encoding: gzip, deflatern\" .
  83. //\"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; \" .
  84. //\"Windows NT 5.1)rn\" .
  85. //\"Host: \" . $url['host'] . \"rn\" .
  86. &#092;"Content-Length: \" . strlen($post) . \"rn\" .
  87. //\"Connection: Keep-Alivern\" .
  88. &#092;"rn\" . $post . \"rn\");
  89.  
  90. while ($buf = fread($fp, 8192))
  91. {
  92. $result .= $buf;
  93. }
  94.  
  95. fclose($fp);
  96. return $result;
  97. }
  98. return false;
  99. }
  100. }
  101. ?>
użycie:
  1. <?php
  2. $oDocBook2Pdf = new Docbook2pdf( 'http://example.net/example_docbook.xml', 'docelowy_plik.pdf' );
  3. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 20:15