2008-11-13 10 views
6

Obecnie używam abcPDF 7 do konwersji HTML na PDF. Odbywa się to za pośrednictwem strony ASPX, w której zastępuję metodę renderowania.abcPDF 7 konwersja HTML do PDF, ale tylko pierwsza strona przekonwertowana

Doc theDoc = new Doc(); 
theDoc.SetInfo(0, "License", m_License); 
theDoc.HtmlOptions.Paged = true; 
theDoc.HtmlOptions.Timeout = 1000000; 

string callUrl = "http:// my app page"; 
theDoc.AddImageUrl(callUrl); 
Response.Clear(); 

Response.Cache.SetCacheability(HttpCacheability.Private); 
Response.AddHeader("Content-Disposition", "attachment; filename=" + sFile + ".pdf"); 
Response.ContentType = "application/octet-stream"; 

theDoc.Save(Response.OutputStream); 

Response.Flush(); 

Działa to idealnie na pierwszej stronie, ale następnie obcina stronę i nie kontynuuje renderowania pozostałych stron.

Czy ktoś wie, dlaczego zatrzymuje się po stronie?

Odpowiedz

10

"Rysowana jest tylko pierwsza strona dokumentu, kolejne strony można narysować za pomocą metody AddImageToChain."

Od here

przykład jak używać AddImageToChain można znaleźć here

11

miałem dokładnie ten sam problem. Odpowiedź polega na użyciu łańcucha, ale strona podana w poprzedniej odpowiedzi nie pokazuje dokładnie, jak to zrobić. Oto przykład z mojej strony: Zauważ, że zmienna htmlOutput jest zmienną w moim obiekcie, która przyjmuje htmlOutput, którą chcę renderować. Zbieram to ze strony, po prostu przesuwając html bezpośrednio do zmiennej, lub jeśli jest to dla bieżącej strony, uruchamiam chronione zastępowanie void Render (wyjście HtmlTextWriter) dla Page, wciskając zawartość Renderowania do tej zmiennej htmlOutput.

Doc theDoc = new Doc(); 
int theID; 
theDoc.Page = theDoc.AddPage(); 

theID = theDoc.AddImageHtml(htmlOutput); 

while (true) 
{ 
    theDoc.FrameRect(); // add a black border 
    if (!theDoc.Chainable(theID)) 
     break; 
     theDoc.Page = theDoc.AddPage(); 
     theID = theDoc.AddImageToChain(theID); 
} 

for (int i = 1; i <= theDoc.PageCount; i++) 
{ 
    theDoc.PageNumber = i; 
    theDoc.Flatten(); 
    } 
    //reset back to page 1 so the pdf starts displaying there 
    if(theDoc.PageCount > 0) 
     theDoc.PageNumber = 1; 

    //now get your pdf content from the document 
    byte[] theData = theDoc.GetData(); 
+1

Drugi w odpowiedzi dostarczonej przez schnaader zawiera kod w peices. Dziękujemy za opublikowanie Twojego kodu. Jestem pewien, że to pomoże wielu ludziom. –