wkhtmltopdf.exe System.Security.SecurityException на облачном веб-сервере. Как я могу переопределить политику безопасности сервера - PullRequest
4 голосов
/ 28 февраля 2012

Я хочу, чтобы на моем веб-сайте была возможность печатать содержимое страницы в формате PDF. Я попробовал несколько вариантов для этого, но лучшим соответствием был wkhtmltopdf, поскольку он также обрабатывал многоязычные символы.

Я получил его на моем локальном сервере, но когда я загрузил его на облачный веб-сервер для хостинга, теперь он выдает мне следующую ошибку

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.

Я изменил политику безопасности в web.config

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

Но он все еще не работает

Тестовый URL http://www.noor.com.asp1 -20.dfw1-2.websitetestlink.com / ArticleDetails.aspx? Language = EN-US & PageId = 19 & ArticleID = 4

Вы можете щелкнуть ссылку «Загрузить» в конце этой ссылки, чтобы преобразовать определенный раздел веб-страницы в формат PDF. Он отлично работает на локальном сервере, но не работает по соображениям безопасности на веб-сервере. Я искал несколько дней, чтобы PDF работал, а теперь он не работает на веб-сервере. Я попробовал другой вариант, но они по какой-то причине iText не конвертировали в арабский, а печатали ненужные символы только для арабской версии страницы.

Пожалуйста, посоветуйте, что мне следует изменить, чтобы сделать это правильно.

Я разработал этот сайт, используя asp.net 4.0, используя c #

Код, который я использую для создания 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();

1 Ответ

3 голосов
/ 04 марта 2012

РАБОЧИЙ КОД: Я решил проблему, вызвав файл PrintArticle.aspx из MainPage.aspx, когда пользователь щелкает по кнопке lnkbtnDownload , которую он вызываетстраницу PrinteArticle.aspx («Печать страницы статьи» - это простая страница, которая показывает заголовок статьи, дату и описание статьи) и передает HTML-код с кодом ниже, который затем будет распечатан в виде файла 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();
    }

Iя передаю другие параметры в виде строки запроса, например articleID, Download, Language и т. д.

...