2010-09-20 84 views
4

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

谁能给我一个提示?

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); 
    } 
} 

第2页pd_PrintPage thows与 “一般的GDI问题”

例外,我不知道这么远。如果有人能提供帮助,这将是非常好的。

+0

应该工作,把这个问题的示例.tiff文件放在文件共享服务上。 – 2010-09-20 17:52:42

+0

你的代码适合我。谢谢! – Ryan 2011-05-19 22:52:57

回答

3

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

+0

这种方法适用于我。 – unclepaul84 2010-09-20 15:43:34