2017-09-01 8 views
0

データベースの画像バイトデータを画像に変換するiTextSharp Image関数を使用して作成したWebページに2つの画像があります。今私は、両方の画像を1つのPDFに変換してPDFを印刷したいと考えています。 PDFの変換は機能していますが、印刷ダイアログボックスは開きません。私のコードは以下の通りです。ここでimage1image2は、2つの画像が表示されているWebページのasp:Imagesです。バイト配列から生成された画像を含むC#でのPDF文書の印刷

protected void button_print_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     byte[] img1 = null; 
     byte[] img2 = null; 
     try 
     { 
      SqlCommand select = new SqlCommand("select Image1, Image2 from Images where [email protected]", con); 
      select.Parameters.AddWithValue("@id", ViewState["ImageID"].ToString()); 
      if (con.State != ConnectionState.Open) 
      { 
       con.Open(); 
      } 
      using (SqlDataReader da = select.ExecuteReader()) 
      { 
       while (da.Read()) 
       { 
        img1 = (byte[])da["Image1"]; 
        img2 = (byte[])da["Image2"]; 
       } 
      } 
     } 
     catch 
     { 
      // throws exception 
     } 
     finally 
     { 
      if (con.State == ConnectionState.Open || con.State == ConnectionState.Broken) 
      { 
       con.Close(); 
      } 
     } 
     image1.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(img1, 0, img1.Length); 
     image2.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(img2, 0, img2.Length); 
     iTextSharp.text.Image imageOne = iTextSharp.text.Image.GetInstance(CreateThumbnail(img1)); 
     iTextSharp.text.Image imageTwo = iTextSharp.text.Image.GetInstance(CreateThumbnail(img2)); 
     Document document = new Document(PageSize.A4, 0f, 0f, 0f, 0f); 
     using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream()) 
     { 
      PdfWriter writer = PdfWriter.GetInstance(document, memoryStream); 
      document.Open(); 
      document.Add(imageOne); 
      Paragraph line = new Paragraph("----------------------------------------------------------------------------------------------------------------------------------------------------"); 
      line.Alignment = Element.ALIGN_CENTER; 
      document.Add(line); 
      document.Add(imageTwo); 
      document.Close(); 
      byte[] bytes = memoryStream.ToArray(); 
      memoryStream.Close(); 
     } 
     // CODE FOR PRINTING THE PDF DOCUMENT 
    } 
    catch 
    { 
     // throws exception 
    } 
} 

印刷ダイアログボックスを開くために使用する機能が不明です。私はPrintDialogのようなものをいくつか試しましたが、その仕組みはよくわかりません。誰かが、すべてのWebブラウザとすべてのプリンタで動作するPDFドキュメントを印刷するためのより良い方法を提案できますか?可能であれば、PDF文書を印刷するコードを使用してください。

答えて

0

これはWebアプリケーションであるため、Webブラウザで実行されています。 PDFオブジェクトをダウンロードせずにPDFオブジェクトを印刷するようにWebブラウザに指示することはできません。 PDFドキュメントをダウンロードした後でも、ダウンロード後にWebアプリケーションでPDFを自動的に印刷することはできません。

ウェブのより良いアプローチは、PDFをHTMLに変換したり、ドキュメントとそのコンテンツがウェブページだけであることをよりよく確認することです。 JavaScriptの1行を実行することによって、Webブラウザに印刷ダイアログを表示させることができます。これを自動的に使用したい場合は、ページのロード・イベントに入れることができます。

document.addEventListener("DOMContentLoaded", function() { 
    window.print(); 
}); 
+0

私のケースではどうしますか?私はイメージをコンピュータに保存していません。画像はWebページ上にあり、ボタンをクリックすると自動的にプリンタに移動します。そのため、私はWebページ上の画像を使って自分でPDFを作成しています。 –

+0

あなたは、PDFの変換が機能していたので、画像が入っていると思ったので、あなたの質問は印刷する方法ではなく、PDFの画像を正しい方法で取得する方法です。 –

+0

いいえいいえ。画像をPDFに変換しています。しかし、PDFに変換した後は、PDFをコンピュータに保存せずに、印刷ダイアログで自動的に開きます。 –

関連する問題