2014-09-17 17 views
10

Qualcuno può dirmi come risolvere i seguenti problemi?Come gestire ContentNotFoundError quando si utilizza wkhtmltopdf?

  1. wkhtmltopdf non hanno possibilità di passare informazioni proxy (-p o --proxy) a differenza delle versioni precedenti e il suo sistema non si usa $ http_proxy e $ https_proxy variabile ENV troppo.

  2. wkhtmltopdf che non funziona con HTTPS/SSL anche se i impostare LD_LIBRARY_PATH per libssl.so e libcrypto.so

    [[email protected] ~]$ wkhtmltopdf https://www.google.co.in google.pdf 
    loaded the Generic plugin 
    Loading page (1/2) 
    Error: Failed loading page https://www.google.co.in (sometimes it will work just to ignore this error with --load-error-handling ignore) 
    Exit with code 1 due to network error: UnknownNetworkError 
    

    e

    [[email protected] ~]$ wkhtmltoimage https://www.google.co.in sample.jpg 
    loaded the Generic plugin 
    Loading page (1/2) 
    Error: Failed loading page https://www.google.co.in (sometimes it will work just to ignore this error with --load-error-handling ignore) 
    Exit with code 1 due to network error: UnknownNetworkError 
    
  3. wkhtmltopdf lavorare parzialmente con HTTP. I file PDF di output mancano di alcuni contenuti/background/posizioni.

    [[email protected] ~]$ wkhtmltopdf http://localhost:8880/ sample.pdf 
    loaded the Generic plugin 
    Loading page (1/2) 
    Printing pages (2/2)            
    Done               
    Exit with code 1 due to network error: ContentNotFoundError 
    
    [[email protected] ~]$ wkhtmltoimage http://localhost:8880/ sample.jpg 
    loaded the Generic plugin 
    Loading page (1/2) 
    Rendering (2/2)              
    Done                
    Exit with code 1 due to network error: ContentNotFoundError 
    

Nota: Im usando wkhtmltopdf-0.12.1-1.fc20.x86_64 e QT-4.8.6-10.fc20.x86_64

+0

Questi sembrano davvero i bug a cui sarebbe meglio rispondere ashkulz nel tracker dei problemi di github, penso che la tua migliore fortuna verrà posta lì. – Nenotlep

+0

Vedi: [Esci con il codice 1 a causa di un errore di rete: ContentNotFoundError # 2051] (https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2051) – kenorb

risposta

2

Purtroppo wkhtmltopdf non gestisce il download dei complessi siti Web, perché utilizza la libreria Qt/QtWebKit che sembra avere alcuni problemi.

Un problema è che wkhtmltopdf non supporta gli indirizzi relativi (GitHub: #1634, #1886, #2359, QTBUG-46240) come:

<img src="/images/filetypes/txt.png"> 
<script src="//cdn.optimizely.com/js/653710485.js"> 

e li carica come locale. Una soluzione che ho trovato per questo è il file html correggere sul posto da ex sul posto Editor:

ex -V1 page.html <<-EOF 
    %s,'//,'http://,ge 
    %s,"//,"http://,ge 
    %s,'/,'http://www.example.com/,ge 
    %s,"/,"http://www.example.com/,ge 
    wq " Update changes and quit. 
EOF 

Tuttavia non funziona per i file che hanno questo tipo di URL del telecomando.

Un altro problema è che non gestisce le risorse mancanti. Puoi provare a specificare --load-error-handling ignore, ma nella maggior parte dei casi non funziona (vedi #2051), quindi questo è ancora in sospeso. Soluzione alternativa è semplicemente rimuovere queste risorse non valide, prima della conversione.

alternativa a wkhtmltopdf, è possibile utilizzare htmldoc, PhantomJS con qualche script aggiuntivi, ad esempio utilizzando rasterize.js:

phantomjs rasterize.js http://example.com/ 

o dompdf (HTML to PDF Converter per PHP, è possibile installare dal compositore) con il campione codice sottostante:

<?php 
// somewhere early in your project's loading, require the Composer autoloader 
// see: http://getcomposer.org/doc/00-intro.md 
$HOMEDIR = "/Users/foo"; 
require $HOMEDIR . '/.composer/vendor/autoload.php'; 

// disable DOMPDF's internal autoloader if you are using Composer 
define('DOMPDF_ENABLE_AUTOLOAD', FALSE); 
define('DOMPDF_ENABLE_REMOTE', TRUE); 

// include DOMPDF's default configuration 
require_once $HOMEDIR . '/.composer/vendor/dompdf/dompdf/dompdf_config.inc.php'; 

$htmlString = file_get_contents("https://example.com/foo.pdf"); 

$dompdf = new DOMPDF(); 
$dompdf->load_html($htmlString); 
$dompdf->render(); 
$dompdf->stream("sample.pdf"); 
+1

È andato allo stesso modo in cui hai menzionato qui, anch'io ho avuto modo di conoscere il parente percorsi delle risorse, collegamenti interrotti ecc. dopo poco più lavoro su wkhtmltopdf. Ho risolto il problema con gli script di phantomjs. –

0

il mio problema è stato risolto rimuovendo @ font-face da css.