Vignesh hawkeye
Vignesh hawkeye

Reputation: 68

itextsharp c# need a perfect method for page break

I am using itextsharp library.I design an HTML page and convert to PDF .in that case some table are not split perfectly and row also not split correctly

table.keepTogether; table.splitRows; table.splitLate

I try this extension but it does not work correctly it mess my CSS and data in PDF. if you have method..answer me:)

Upvotes: 1

Views: 1996

Answers (1)

Vignesh hawkeye
Vignesh hawkeye

Reputation: 68

finally i got it

public class TableProcessor : Table
{
    const string NO_ROW_SPLIT = "no-row-split";

    public override IList<IElement> End(IWorkerContext ctx, Tag tag, IList<IElement> currentContent)
    {
        IList<IElement> result = base.End(ctx, tag, currentContent);
        var table = (PdfPTable)result[0];

        if (tag.Attributes.ContainsKey(NO_ROW_SPLIT))
        {
            // if not set,  table **may** be forwarded to next page
            table.KeepTogether = false;
            // next two properties keep <tr> together if possible
            table.SplitRows = true;
            table.SplitLate = true;
        }
        return new List<IElement>() { table };
    }
}

use this class and

 var tagfac = Tags.GetHtmlTagProcessorFactory();
                tagfac.AddProcessor(new TableProcessor(), new string[] { HTML.Tag.TABLE });

                htmlContext.SetTagFactory(tagfac);

integrate this method with htmlpipeline context

this method every time run when the tag hasno-row-split.if it contain key it will make kept by keep together keyword to make page breaking

html

<table no-row-split style="width:100%">
  <tr>
    <td>
   </td>
  </tr>
</table>

Upvotes: 3

Related Questions