2013-08-06 19 views
6

Próbuję zintegrować evoPDF w mojej aplikacji asp.net. Wysyłam część html z mojego pliku html onclick poprzez ajax. Wszystko działa do tej pory. Teraz, gdy przywołuję te metody z API EvoPdf.Nie można zastosować CSS do łańcucha html

1. GetPdfBytesFromHtmlStream(Stream, Encoding,urlbase) 

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

Moje html kawałek przesyłam jest coś

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

    </ol> 

CSS, który znajduje się w pliku zewnętrznym jest czymś

.lol { 

     background-color: red; 

    } 

Zgodnie z dokumentacją trzeci argument musi być pełny adres URL oryginalnego HTML, w którym wyodrębniono fragment html. Przesłałem moją aplikację w sieci, ponieważ spróbowałem localhost/3232 nie działa. Ale nie widzę żadnego CSS stosowanego w wygenerowanym html. W dokumentacji zalecili również dołączenie

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

I użyj tej metody.

 pdfConverter.GetPdfBytesFromHtmlString(String html); 

Nic Próbowałem powyżej dotyczy CSS. Wszelkie przemyślenia ....

+0

http://stackoverflow.com/questions/37392418/even-after-providing-fully-qualified-url-in-the-html-string-evopdf-converter-is faceci u może dać właściwą odpowiedź na moje pytanie – aggy

Odpowiedz

3

Chociaż istnieje możliwość umieszczenia html w zewnętrznym pliku evoPDF, nie polecam go. Zamiast tego po prostu wpisz style w nagłówku dokumentu. Kiedy przygotowywaliśmy generator PDF dla Careers 2.0, pamiętam, że adresy URL musiały być adresami URL na żywo, za serwerem WWW, a nie tylko względnym odnośnikiem w tej samej strukturze katalogów. Istnieje również limit czasu w evo pdf, który może spowodować utratę zdjęć, jeśli ładowanie trwa zbyt długo, co również jest przyjemniejsze z wbudowanym wszystkim.

Polecam również przekazanie w pełni poprawnego html, a nie tylko fragmentów potrzebnych do wygenerowania widoku. Za kulisami (w naszej wersji evoPDF przynajmniej), to tylko podnoszenie instancji przeglądarki i robienie zrzutu ekranu. Wyglądają trochę inaczej, zależnie od doctype.

+0

Tak, masz rację co do inline css. Jestem programistą w college'u. Nie piszę Evopdf dla jednej aplikacji. Ale dla wszystkich aplikacji uruchamianych w college'u. Powinno to zrobić 2 rzeczy. 1 zmienia cały URL html na Pdf, a inny zmienia część html na pdf. Dlatego nie chciałem obsługiwać tylko cytowań liniowych, ponieważ nie wiem, czego można oczekiwać od wszystkich innych aplikacji. Próbowałem też, przesyłając na live URL i wywołując css. Wciąż bez CSS – Rabin

+0

Jedyną rzeczą, którą mogę zaproponować bez zobaczenia pełnego przykładu, jest to, że znacznik base powinien wskazywać na folder, który jest katalogiem głównym dla wszystkich względnych adresów URL. To nie powinno wskazywać na rzeczywisty plik bezpośrednio, w przeciwnym razie wszystkie adresy URL powinny się zepsuć. –

0

Wpadłem na ten problem z EvoPdf. Naprawiono dla mnie odniesienie do baseURL z web.config. Próbowałem użyć HttpContext.Current.Request.Url.AbsoluteUri; który działał w dwóch środowiskach, ale nie sprawdzał się na innym serwerze.

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

Ustawiasz go konkretnie, a CSS wyświetla się poprawnie po zmianie. Działa również z https. Można go zakodować na twardym dysku do testowania i nie używać programu 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); 
Powiązane problemy