2008-11-13 12 views
6

J'utilise actuellement abcPDF 7 pour convertir du HTML en PDF. Ceci est fait via une page ASPX où je substitue la méthode Render.abcPDF 7 convertir du HTML en PDF, mais seulement obtenir la première page convertie

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(); 

Ceci fonctionne parfaitement pour la première page mais tronque ensuite la page et ne continue pas à restituer les pages restantes.

Est-ce que quelqu'un sait pourquoi il s'arrête après une page?

Répondre

10

"Seule la première page du document est dessinée, les pages suivantes peuvent être dessinées à l'aide de la méthode AddImageToChain."

De here

Un exemple comment utiliser AddImageToChain peut être trouvé here

11

J'ai eu ce même problème exact. La réponse utilise le chaînage, mais la page fournie dans la réponse précédente ne vous montre pas exactement comment procéder. Voici un exemple de mon site: Notez que la variable htmlOutput est une variable dans mon objet qui prend en compte le htmlOutput que je veux rendre. Je rassemble ceci à partir de la page soit en poussant directement html dans la variable, ou si c'est pour la page courante, je lance le rendu prioritaire protégé Render (sortie HtmlTextWriter) pour Page, en poussant le contenu du rendu dans cette variable 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

Le second dans la réponse fournie par schnaader contient le code en peices. Merci d'avoir posté votre code. Je suis sûr que cela aidera beaucoup de gens. –

Questions connexes