2014-09-11 19 views
7

Sto generando PDF su Azure utilizzando NReco che utilizza WkHtmlToPdf. Sul mio server locale tutto genera bene. Su Azure tuttavia esegue il rendering di tutti i caratteri con quadratini neri.NReco PDF ha quadratini neri su Azure

enter image description here

Ho provato tutto quello che riesco a trovare on-line.

Ecco il mio HTML:

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <style type="text/css"> 
     @@font-face { 
      font-family: "FreeSerif"; 
      src: url(@(HttpContext.Current.Server.MapPath("~/Content/FreeSerif.ttf"))) format("truetype"); 
     } 

     * { 
      font-family:"FreeSerif", Helvetica, Arial, sans-serif;color:black; 
     } 
    </style> 
</head> 

Ho anche provato ad utilizzare Url.Content("~/Content/FreeSerif.ttf")

E il mio C#:

string htmlText = RenderPartialViewToString("~/Views/Templates/PDF/ListPDFView.cshtml", pdfList); 

HtmlToPdfConverter nPdf = new HtmlToPdfConverter(); 
nPdf.Size = PageSize.Letter; 
nPdf.Orientation = PageOrientation.Landscape; 
nPdf.CustomWkHtmlArgs = "--encoding UTF-8"; 

pdfBuf = nPdf.GeneratePdf(htmlText); 

Response.ContentType = "application/pdf"; 
Response.ContentEncoding = System.Text.Encoding.UTF8; 
Response.AddHeader("Content-Disposition", "Inline; filename=file.pdf"); 
Response.BinaryWrite(pdfBuf); 
Response.Flush(); 
Response.End(); 

mio web.config contiene:

<system.webServer> 
    <staticContent> 
     <remove fileExtension=".ttf" /> 
     <remove fileExtension=".svg" /> 
     <remove fileExtension=".eot" /> 
     <remove fileExtension=".woff" /> 
     <mimeMap fileExtension=".ttf" mimeType="font/truetype" /> 
     <mimeMap fileExtension=".svg" mimeType="image/svg+xml" /> 
     <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" /> 
     <mimeMap fileExtension=".woff" mimeType="application/x-woff" /> 
    </staticContent> 
</system.webServer> 

Ogni soluzione risultati in quadrati neri. Sono alla fine del mio spirito qui. Il tuo aiuto è molto apprezzato.

+0

Come tecnica di debug perché non provi ad usare solo uno standard built-in carattere di Windows (o rimuovere la definizione del carattere del tutto dal vostro CSS). Solo per vedere se riesci a farlo generare qualcosa di leggibile. –

+0

Ho provato Helvetica, Arial, Verdana, 'Arial MS Unicode', Tahoma, Georgia, sans-serif. Nessuno dei quali ha funzionato. – brenjt

+0

Che ne dici di nessuno? Basta lasciare una dichiarazione di carattere e vedere cosa succede. –

risposta

3

Se Azure significa "Siti Web di Azure", sfortunatamente non è supportato da WkHtmlToPdf e la sezione Domande frequenti su NReco.PdfGenerator page. Nel tuo caso sembra che il PDF sia generato senza errori, ma i quadrati neri appaiono perché WkHtmlToPdf utilizza l'API GDI di Windows che non funziona su WebSites di Azure.

Tuttavia PdfGenerator dovrebbe funzionare correttamente per Azure WebRole o Azure VM. L'istanza micro Amazon EC2 T2 è anche una buona alternativa per i siti Web di Azure in questo caso.

--- UPDATE ---

Per ora Azure Apps (ex siti web) ha abbonamenti VM-based (ad eccezione di tutti i piani di "Libero" e "condivisa") con l'ambiente di hosting meno restrittivo che permette l'esecuzione wkhtmltopdf e In questo caso è possibile utilizzare il wrapper NReco PdfGenerator. Si noti che esistono ancora alcune limitazioni: ad esempio, i font personalizzati non vengono renderizzati (potrebbero essere utilizzati solo i font installati sul sistema).

+0

E cosa si può fare per generare il PDF senza immagini?c'è un'altra libreria che può essere provata o una tecnica per risolvere il problema – Vesper

0

Ho avuto un problema simile a risolvere questo ha dovuto creare un servizio cloud azzurro per generare report in pdf. per creare il servizio cloud ed il pdf è generato correttamente con ogni stile dichiarato nel mio caso io uso a rotazione e sta lavorando alla perfezione lasciare alcuni link in modo da poter vedere come creare un progetto per i servizi cloud Azure

Cloud Services Example

https://www.visualstudio.com/en-us/docs/release/examples/azure/net-to-azure-cloud-services

https://github.com/Microsoft/nodejstools/wiki/Azure-Cloud-Service-Projects