简体   繁体   中英

Having problems getting PDF document from text file formatted correctly with GemBox

I am attempting to convert a text file to a pdf using GemBox. I can get the text imported correctly but the font type and size aren't being applied and the sentence spacing seems to be doubled.

This is what I have so far:

public static void CreateDoc(string ebillpath)
    { 
      using (var sr = new StreamReader(ebillpath))
      {
        var doc = new DocumentModel();
        doc.DefaultCharacterFormat.Size = 10;
        doc.DefaultCharacterFormat.FontName = "Courier New";

        var section = new Section(doc);
        doc.Sections.Add(section);
        string line;

        var clearedtop = false;

        while ((line = sr.ReadLine()) != null)
        {
          if (string.IsNullOrEmpty(line) && !clearedtop)
          {
            continue;
          }

          clearedtop = true;
          Paragraph paragraph2 = new Paragraph(doc, new Run(doc, line));
          section.Blocks.Add(paragraph2);
        }

        PageSetup pageSetup = new PageSetup(); // section.PageSetup;
        var pm = new PageMargins();
        pm.Bottom = 36;
        pm.Top = 36;
        pm.Right = 36;
        pm.Left = 36;
        pageSetup.PageMargins = pm;

        doc.Save(@"d:\temp\test.pdf");
      }
    }

This text file uses spaces to format the text correctly so I need to set the font to Courier New.

This is an example of what the text file looks like with correct formatting:

在此处输入图片说明

And this is what it comes out to look like in pdf form:

在此处输入图片说明

Each line seems to be doubled and the font isn't being applied.

Any suggestions?

Try this:

public static void CreateDoc(string ebillpath)
{
    DocumentModel doc = new DocumentModel();

    CharacterFormat charFormat = doc.DefaultCharacterFormat;
    charFormat.Size = 10;
    charFormat.FontName = "Courier New";

    ParagraphFormat parFormat = doc.DefaultParagraphFormat;
    parFormat.SpaceAfter = 0;
    parFormat.LineSpacing = 1;

    // It seems you want to skip first line with 'clearedtop'.
    // So maybe you could just use this instead.
    string text = string.Concat(File.ReadLines(ebillpath).Skip(1));
    doc.Content.LoadText(text);

    Section section = doc.Sections[0];
    PageMargins margins = section.PageSetup.PageMargins;
    margins.Bottom = 36;
    margins.Top = 36;
    margins.Right = 36;
    margins.Left = 36;

    doc.Save(@"d:\temp\test.pdf");
}

I hope it helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM