在.NET 3.5中工作。
摘要:
试图复制现有第三方组件的功能,该组件在Windows 7中中断。到目前为止,用户可以选择一组图像文件打印,为每个图像指定一个页面大小,然后将它们发送出去,一次打印所有文件。在打印每一页时,我迫切需要一个概念上的解释,说明如何进行打印,动态切换页面大小。
详细信息
到目前为止,我已经知道如何打印多个图像,所有相同的页面大小。我使用图像列表并使用PrintDocument对象,将PrintPageEventArgs的HasMorePages属性设置为true,直到到达列表的末尾为止。
下面是我迅速拼凑在一起来测试这个的一个类:
public partial class Form1 : Form
{
private List<Image> images { get; set; }
private PrintDocument printDocument { get; set; }
public Form1()
{
InitializeComponent();
this.images = new List<Image>();
this.images.Add(Image.FromFile(@"C:\test60.bmp"));
this.images.Add(Image.FromFile(@"C:\SuperLargeTest.jpg"));
this.printDocument = new PrintDocument()
{
PrinterSettings = new PrinterSettings()
};
this.printDocument.PrintPage += printDocument_PrintPage;
}
private void printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
Graphics g = e.Graphics;
e.PageSettings.PaperSize = this.paperSizes[this.currentImageIndex];
RectangleF marginBounds = e.MarginBounds;
RectangleF printableArea = e.PageSettings.PrintableArea;
int availableWidth = (int)Math.Floor(printDocument.OriginAtMargins ? marginBounds.Width : (e.PageSettings.Landscape ? printableArea.Height : printableArea.Width));
int availableHeight = (int)Math.Floor(printDocument.OriginAtMargins ? marginBounds.Height : (e.PageSettings.Landscape ? printableArea.Width : printableArea.Height));
g.DrawRectangle(Pens.Red, 0, 0, availableWidth - 1, availableHeight - 1);
g.DrawImage(this.images[currentImageIndex], printableArea);
e.HasMorePages = ++currentImageIndex < this.images.Count();
}
private void button1_Click(object sender, EventArgs e)
{
this.printDocument.OriginAtMargins = false;
this.printDocument.Print();
}
}我真正搞不懂的是,如何改变第二张图片的页面大小。如果我希望在A4中打印第一张图像,然后在A3上打印第二张图像,我将如何做到这一点?
我发现这个SO question here似乎建议改变PrintPageEventArgs中的PageSize,但那里没有joy。
我还尝试使用QueryPageSettingsEventArgs事件并在那里设置PageSettings,但这似乎也不起作用.
我想要实现的是打印多页大小不同的单一文件。任何建议、链接、解释、示例代码都将不胜感激。
C#或VB.NET中的任何东西都可以。
发布于 2013-06-12 13:29:38
在VB.NET ..。你可以用这个子..。
DocPrint是PrintDocument var
Sub SetPaperSize(ByVal nKind As PaperKind)
Dim ps As PaperSize
For ix As Integer = 0 To DocPrint.PrinterSettings.PaperSizes.Count - 1
If DocPrint.PrinterSettings.PaperSizes(ix).Kind = nKind Then
ps = DocPrint.PrinterSettings.PaperSizes(ix)
DocPrint.DefaultPageSettings.PaperSize = ps
End If
Next
End Sub希望能帮上忙..。
发布于 2014-01-07 10:43:53
这也是我的工作。
翻译成C#:
private bool SetPaperSize(PrintDocument pd, PaperKind nKind)
{
foreach(System.Drawing.Printing.PaperSize ps in pd.PrinterSettings.PaperSizes)
{
if (ps.Kind == nKind)
{
pd.DefaultPageSettings.PaperSize = ps;
return true;
}
}
return false;
}发布于 2017-05-11 15:08:22
如果希望所有页面都显示为一个作业(简而言之,避免与其他作业交织),则可以通过更改PrintPage对象的默认页大小来设置PrintDocument事件处理程序中下一页的页大小。
https://stackoverflow.com/questions/17062558
复制相似问题