1

複数のフレームを持つ単一のtiffファイルを印刷しようとしています。ただし、javascript(window.print())を使用すると、tiff画像だけでなくWebページ全体が印刷されます。

そこで、StackOverflowを見回して、サンプルコードを見つけました。私はそれを実装しようとしましたが、問題はコードが絶対画像URLに対して機能することです:-「C:\img.jpeg」など

imgFax.ImageUrlを実際の画像名に変換する方法を誰かに教えてもらえませんか?(そうでない場合、エラーが発生します:-"パスに不正な文字があります" <--- System.Drawing.Image img = System.Drawing.Image.FromFile(imgFax.ImageUrl); code)

誰かが私に素晴らしいサンプルコードを見せてくれるなら!ありがとう。

protected void PrintAll_Click(object sender, EventArgs e) 
{ 
  // number of frames 
  int number = _FaxPages.Count; 


 // for loop to iterate through each frame 
 for (int i = 0; i < number; i++) 
  { 
     // fax ID 
     string _FaxId = Page.Request["FaxId"]; 

     //string _Frame = Page.Request["Frame"]; 

     // current frame 
     _PageIndex = i; 

     // IMG URL 
     imgFax.ImageUrl = "ShowFax.ashx?n=" + _FaxId + "&f=" + _PageIndex + "&mw=750"; 



     PrintDocument pd = new PrintDocument(); 

     pd.PrintPage += PrintPage; 
     pd.Print();   

 }      

}

private void PrintPage(object o, PrintPageEventArgs e) 
{ 
   System.Drawing.Image img = System.Drawing.Image.FromFile(imgFax.ImageUrl); 
   Point loc = new Point(100, 100); 
   e.Graphics.DrawImage(img, loc); 
} 
4

3 に答える 3

1

PrintDocumentを介してASPで印刷できるかどうかはわかりません。これはすべてサーバー側のコードですが、印刷は-でクライアントのブラウザによって実行されます。JavaScriptを介して行う必要があると思いますが、ページ全体を印刷しないでください。印刷するコンテンツのみを表示する別のページを作成してから、ユーザーをその小さなページにリダイレクトする必要があります(たとえば、ポップアップウィンドウ)、javascriptを介して自動印刷します。私は100%確実ではありませんが、私が使用するすべての銀行サイトはそれに準拠しているようであり、これは一般的に非常に一般的です。

たとえば、この正確なアプローチに関する記事は次のとおりです。http: //www.dotnetcurry.com/ShowArticle.aspx?ID=92

小さな「印刷ページ」には、実際に印刷したいものが表示されることを覚えておいてください:)

画像の印刷に関するもう1つの優れたリンク:http://forums.asp.net/post/3369436.aspx

于 2012-10-01T20:35:35.013 に答える
0

ここに示すように、単一のtiff画像を個別のファイルに分割し、画像ごとに一意のURLを設定できます。

static String[] SplitFile(String file_name)
{
    System.Drawing.Image imageFile = System.Drawing.Image.FromFile(file_name);
    System.Drawing.Imaging.FrameDimension frameDimensions = new System.Drawing.Imaging.FrameDimension(imageFile.FrameDimensionsList[0]);
    int NumberOfFrames = imageFile.GetFrameCount(frameDimensions);
    string[] paths = new string[NumberOfFrames];
    for (int intFrame = 0; intFrame < NumberOfFrames; ++intFrame)
    {
        imageFile.SelectActiveFrame(frameDimensions, intFrame);
        Bitmap bmp = new Bitmap(imageFile);
        paths[intFrame] = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + @"\" + intFrame.ToString() + ".tif";
        bmp.Save(paths[intFrame], System.Drawing.Imaging.ImageFormat.Tiff);
        bmp.Dispose();
    }
    imageFile.Dispose();
    return paths;
}
于 2012-10-01T20:35:52.573 に答える
0

ええ、わかりました。私はすでに何かに答えたのは知っていますが、あなたが質問を太字でマークしていることに気づきました。だからここにあります:あなたはできません、方法はありません。

画像を指すURLは、単なるインターネットリンクです。画像、ウェブサイト、またはバイナリデータを指している可能性があります。リモートWebサーバーはURLパラメーターを読み取り、それをどう処理するかを決定します。ファイル名は一切ありません。ウェブページ「ShowFax.ashx」のURLとそのパラメータのみ。

一部のWebページでは、特別なヘッダー、content-disposition / attachmentが返される場合があり、そのヘッダーでファイル名が提供される場合があります。これは、「ダウンロード」Webページがブラウザに情報を提供する方法であり、ユーザーに「ファイルに名前を付けて保存」ウィンドウを表示する場合があります。ただし、おそらくそうではありません。URLから画像を読み取るだけのaspxコントロールに画像を表示しています。これはすべてコントロールによって自動化されているため、ヘッダーをピークする機会すらありません。もちろん、リクエストを手動で送信し、ストリームをキャプチャし、ピークし、コントロールにリダイレクトするなどの場合を除きます。印刷の簡単な作業のための仕事、そしてそれはほんの始まりに過ぎません!

于 2012-10-01T20:56:32.720 に答える