PDFsharp Line Break
Asked Answered
W

2

36

I am trying to get new line but if I use \n it does not work.

Any way to have new line by adding something to string like \r\n (which also does not work)

gfx.DrawString("Project No \n" + textBoxProjNumber.Text, fontUnder, XBrushes.Black, 230, 95);

(the example snippet shows what I've tried but does not work).

Wordy answered 15/3, 2011 at 22:11 Comment(3)
if it's a sort of console-mode what about calling DrawString() twice?Bani
try calling DrawString() for each line you want to print, eg DrawString(Project No"); DrawString(textBoxProj.....);Bani
That works but i have to see if i have \n then draw new string from thereWordy
C
44

Have you tried the XTextFormatter class?

See here: http://www.pdfsharp.net/wiki/TextLayout-sample.ashx

Code snippet:

PdfDocument document = new PdfDocument();

PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
XFont font = new XFont("Times New Roman", 10, XFontStyle.Bold);
XTextFormatter tf = new XTextFormatter(gfx);

XRect rect = new XRect(40, 100, 250, 220);
gfx.DrawRectangle(XBrushes.SeaShell, rect);
tf.DrawString(text, font, XBrushes.Black, rect, XStringFormats.TopLeft);
Condonation answered 16/3, 2011 at 0:50 Comment(9)
Why do we need rectangle in that?Wordy
This works.Thanks.One more thing that in migradoc how to make it detect that if paragraph is longer than a page and automatically insert page breakWordy
Something I've just found (I know pdfsharp has been replaced by better libraries) but in VB.net you have to use + vbNewLine not /nWyandotte
@Wyandotte I'm curious about what "better libraries" replaced pdfSharp? Please share!Shellfish
@Shellfish I don't think pdfSharp is still being updated, so a couple of times I've come across bugs in it and not been able to do anything about it. I've used sourceforge.net/projects/itextsharp for a bit now but they have changed their to payment licensing. For lightweight I've used stefanochizzolini.it/en/projects/clown/index.htmlWyandotte
@Shellfish PDFsharp is still being developed (yes, an update is long overdue).Condonation
@AfnanBashir I know your question is four years old, but here is the answer: when using MigraDoc, page breaks will be added automatically when a paragraph (or a table) will not fit on a single page. The XTextFormatter is not part of MigraDoc and the version of XTextFormatter that comes with PDFsharp does not handle page breaks (it's meant to get you started and you can adapt that class to your needs). We recommend using MigraDoc for documents with a lot of text.Condonation
He's talking about line breaks, not page breaks.Immaculate
@Patrick The second comment is about page breaks. My comment is a reply to that comment.Condonation
F
2

This is what I did that does not involve using the Rect class:

I had a defined right lateral limit and determined whether the current string would be larger than the set bounds. If it was, I wrote it. Otherwise, I continued adding to it.

foreach (string field in temp)
{
    if (field == string.Empty)
    {
        continue;
    }
    else
    {
        tempSB.Clear();
        tempSB.Append(sb.ToString());
        tempSB.Append(field).Append(", ");  //append the incoming value to SB for size testing

        if (gfx.MeasureString(tempSB.ToString(), defaultFont).Width > 500)  //if the incoming string is bigger than the right bounds, write it and clear SB
        {
            gfx.DrawString(sb.ToString(), defaultFont, blackBrush, 50, currentLine + defaultSpacing);
            currentLine += 15;
            sb.Clear();
            sb.Append(" " + field).Append(",");  //add the overflow to the beginning of the next line
         }
         else
         {
             sb.Append(field).Append(", ");  //if it is not too big, append it
         }
     }

 }
 if (sb.Length > 0 && sb[sb.Length - 1] == ',') sb.Length--;
 gfx.DrawString(sb.ToString(), defaultFont, blackBrush, 50, currentLine + defaultSpacing); //write out whatever has not already been written out

I know I'm late to this question but I hope it can help someone.

Friedly answered 29/6, 2017 at 15:30 Comment(1)
Similar approach as the XTextFormatter class, but less flexible.Condonation

© 2022 - 2024 — McMap. All rights reserved.