Gå til innhold

Printe med fonts og farger


Anbefalte innlegg

Jeg lager en Rich Text program, men jeg har et lite problem med printe funksjonen.

Når jeg printer ut kommer det ikke noe bilder eller farger eller teksttyper, bare vanlig kjedelig skrift med liten skriftstørelse.

Hvordan kan jeg gjøre sånn at jeg får printa ut forskjellige fonts, farger og bilder?

Koden min:

		PrintDialog1.Document = PrintDocument1
	If PrintDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
		PrintDocument1.Print()
	End If

Lenke til kommentar
Videoannonse
Annonse

public System.Drawing.Printing.PrintDocument Document { get { return m_document; } }

public EditorForm()
{
 m_comps = new List<BaseComponent>();
 m_sel = new List<BaseComponent>();
 arrow_pen = new Pen(Brushes.LightGreen);
 arrow_pen.EndCap = LineCap.ArrowAnchor;
 InitializeComponent();
 zoom = 1.0f;
 m_meta = new Dictionary<string, string>();
 m_filename = "";
 [b]m_document = new System.Drawing.Printing.PrintDocument();[/b]
 [b]m_document.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(m_document_PrintPage);[/b]
 UpdatePageBounds();
}

 

Er constructoren for Editor formen i ElectroShack programmet mitt

De linjene som er i fet skrift er relatert til print funksjonen

 

void m_document_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
 [b]Print(e.Graphics);[/b]
 e.HasMorePages = false;
}

 

public void Print(Graphics g)
{
 BaseComponent.StandardPen = Pens.Black;
 BaseComponent.PrintMode = true;
 [b]Render(g);[/b]
}

 

Render funksjonen er egendefinert, men hvis du synes det kan hjelpe, slenger jeg den med her.

 

Klikk for å se/fjerne innholdet nedenfor
public void Render(Graphics g)
{
 foreach (BaseComponent comp in m_comps)
 {
if (float.IsNaN(comp.Transform.OffsetX) || float.IsNaN(comp.Transform.OffsetY))
comp.Transform = new Matrix(comp.Transform.Elements[0], comp.Transform.Elements[1], comp.Transform.Elements[2], comp.Transform.Elements[3], 0, 0);

// Get object center
PointF center = new PointF(comp.Transform.OffsetX, comp.Transform.OffsetY);
// Store object position
PointF offset = new PointF(comp.Transform.OffsetX, comp.Transform.OffsetY);
PointF[] pts = new PointF[] { center };

comp.Render(g);

if (!BaseComponent.PrintMode)
{

  if (m_sel.Contains(comp))
  {
	// Store matrix
	Matrix mat = g.Transform;
	g.MultiplyTransform(comp.Transform);

	Rectangle rect = new Rectangle((int)comp.Bounds.X - 2, (int)comp.Bounds.Y - 2, (int)comp.Bounds.Width + 4, (int)comp.Bounds.Height + 4);
	g.DrawRectangle(BaseComponent.StandardPen, rect);

	// Restore matrix
	g.Transform = mat;
	if (is_rotating)
	{

	  g.FillPie(new SolidBrush(Color.FromArgb(64, Color.Red)), center.X - 16, center.Y - 16, 32, 32, 0, rotate_angle / ((float)Math.PI / 180));
	  g.DrawEllipse(Pens.White, new RectangleF(center.X - 16, center.Y - 16, 32, 32));

	  g.DrawLine(arrow_pen, center.X, center.Y, center.X + (float)Math.Cos(rotate_angle) * 15.0f, center.Y + (float)Math.Sin(rotate_angle) * 15.0f);
	}
  }
}
 }

 if (start_connector != null)
 {
Pen connector_pen;
connector_pen = new Pen(BaseComponent.StandardPen.Color, 2);
connector_pen.EndCap = LineCap.ArrowAnchor;
connector_pen.DashStyle = DashStyle.Dash;
PointF[] arr = new PointF[] { start_connector.Point };
start_connector.Parent.Transform.TransformPoints(arr);
g.DrawLine(connector_pen, arr[0].X, arr[0].Y, xx, yy);
 }
}

 

Det eneste jeg sier her, er at det du skriver er det du får; dersom du skriver en font med Size 100 så er det det som dukker opp på papiret. Så du må sette fonten i riktig størrelse på dokumentet du har tenkt til å skrive ut (dersom dette er fra en RichTextBox så må du sette [RichTextBox].Font = new Font("Arial", 100) f.eks.

Lenke til kommentar

Den siste koden er ikke viktig

 

public System.Drawing.Printing.PrintDocument Document { get { return m_document; } }

Dette er en property i C#

 

I VB.NET direkte oversatt blir det slik:

 

Public ReadOnly Property Document() As System.Drawing.Printing.PrintDocument
 Get
Return m_document
 End Get
End Property

Jeg tror jeg vet hvilken av de to jeg liker best :roll:

 

 

Public Sub New()
 m_comps = new List(Of BaseComponent)
 m_sel = new List(Of BaseComponent)
 arrow_pen = new Pen(Brushes.LightGreen)
 arrow_pen.EndCap = LineCap.ArrowAnchor
 InitializeComponent()
 zoom = 1.0
 m_meta = new Dictionary(Of string, string)
 m_filename = ""
 m_document = New System.Drawing.Printing.PrintDocument()
 AddHandler m_document.PrintPage, AddressOf m_document_PrintPage
 UpdatePageBounds()
End Sub

 

Public Sub m_document_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
 Print(e.Graphics)
 e.HasMorePages = False
End Sub

 

Public Sub Print(ByVal g As Graphics)
 BaseComponent.StandardPen = Pens.Black
 BaseComponent.PrintMode = True
 Render(g)
End Sub

Endret av GeirGrusom
Lenke til kommentar

fikk en error:

Error 1 Value of type 'System.Drawing.Graphics' cannot be converted to 'Integer'. C:\Documents and Settings\Ørjan\Mine dokumenter\Visual Studio 2008\Projects\Text Editor\Text Editor\Form1.vb 181 15 WordBoard
Lenke til kommentar
  • 2 måneder senere...

Jeg fant ut hva som var galt nå.

Jeg bruker denne koden for å sjekke hvilken font jeg skal printe:

	Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage 'Get what is on the text box.
	Dim yPos As Single = e.MarginBounds.Top
	Dim xPos As Single = e.MarginBounds.Left
	Dim printFont As Font = RichTextBox1.Font
	Dim myBrush As New SolidBrush(Color.Black)

	e.Graphics.DrawString(RichTextBox1.Text, printFont, myBrush, xPos, yPos)
End Sub

Men den blir bare sjekket når programmet starter, så det vil ikke virke velldig bra...

Så er det noen måte for å opdatere den koden når jeg skifter font?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...