我设置了一个简单的打印解决方案,正常打印工作正常(测试了几次),但是当我使用 PrintDialog 指定自定义页面范围时,就好像该范围被忽略了。当我调试时,我检查 printDocument 对象并确认范围值是正确的,但打印机生成的最终产品与我给出的值并不多。
这是我的代码:
printDialog.Document = printdoc;
printDialog.AllowSomePages = true;
if (printDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
printdoc.PrinterSettings.FromPage = printDialog.PrinterSettings.FromPage;
printdoc.PrinterSettings.ToPage = printDialog.PrinterSettings.ToPage;
printdoc.PrinterSettings.PrintRange = printDialog.PrinterSettings.PrintRange;
printPreviewDialog.Document = printdoc;
printPreviewDialog.FindForm().WindowState = FormWindowState.Maximized;
printPreviewDialog.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
*注意 - printdoc 是 System.Drawing.Printing.PrintDocument 的一个实例。我在 PrintDocument 的 PrintPage 事件处理程序中添加了代码来填充我正在打印的页面。
如果我运行此代码,并在PrintDialog上按取消,它仍会打印.如何判断使用是否取消?
PrintDocument document = new PrintDocument();
PrintDialog dialog = new PrintDialog();
dialog.ShowDialog();
document.PrinterSettings = p.PrinterSettings;
document.Print();
Run Code Online (Sandbox Code Playgroud)
附录
WebBrowser w = new WebBrowser();
w.ShowPrintDialog(); //.ShowPrintDialog returns a void, how can I deal with this?
Run Code Online (Sandbox Code Playgroud) 我想显示一个打印机对话框但是当我运行以下代码时,它会在ShowPrinterDialog打开时立即打印.换句话说,它不会等待ShowPrinterDialog在打印前关闭.
WebBrowser browser = new WebBrowser();
browser.DocumentText = "<b>Stack Overflow FTW!</b>";
browser.DocumentCompleted += Browser_DocumentCompleted;
void Browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
((WebBrowser)sender).ShowPrinterDialog();
((WebBrowser)sender).Print();
}
Run Code Online (Sandbox Code Playgroud)
有想法该怎么解决这个吗?
我正在使用PrinterJob对象来打印我的Bufferedimage,我有一个BufferedImage,我将其处理并将其发送到具有Paper Format等的Printer作业,但是我无法使其适合我的证卡打印机。当我将其保存到硬盘上并通过Windows打印管理器进行打印时,它在我的证卡打印机上打印得很好,但是使用PrinterJob时,它太大了,无法容纳证卡
卡的尺寸为86X54mm,缓冲图像的尺寸为1300x816px代码:
PrinterJob printjob = PrinterJob.getPrinterJob();
printjob.setJobName("CardPrint");
Printable printable = new Printable() {
public int print(Graphics pg, PageFormat pf, int pageNum) {
if (pageNum > 0) {
return Printable.NO_SUCH_PAGE;
}
JLayeredPane j1 = new JLayeredPane();
Dimension size = j1.getSize();
j1.print(bi.getGraphics());
Graphics2D g2 = (Graphics2D) pg;
g2.translate(pf.getImageableX(), pf.getImageableY());
g2.drawImage(bi, 0, 0, (int) pf.getWidth(), (int) pf.getHeight(), null);
return Printable.PAGE_EXISTS;
}
};
Paper paper = new Paper();
paper.setImageableArea(0, 0, 0, 0);
paper.setSize(1.15, 0.72);
PageFormat format = new PageFormat();
format.setPaper(paper);
printjob.setPrintable(printable, format);
try …
Run Code Online (Sandbox Code Playgroud)