wkhtmltopdf.exe system.security.securityException sur le serveur Web Cloud.Comment puis-je remplacer la politique de sécurité du serveur?

StackOverflow https://stackoverflow.com/questions/9478141

  •  13-11-2019
  •  | 
  •  

Question

Je veux avoir une fonctionnalité pour mon site Web pouvant imprimer le contenu de la page en tant que PDF. J'ai essayé quelques options pour cela, mais le meilleur match était WKHTMLTOPDF car il gère également des caractères multilingues.

Je l'ai travaillé sur mon serveur local, mais lorsque je l'ai téléchargé sur un serveur Web Cloud pour l'hébergement, il me donne l'erreur suivante

Security Exception
Description: The application attempted to perform an operation not allowed by the security policy.  To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file.

Exception Details: System.Security.SecurityException: Request failed.

J'ai changé la politique de sécurité en web.config

<securityPolicy>
  <trustLevel name="Full" policyFile="internal"/>
</securityPolicy>

Mais cela ne fonctionne toujours pas

URL de test est http://www.noor.com.asp1-20.dfw1-2.websitetetestSlink.com/articleTetails.aspx?Language=en-us& ;pageID=19&articleid=4

Vous pouvez cliquer sur le lien de téléchargement du dos Ce lien de téléchargement Convertissez la section particulière de la page Web en PDF. Cela fonctionne bien sur le serveur local, mais cela ne fonctionne pas pour une raison de sécurité sur le serveur Web. J'avais cherché des jours pour obtenir le PDF fonctionner et maintenant, cela ne fonctionne pas sur le serveur Web. J'ai essayé une autre option, mais ils ont une raison pour une raison quelconque, il ne convertit pas l'arabe, il imprimait des caractères indésirables uniquement pour la version arabe de la page.

Veuillez conseiller ce que je devrais changer pour le faire correctement.

J'ai développé ce site Web à l'aide de ASP.NET 4.0 en utilisant C #

code que j'utilise pour générer pdf

string url = "PrintArticle.aspx?articleID=" + Request["articleID"] + "&download=yes&Language=" + Request["Language"];

// string args = string.Format("\"{0}\" - ", url);
string args = string.Format("\"{0}\" - ", "http://www.domain.com.asp1-20.dfw1-2.websitetestlink.com/" + url);
var startInfo = new ProcessStartInfo(Server.MapPath("bin\\wkhtmltopdf.exe"), args)
{
        UseShellExecute = false,
        CreateNoWindow = true,
        RedirectStandardOutput = true

};
var proc = new Process { StartInfo = startInfo };
proc.Start();

string output = proc.StandardOutput.ReadToEnd();
byte[] buffer = proc.StandardOutput.CurrentEncoding.GetBytes(output);
proc.WaitForExit();
proc.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=download.pdf");
Response.BinaryWrite(buffer);
Response.End();

Était-ce utile?

La solution

Code de travail: J'ai résolu le problème en appelant l'imprimante.aspx à partir de MAINPAGE.ASPX, lorsque l'utilisateur cligne sur le bouton lnkbtndownload link, il appellera la page IMPRESSTEARTICLE.ASPX (page d'impression de la page d'impression estUne page simple qui affiche le titre d'article, la date et la description de l'article) et transmettez le code HTML au code ci-dessous qui l'imprimera ensuite sous forme de fichier PDF

   protected void lnkbtnDownload_Click(object sender, EventArgs e)
    {
        string url = "PrintArticle.aspx?articleID=" + Request["articleID"] + "&download=yes&Language=" + Request["Language"];

        string args = string.Format("\"{0}\" - ", "http://xyz.net/" + url);
        var startInfo = new ProcessStartInfo(Server.MapPath("bin\\wkhtmltopdf.exe"), args)
        {
            UseShellExecute = false,
            CreateNoWindow = true,
            RedirectStandardOutput = true

        };
        var proc = new Process { StartInfo = startInfo };
        proc.Start();

        string output = proc.StandardOutput.ReadToEnd();
        byte[] buffer = proc.StandardOutput.CurrentEncoding.GetBytes(output);
        proc.WaitForExit();
        proc.Close();
        Response.ContentType = "application/pdf";
        Response.AddHeader("Content-Disposition", "attachment;filename=download.pdf");
        Response.BinaryWrite(buffer);
        Response.End();
    }

Je passe d'autres paramètres comme String de requête comme l'articleid, le téléchargement, la langue, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top