C# 用C语言打印多页Tiff#

C# 用C语言打印多页Tiff#,c#,printing,tiff,C#,Printing,Tiff,我正在尝试打印多维tiff。此tiff使用变量imagetoprint有3个页面。所以我写了下面的代码,不幸的是它只打印第一个维度。所有其他的都印在空纸上。如果我将图像从内存保存到文件,irfanview将正确显示所有页面 谁能给我一个提示 public void print(Bitmap imageToPrint, string printerName, int pagesToPrint) { try { printmap = imageToPrint; cur_pa

我正在尝试打印多维tiff。此tiff使用变量imagetoprint有3个页面。所以我写了下面的代码,不幸的是它只打印第一个维度。所有其他的都印在空纸上。如果我将图像从内存保存到文件,irfanview将正确显示所有页面

谁能给我一个提示

 public void print(Bitmap imageToPrint, string printerName, int pagesToPrint)
 {
  try
  {
   printmap = imageToPrint;

   cur_page = 0;
   max_pages = pagesToPrint;

   m.Top = 1 * dpi; // Set a 1' margin, from the top
   m.Left = 1.25f * dpi; // Set a 1.25' margin, from the left
   m.Bottom = printmap.Height - m.Top; // 1', from the bottom
   m.Right = printmap.Width; // rechter Rand so weit wie es eben geht
   m.Width = printmap.Width - (m.Left * 2); // Get the width of our working area
   m.Height = printmap.Height - (m.Top * 2); // Get the height of our working area

   pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
   if (printerName != "")
    pd.DefaultPageSettings.PrinterSettings.PrinterName = printerName;
   pd.DefaultPageSettings.Color = true; 
   pd.DefaultPageSettings.PrinterSettings.PrintFileName = "tiffprint";
   pd.DocumentName = "InstantFormsPrinting";
   if (m.Width > m.Height)
   {
    pd.DefaultPageSettings.Landscape = true;
   }
   pd.Print(); // Print

  }
  catch (Exception ex)
  {
   Console.WriteLine("Error during print preparation:" + ex.Message);
  }
 }

 // Our printing event
 public void pd_PrintPage(object sender, PrintPageEventArgs e)
 {
  Rectangle crop = new Rectangle(1, 1, 200, 200);

  try
  {              
   printmap.SelectActiveFrame(FrameDimension.Page, cur_page);
   e.Graphics.DrawImageUnscaled(printmap, new Point(0, 0)); 

   ++cur_page;
   e.HasMorePages = (cur_page < max_pages);
  }
  catch (Exception ex)
  {
   Console.WriteLine("Error during print operation:" + ex.Message);
  }
 }
public void打印(位图imageToPrint、字符串printerName、int pagesToPrint)
{
尝试
{
printmap=ImageTopPrint;
cur_page=0;
最大页数=页面停止打印;
m、 Top=1*dpi;//从顶部开始设置1'的边距
m、 Left=1.25f*dpi;//从左侧设置1.25'的边距
m、 Bottom=printmap.Height-m.Top;//1',从底部开始
m、 Right=printmap.Width;//rechter Rand so weit wie es eben geht
m、 Width=printmap.Width-(m.Left*2);//获取我们工作区域的宽度
m、 Height=printmap.Height-(m.Top*2);//获取我们工作区域的高度
pd.PrintPage+=新的PrintPageEventHandler(pd_PrintPage);
如果(printerName!=“”)
pd.DefaultPageSettings.PrinterSettings.PrinterName=PrinterName;
pd.DefaultPageSettings.Color=true;
pd.DefaultPageSettings.PrinterSettings.PrintFileName=“tiffprint”;
pd.DocumentName=“InstantFormsPrinting”;
如果(米宽>米高)
{
pd.DefaultPageSettings.scape=true;
}
pd.Print();//打印
}
捕获(例外情况除外)
{
Console.WriteLine(“打印准备期间出错:+ex.Message”);
}
}
//我们的印刷活动
public void pd_PrintPage(对象发送方,PrintPageEventArgs e)
{
矩形裁剪=新矩形(1,1200200);
尝试
{              
打印地图。选择活动框架(FrameDimension.Page,cur_Page);
e、 Graphics.DrawImageUnscaled(打印地图,新点(0,0));
++cur_页;
e、 HasMorePages=(当前页面<最大页面);
}
捕获(例外情况除外)
{
Console.WriteLine(“打印操作期间出错:+ex.Message”);
}
}
在第2页的pd_PrintPage中,有一个例外是“一般gdi问题”


到目前为止我还不知道。如果有人能提供帮助,那就太好了。

在开始打印之前,您可以将页面提取到单个位图中。

应该可以,将一个有此问题的.tiff示例文件放在文件共享服务上。您的代码对我有效。谢谢