0

重複の可能性:
ASP.NET C#でPDFを開いた後、Webページのフォントを変更しないようにするにはどうすればよいですか?

以前、私はこの質問を投稿しました:

ASP-NET c#で特定のルートからファイルを開く方法は?

実際、私はすでにこれを質問しましたが、それはマイナーな質問にすぎなかったので、前回の投稿ではそれほど重要ではなかったと思うので、ここで質問します。

私がPDFを開くときはいつでも:

Response.Write("<script>window.open('FilePath');</script>");

ページ内のすべてのフォントが変更されます。たとえば、文字のサイズが大きくなり、文字の色の一部が、割り当てたフォントではなく黒に切り替わります。

それを回避する方法はありますか?

http://imageshack.us/a/img838/5145/beforeja.png

http://imageshack.us/a/img546/4760/afterw.png

ああ、私はあなたがjpgのような画像を開いたときにもこれが起こることに気づきました

4

1 に答える 1

1

この特定のケースでは、Response.Writeを使用して直接書き込むことが最善の解決策であるかどうかはわかりません。私の記憶はこれに大げさですが、私は(ずっと前に)Response.Writeを介して出力に直接書き込みを試みたようで、あなたが説明したような奇妙な振る舞いに遭遇しました。他のSOメンバーは、これが発生する理由をより詳しく説明できるはずですが、Response.Writeが目的の動作を実現するかどうかについては、ページのライフサイクルとIISストリームのどこにいるかに少し関係があると思います。ファイルをクライアントに直接プッシュする場合は、MVCを検討してください。MVCを使用すると、FilePathResultクラスを介してファイルをクライアントに直接プッシュすることがはるかに簡単になります。必要に応じて、MVCとWebFormsを組み合わせて組み合わせることができます。スコットハンスレマンはここでこれを行う方法を示しています。

ただし、WebFormsを使い続けたい場合は、RegisterStartupScriptを使用して、それぞれのボタンをクリックして2つのローカルPDFのいずれかを開く方法を示す簡単なページをまとめました。

ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Register Startup Script Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="bnOpenTest1PDF" runat="server" 
         OnClick="opnTest1PDF" Text="OpenPDF1" />
        <asp:Button ID="bnOpenTest2PDF" runat="server" 
         OnClick="opnTest2PDF" Text="OpenPDF2" />
    </div>
    </form>
</body>
</html>

コードビハインド:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void opnTest1PDF(Object sender, EventArgs e)
    {
        Page.ClientScript.RegisterStartupScript(
            this.GetType(),
            "myFileOpenScript",
            "<script>window.open('test1.pdf');</script>");
    }

    protected void opnTest2PDF(Object sender, EventArgs e)
    {
        Page.ClientScript.RegisterStartupScript(
            this.GetType(),
            "myFileOpenScript",
            "<script>window.open('test2.pdf');</script>");
    }
}
于 2012-09-19T21:24:23.240 に答える