RichTextBox의 내용을 인쇄하려고 시도했지만 프린터로 인쇄 할 때 너무 많은 버그가 있습니다. 그러나 XPS- 파일 (Windows의 XPS- 프린터를 통해)로 인쇄 할 때이 파일을 프린터로 인쇄하면 모두 정상입니다.XPS 파일로 인쇄 한 다음 프린터로 인쇄하십시오.
프로그래밍으로 이러한 모든 작업을 수행 할 수 있습니까?
여기 내 인쇄 방법 :
public int PrintRotate(bool rotate, PrintPageEventArgs e, int charFrom, int charTo)
{
//Calculate the area to render and print
RECT rectToPrint;
rectToPrint.Top = (int)(e.MarginBounds.Top * anInch);
rectToPrint.Bottom = (int)(e.MarginBounds.Bottom * anInch);
rectToPrint.Left = (int)(e.MarginBounds.Left * anInch);
rectToPrint.Right = (int)(e.MarginBounds.Right * anInch);
//Calculate the size of the page
RECT rectPage;
rectPage.Top = (int)(e.PageBounds.Top * anInch);
rectPage.Bottom = (int)(e.PageBounds.Bottom * anInch);
rectPage.Left = (int)(e.PageBounds.Left * anInch);
rectPage.Right = (int)(e.PageBounds.Right * anInch);
IntPtr hdc = e.Graphics.GetHdc();
FORMATRANGE fmtRange;
fmtRange.chrg.cpMax = charTo; //Indicate character from to character to
fmtRange.chrg.cpMin = charFrom;
fmtRange.hdc = hdc; //Use the same DC for measuring and rendering
fmtRange.hdcTarget = hdc; //Point at printer hDC
fmtRange.rc = rectToPrint; //Indicate the area on page to print
fmtRange.rcPage = rectPage; //Indicate size of page
SetGraphicsMode(fmtRange.hdc, GM_ADVANCED);
XFORM par = new XFORM();
par = new XFORM();
par.eM11 = 1;
par.eM12 = 0;
par.eM21 = 0;
par.eM22 = 1;
par.eDx = -e.PageSettings.Margins.Left/100 * e.PageSettings.PrinterResolution.X;
par.eDy = -e.PageSettings.Margins.Top/100 * e.PageSettings.PrinterResolution.Y;
ModifyWorldTransform(fmtRange.hdc, ref par, MWT_LEFTMULTIPLY);
IntPtr res = IntPtr.Zero;
IntPtr wparam = IntPtr.Zero;
wparam = new IntPtr(1);
//Get the pointer to the FORMATRANGE structure in memory
IntPtr lparam = IntPtr.Zero;
lparam = Marshal.AllocCoTaskMem(Marshal.SizeOf(fmtRange));
Marshal.StructureToPtr(fmtRange, lparam, false);
//Send the rendered data for printing
res = SendMessage(Handle, EM_FORMATRANGE, wparam, lparam);
//Free the block of memory allocated
Marshal.FreeCoTaskMem(lparam);
//Release the device context handle obtained by a previous call
e.Graphics.ReleaseHdc(hdc);
//Return last + 1 character printer
return res.ToInt32();
}
당신은 이것을위한 해결책을 찾았습니까? 나는 똑같은 일을하려고합니다. –
불행히도 없습니다. 이 일은 나에게 우선 순위가 낮습니다. –
나는 이것에 대한 해결책을 원한다. – Jeff