0

リンクボタンhttp://code.google.com/p/wkhtmltopdf/wkhtmltopdfでHTMLファイルをPDFドキュメントに変換するため に使用しています

ユーザーがリンク ボタンをクリックすると、次のコードが実行され、ファイル パスのコードが引数 ProcessStartInfo として渡されます。このコードは、次のシナリオでのみ正常に機能します

Web サイトがドメインhttp://www.xyz.net/でホストされていることを考慮する

  1. パスについて言及すると、http://demo.XYZ.net/正常に動作します
  2. http://www.XYZ.net/うまくいかないのでパスに言及すると
  3. ローカルホストの場合、パスがhttp://localhost:51005/XYZ/またはhttp://web:8080/

PrintArticle.aspxこれが正しく機能するためには、Web サイトに完全な信頼レベルを与える必要があります。コードが実行されない理由がわかりません。サブドメインを作成する場合は put を作成する場合と同じドメイン パスを指定すると、正常に動作します。これがセキュリティ上の問題なのか、それとも何なのかわかりません

以下のコード

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

        //string args = string.Format("\"{0}\" - ", "http://demo.XYZ.net/" + url); //Works
        //string args = string.Format("\"{0}\" - ", "http://www.xyz.net/" + url); Doesnt work
        //string args = string.Format("\"{0}\" - ", url);

        string args = string.Format("\"{0}\" - ", "http://localhost:51005/XYZ/" + url); //Works

        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();
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

ファイルが同じドメインにある場合のエラー メッセージ

「/」アプリケーションでサーバー エラーが発生しました。リソースが見つかりません。

説明: HTTP 404。探しているリソース (またはその依存関係の 1 つ) は、削除されたか、名前が変更されたか、一時的に利用できない可能性があります。次の URL を見直して、スペルが正しいことを確認してください。要求された URL: /PrintArticle.aspx

バージョン情報: Microsoft .NET Framework バージョン:4.0.30319; ASP.NET バージョン:4.0.30319.272

4

2 に答える 2

0

出力変数に空の文字列が含まれている私のコードは次のとおりです。 ApptID + "&PatientID=" + 患者 ID; System.Diagnostics.Process プロセス = 新しい System.Diagnostics.Process();

        string args = string.Format("\"{0}\" - ", "http://localhost:50013/DPMNewWeb/"+url);
        //string  args="http://localhost:50013/DPMNewWeb/PrintQuickPrescription.aspx";

        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.BinaryWrite(buffer);
        Response.End();



        //byte[] fileContent = GeneratePDFFile();
        //GeneratePDFFile();
        //if (fileContent != null)
        //{
        //    Response.Clear();
        //    Response.ContentType = "application/pdf";
        //    Response.AddHeader("content-length", fileContent.Length.ToString());
        //    Response.BinaryWrite(fileContent);
        //    Response.End();
        //}
    }
    catch
    {
    }
于 2014-09-20T12:47:58.347 に答える
0

次のステートメントを使用してこの問題を解決しました

var url = Request.Url.GetLeftPart(UriPartial.Authority) + "/PrintArticle.aspx?articleID=" + Request["articleID"] + "&download=yes&Language=" + Request["Language"];

ファイルパスを指定したときに何が機能しないのかわかりません。

于 2012-07-05T10:40:00.657 に答える