2012-12-18 2 views
1

주 패널이 FlowLayoutPanel이며 정확히 인쇄하고 싶은 양식이 있습니다. 서식있는 문서처럼 보이도록 설계되었습니다 ... 단추를 누르지 않고 명령을 마우스 오른쪽 단추로 누르십시오).화면 크기보다 큰 인쇄를 위해 Form 또는 FlowLayoutPanel의 크기를 조정하려면 어떻게해야합니까?

그래서 DrawToBitmap을 사용하여 거의 무료로 인쇄를 구현합니다 ... 기본 패널의 크기가 사용자가 인쇄 할 용지의 크기 (여백 빼기)가되도록 간단히 크기를 조정합니다. 해당 크기에 맞게 내용을 자동으로 흐르게합니다. 그런 다음 DrawToBitmap을 사용하여 해당 FlowLayoutPanel 및 모든 내용을 인쇄 된 페이지로 렌더링합니다. 페이지 크기 (동일한 가로 세로 비율)보다 큰 창을 늘린 다음 DrawToBitmap에서 얻은 비트 맵을 축소하여 크기를 조정할 수도 있습니다. 훌륭한 작품 ...

하지만 화면이 페이지 크기보다 큰 경우에만 작동합니다. 폼 또는 컨트롤의 크기를 화면 크기 + 12 픽셀 이상으로 조정하려고 시도하면 방해가됩니다.

어! 스크린보다 큰 크기의 크기 조정을 거부하여 응용 가능성을 없애려면 DrawToBitmap의 단순성과 유용성을 왜 애타게 생각하니? (수사학)

내 질문 :

화면보다 큰 크기를 조절 양식 또는 FlowLayoutPanel을 그 한계를 우회 얻을 수있는 방법이 있나요?

그렇지 않은 경우 FlowLayoutPanel의 스크롤 된 표면 (보기로 스크롤 된 부분뿐만 아니라)에 인쇄 된 페이지와 일치하도록 크기를 조정할 수있는 방법이 있습니까? DrawToBitmap을 호출 할 수 있습니까?

그렇지 않은 경우 기존 레이아웃 기능을 활용하여 인쇄 할 수있는 다른 방법이 있습니까? 또는 WinForms 코드를 다시 작성하여 화면이 내 인쇄 된 페이지보다 크면 이미 생성 할 동일한 Bitmap을 생성합니다.

+0

실제로 인쇄물을 보았습니까? 당신은 화면의 모든 픽셀이 종이에 6x6 얼룩으로 바뀌는 것을 알아 차렸을 것입니다. 특히 앤티 앨리어스 텍스트는 매우 추악합니다. 불충분 한 솔루션을 만들기 전에 PrintDocument의 출력을 비교하십시오. –

+0

예, 프린트 아웃을 보았습니다 ... 6x6 얼룩이 없습니다. 텍스트는 매우 부드럽습니다. 스크린 스크래핑 (CopyFromScreen)을한다면 우리는 당신이 말하는 것을 볼 수 있습니다 ...하지만 우리는 그렇지 않습니다. 우리는 OnPaint 대신 OnPrint를 호출하여 프린터에서 생성 된 비트 맵/장치 컨텍스트 (높은 DPI ...)를 전달하는 DrawToBitmap을 수행하고 있습니다. 그래서 텍스트를 그릴 때 프린터의 고해상도를 사용합니다. 픽셀 치수는 동일하게 유지됨). 실제로 놀랍게도 잘 작동합니다. –

+0

그 말로는 Postscript 품질의 텍스트가 아니지만 ... 우리 앱은 잡지 품질의 문서를 만들려고하지 않고 있습니다 ... 엔지니어링 앱입니다 ... 그리고 엔지니어가 읽기에 만족할만한 훌륭한 해상도입니다 (그리고 그림 그리기 등). 그러나 이것은 출판이나 판매를 목적으로하는 문서를 만드는 경우에는 최선의 방법이 아닙니다. –

답변

0

확실하지 않지만 사실상이 모든 작업을 수행 할 수 있습니다. IE :

Dim FLP as FlowLayoutPanel = Form1.FlowLayoutPanel1 
For Each flp_subobject as Object in FlowLayoutPanel.Children 
    FLP.Children.Add(flp_subobject) 
Next 
FLP.Height = MASSIVEHEIGHT 
FLP.Width = MASSIVEWIDTH 
DrawToBitmapFunction(FLP) 

나는 그것이 거의 단지에 바로 내 머리에서 나온 같은 날이 어떻게되는지 알려 등 화면 제한을 초과에 내가 관련하여 많은 경험이없는 것을, 그것을 할 것입니다 방법입니다 현장 : D

+0

아직 실험 중이지만 모든 Control의 Width 및 Height 설정이 화면 크기에 비해 최대 인 것으로 보입니다. FlowLayoutPanel의 논리를 다시 구현하여 각 어린이의 비트 맵을 취한 다음 자신을 인쇄면에 직접 레이아웃 레이아웃으로 조립할 수 있습니다. 그러나 하나의 "최대"변수로 인해 바퀴를 다시 만드는 것을 싫어합니다. –