2013-08-06 11 views
6

Sto cercando di integrare evoPDF sulla mia app asp.net. Sto inviando parte di html dal mio file html onclick tramite ajax. Tutto funziona fie fino a questa parte. Ora, quando invoco questi metodi dall'API EvoPdf.Impossibile applicare CSS alla stringa html

1. GetPdfBytesFromHtmlStream(Stream, Encoding,urlbase) 

2. SavePdfFromHtmlStringToFile(String html,string filename,urlbase) 

mio pezzo html Io mando è qualcosa di simile a

<ol class = "lol"> 
     <li> HEY </li> 
     <li> Now </li> 

    </ol> 

il CSS che si trova nel file esterno è qualcosa di simile

.lol { 

     background-color: red; 

    } 

Secondo la documentazione del terzo argomento deve essere l'url completo dell'Html originale in cui hai estratto il blocco dell'html. Ho caricato la mia app sul web da quando il tentativo di localhost/3232 non ha funzionato. Ma non riesco a vedere alcun CSS applicato nell'Html generato. Nella documentazione hanno anche raccomandato di aggiungere

 <HEAD> <BASE HREF="full url to your html file"> </HEAD> 

E, utilizzare questo metodo.

 pdfConverter.GetPdfBytesFromHtmlString(String html); 

Nulla di ciò che ho provato sopra si applica ai CSS. Qualsiasi pensiero ....

+0

http://stackoverflow.com/questions/37392418/even-after-providing-fully-qualified-url-in-the-html-string-evopdf-converter-is ragazzi u può dare una risposta adeguata alla mia domanda – aggy

risposta

3

Mentre è possibile avere l'html in un file esterno con evoPDF, non lo consiglio. Invece, solo in linea gli stili nella testa del documento. Quando stavamo impostando il generatore PDF per Careers 2.0, ricordo che gli URL dovevano essere URL live, dietro un server web, non solo un collegamento relativo nella stessa struttura di directory. C'è anche un timeout in evo pdf che può causare la perdita di immagini se il caricamento richiede troppo tempo, il che è anche più piacevole con tutto in linea.

Raccomando anche di passarlo in html pienamente valido, non solo i frammenti necessari per generare la vista. Dietro le quinte (almeno nella nostra versione di evoPDF), si limita a sollevare un'istanza del browser e ad acquisire uno screenshot. Esse rendono un po 'diversamente a seconda del doctype.

+0

Sì, hai ragione sul css in linea. Sono uno sviluppatore in un college. Non scrivo Evopdf per una sola app. Ma per tutte le app che funzionano nel college. Dovrebbe fare 2 cose. 1 cambia l'intero url html in Pdf e un'altra parte del file html in pdf. Ecco perché non volevo solo supportare la citazione in linea, poiché non so cosa aspettarmi da tutte le altre app. Ho anche provato, il caricamento sull'URL live e l'invocazione del css. Ancora No CSS – Rabin

+0

L'unica altra cosa che posso pensare di suggerire senza vedere un esempio completo è che il tag base deve puntare alla cartella che è la radice di tutti gli url relativi. Non si deve puntare direttamente a un file reale altrimenti tutti gli url relativi dovrebbero interrompersi. –

0

Mi sono imbattuto in questo problema con EvoPdf. La soluzione per me era di fare riferimento a baseURL da web.config. Stavo cercando di usare HttpContext.Current.Request.Url.AbsoluteUri; che ha funzionato in due ambienti ma non è stato testato su un altro server.

<appSettings> 
    <add key="baseURL" value="http://your-domain.com/" /> 
    </appSettings> 

Così lo si imposta in modo specifico e il CSS mostra correttamente dopo la modifica. Funziona anche con https. È possibile programmare il codice per il test e non utilizzare ConfigurationManager.

 TextWriter outTextWriter = new StringWriter(); 

     Server.Execute("Page1.aspx", outTextWriter); 
     Server.Execute("Page2.html", outTextWriter); 

     string htmlStringToConvert = outTextWriter.ToString(); 
     outTextWriter.Close(); 

     // Use the current page URL as base URL 
     string baseUrl = ConfigurationManager.AppSettings["baseURL"].ToString(); //HttpContext.Current.Request.Url.AbsoluteUri; 

     // Convert the page HTML string to a PDF document in a memory buffer 
     byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlStringToConvert, baseUrl); 
Problemi correlati