c\#웹 인쇄 플러그 인 을 어떻게 실현 합 니까?
당시 의 첫 번 째 반응 은 플러그 인 을 찾 는 것 이 었 다.가 져 오기 주 의 는 영원히 시대 에 뒤떨어 지지 않 았 다.한 바퀴 둘 러 보 니 무료 로 제한 이 있 고 제한 이 없 는 요금 이 필요 하 다(LODOP 정말 쓰기 좋다).말하자면 간단 한 미리 보기 인쇄 가 없고 비용 을 받 는 여러 기능 이 쓸모 가 없 으 며 전체적으로 성적 인 가격 이 낮 기 때문에 스스로 생각해 서 쓰 려 고 한다.처음에는 웹 쪽 에서 직접 인쇄 를 하 는 것 에 얽 매 였 고 인쇄 는 실현 되 었 으 며 결 과 는 서버 쪽 이 었 고 클 라 이언 트 는 어리둥절 할 수 밖 에 없 었 습 니 다.
나중에(타협 준비)유 료 플러그 인 을 설치 한 결과 클 라 이언 트 프로그램 을 먼저 설치 해 야 한 다 는 것 을 알 게 되 었 습 니 다.영광 이 나타 나 면 해결 방안 이 나 오지 않 습 니까?
사고방식:웹 에서 클 라 이언 트 프로그램 을 호출 하여 클 라 이언 트 프로그램 이 인쇄 를 실현 하도록 합 니 다.
실현:웹 사 이 드 는 웹 소켓 을 통 해 Html 을 클 라 이언 트 에 보 내 고 클 라 이언 트(Winform)가 메 시 지 를 감청 하 며 처리 한 후에 인쇄 합 니 다.
클 라 이언 트(Winform)인쇄 구현 방식:
1.Html 에서 PDF 를 변환 한 다음 에 PDF 를 출력 합 니 다.
2.Html 에서 그림 을 돌 린 다음 에 PrintDocument 를 통 해 그림 을 인쇄 합 니 다.
3.웹 브 라 우 저 를 통 해 인쇄
위의 생각 대로 코드 를 쓰 면 훨씬 간단 할 것 이다.
웹 엔 드 의 코드 는 더 이상 말 하지 않 겠 습 니 다.간단 한 웹 소켓 통신 입 니 다.
클 라 이언 트 프로그램(Winform)
1.웹 엔 드 의 웹 소켓 정 보 를 감청 합 니 다.여 기 는 세 가지 가방 이 있 습 니 다.Fleck,상 자 를 열 면 바로 사용 할 수 있 고 매우 편리 합 니 다.
/// <summary>
/// ConnAndListen
/// </summary>
public static void ConnAndListen()
{ // 45000
var server = new WebSocketServer($"ws://127.0.0.1:45000");
server.Start(socket =>
{
socket.OnOpen = () =>
{
//
socket.Send("socket ");
};
socket.OnClose = () =>
{
//
socket.Send("socket ");
socket.Close();
};
socket.OnMessage = message =>
{
// TODO...
};
});
}
2.Html 을 처리 하고 Html 을 그림 으로 변환 합 니 다.
/// <summary>
/// GetBitmap
/// </summary>
/// <returns></returns>
public Bitmap GetBitmap()
{
WebPageBitmap Shot = new WebPageBitmap("html", " ", " ");
Shot.GetIt();
Bitmap Pic = Shot.DrawBitmap(" ", " ");
//
Pic.SetResolution(203.0F, 203.0F);
return Pic;
}
3.그림 인쇄
/// <summary>
///
/// </summary>
public class PrintDirectClass
{
private PaperSize paperSize = null;
//
private int printNum = 0;
//
private string imageFile = ".....";
//
private ArrayList imageList = new ArrayList();
/// <summary>
///
/// </summary>
public void PrintPreview()
{
//
PrintDocument imgToPrint = new PrintDocument();
#region
var pageSize = imgToPrint.PrinterSettings.PaperSizes;
paperSize = pageSize[pageSize.Count - 1];
//
//imgToPrint.DefaultPageSettings.Landscape = false;
//
//imgToPrint.DefaultPageSettings.PaperSize = paperSize;
//
//imgToPrint.DefaultPageSettings.PrinterResolution.Kind = PrinterResolutionKind.High;
//
//imgToPrint.DefaultPageSettings.Margins = new Margins(40, 40, 40, 40);
//
imgToPrint.BeginPrint += new PrintEventHandler(this.imgToPrint_BeginPrint);
//
imgToPrint.EndPrint += new PrintEventHandler(this.imgToPrint_EndPrint);
//
imgToPrint.PrintPage += new PrintPageEventHandler(this.imgToPrint_PrintPage);
#endregion
//
//imgToPrint.Print();
//
//PrintDialog printDialog = new PrintDialog();
//printDialog.AllowSomePages = true;
//printDialog.ShowHelp = true;
//printDialog.Document = imgToPrint;
//if (printDialog.ShowDialog() == DialogResult.OK)
//{
// imgToPrint.Print();
//}
//
//PrintPreviewDialog pvDialog = new PrintPreviewDialog();
//pvDialog.Document = imgToPrint;
//pvDialog.ShowDialog();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void imgToPrint_BeginPrint(object sender, PrintEventArgs e)
{
if (imageList.Count == 0)
imageList.Add(imageFile);
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void imgToPrint_EndPrint(object sender, PrintEventArgs e)
{
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void imgToPrint_PrintPage(object sender, PrintPageEventArgs e)
{
//
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
//
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
//
e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
//
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
//
e.Graphics.PageScale = 0.3F;
using (Stream fs = new FileStream(imageList[printNum].ToString().Trim(), FileMode.Open, FileAccess.Read))
{
System.Drawing.Image image = System.Drawing.Image.FromStream(fs);
int w = image.Width;
int h = image.Height;
// Image
e.Graphics.DrawImage(image, 40, 40, 410, 600);
if (printNum < imageList.Count - 1)
{
printNum++;
// HasMorePages true PrintPage
e.HasMorePages = true;
return;
}
e.HasMorePages = false;
}
//
//e.PageSettings.Margins = new Margins(40, 40, 40, 40);
//
e.PageSettings.Landscape = false;
//
e.PageSettings.PaperSize = paperSize;
//
e.PageSettings.PrinterResolution.Kind = PrinterResolutionKind.High;
}
}
이상 은 Html 에서 그림 을 돌 린 다음 에 PrintDocument 를 통 해 그림 을 인쇄 하 는 실현 코드 입 니 다.다른 두 가지 방식 은 모두 가 관심 이 있 으 면 한번 해 보 세 요.웹 브 라 우 저 는 간단 하지만 프린터 제어 에 그다지 우호 적 이지 않 습 니 다.(제 가 발견 하지 못 했 을 수도 있 고 연구 가 깊 지 않 을 수도 있 습 니 다)
WebBrowser wb = new WebBrowser();
//
wb.Print();
//
wb.ShowPrintDialog();
//
wb.ShowPrintPreviewDialog();
Html 에서 PDF 를 돌 린 다음 에 PDF 원 리 를 Html 에서 그림 을 돌 린 다음 에 PrintDocument 을 통 해 그림 을 인쇄 하 는 것 과 마찬가지 로 PDF 를 돌 리 는 데 제3자 가방 이 필요 할 수 있 습 니 다.현재 이 편리 한 가방 은 비교적 완비 되 어 있 습 니 다.NUGET 에서 pdf 를 검색 하 는 것 은 거의 전부 입 니 다.수 요 는 항상 갑 작 스 럽 게 온다.다음 에 또 새로운 특별한 수요 가 있 을 때 다시 여러분 과 나 누 겠 습 니 다.
기타 실현 사고
제 1 종
인쇄 클 라 이언 트 를 설치 하여 grid++로 인쇄 템 플 릿 을 실현 합 니 다.
웹 소켓 서버 클 라 이언 트 가 정 보 를 받 은 다음 템 플 릿 을 조립 하여 인쇄 하면 됩 니 다.
두 번 째
웹 브 라 우 저 를 통 해 인쇄 기능 을 구현 합 니 다.텍스트 에 만 적 용 됩 니 다.
//
webBrowser.Navigate("");
//
webBrowser.Print();
//
webBrowser.ShowPrintPreviewDialog();
//
webBrowser.ShowPrintDialog();
이상 은 c\#웹 인쇄 플러그 인 을 어떻게 실현 하 는 지 에 대한 상세 한 내용 입 니 다.c\#웹 인쇄 플러그 인 을 실현 하 는 데 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.