Chương trình của tôi: Chứa biểu mẫu có ít hộp văn bản và một nút. 'Máy in mặc định' được đặt là Adobe PDF trên máy tính của tôi.In biểu mẫu/UserControl trong C#
Mục tiêu của tôi: Muốn chụp ảnh màn hình biểu mẫu/điều khiển người dùng khi người dùng nhấp vào nút 'In'. Ảnh chụp màn hình sau đó được lưu trên màn hình ở định dạng .pdf.
Vấn đề của tôi: Tôi đã sau hai vấn đề với mã:
- Kích thước của ảnh chụp màn hình: Kích thước của ảnh chụp màn hình quá lớn và nó không phù hợp với kích thước của trang (mặc định kích thước trang) khi được in/chuyển đổi thành .pdf. Vui lòng tham khảo hai hình ảnh dưới đây. Tôi muốn toàn bộ ảnh chụp màn hình vừa với trang.
- Yêu cầu hai lần để chuyển đổi và lưu: Khi tôi nhấp vào nút 'In biểu mẫu', chương trình sẽ hỏi tôi hai lần để in/chuyển đổi và lưu tệp. Tôi muốn chương trình hỏi tôi chỉ một lần, nơi để in và lưu tệp.
Bài toán 1: Ảnh chụp màn hình được chụp bởi chương trình không vừa với trang khi in.
Tôi muốn hình ảnh chụp màn hình để phù hợp như thế này trên một trang của .pdf:
Code:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.Text = "Print Form";
button1.Click += new EventHandler(button1_Click);
printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);
this.Controls.Add(button1);
}
private void button1_Click(object sender, EventArgs e)
{
CaptureScreen();
printDocument1.Print();
}
Bitmap memoryImage;
private void CaptureScreen()
{
Graphics myGraphics = this.CreateGraphics();
Size s = this.Size;
memoryImage = new Bitmap(s.Width, s.Height, myGraphics);
Graphics memoryGraphics = Graphics.FromImage(memoryImage);
memoryGraphics.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, s);
}
private void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(memoryImage, 0, 0);
}
}
Nhờ sự giúp đỡ của bạn trước. Tôi là một newbie, học ngôn ngữ C# và sự giúp đỡ của bạn sẽ được nhiều người đánh giá cao. :)
Hãy xem Q/A này để biết ví dụ về tỷ lệ hình ảnh C#: http://stackoverflow.com/questions/249587 –
Đối với vấn đề thứ hai (hộp thoại đôi), đây chỉ là phỏng đoán nhưng hãy thử xóa dòng này 'printDocument1 .PrintPage + = ... 'từ hàm tạo của bạn. Tôi đoán rằng điều này đã xảy ra bên trong 'InitializeComponent()' có nghĩa là bạn đang xử lý một cách rõ ràng sự kiện hai lần. Mở tệp Form1.Designer.cs của bạn để xem liệu có những thứ khác mà bạn đang sao chép hay không. (Ngoại trừ Init của bạn gọi mọi thứ khác trong hàm khởi tạo có thể không cần thiết.) –
@PaulSasik: Không. Đối với vấn đề 2, loại bỏ dòng đó cho tôi một tệp PDF trắng và không thể lưu nó. ._. – Smith