在PDF文档中创建多行文本Xamarin Forms Syncfusion

时间:2017-01-15 20:09:45

标签: c# pdf xamarin.forms syncfusion

我在官方的Syncfusion Xamarin Forms PDF文档中遇到了一些困难。我已设法创建一个表,将其绑定到值并将其附加到PdfDocument。

但奇怪的是,我似乎无法在单独的行上绘制文本字符串。我尝试使用graphics.DrawString()或TextElement绘制的每个文本都在文档的第一行中相互重叠绘制。

所有字符串都是AppResources,相互连接以形成来自resx文件和表示我的数据的类对象的报告。其中许多需要作为单独的短语和段落呈现。

是否有关于如何逐行追加文本以及在它们之间添加表格的工作示例?

谢谢!

1 个答案:

答案 0 :(得分:3)

使用Essential PDF可以一个接一个地绘制文本。我们可以通过将PdfTextElement与PdfLayoutResult一起使用或在PdfGraphics.DrawString方法中指定其位置来一个接一个地绘制文本。有关详细信息,请参阅以下代码段和示例。

        //Creates a new PDF document.
        PdfDocument doc = new PdfDocument();

        //Adds a page.
        PdfPage page = doc.Pages.Add();

        //create a new PDF string format
        PdfStringFormat drawFormat = new PdfStringFormat();
        drawFormat.WordWrap = PdfWordWrapType.Word;
        drawFormat.Alignment = PdfTextAlignment.Justify;
        drawFormat.LineAlignment = PdfVerticalAlignment.Top;

        //Set the font.
        PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 10f);

        //Create a brush.
        PdfBrush brush = PdfBrushes.Red;

        //bounds
        RectangleF bounds = new RectangleF(new PointF(10, 10), new SizeF(page.Graphics.ClientSize.Width - 30, page.Graphics.ClientSize.Height - 20));

        //Create a new text elememt
        PdfTextElement element = new PdfTextElement(text, font, brush);

        //Set the string format
        element.StringFormat = drawFormat;

        //Draw the text element
        PdfLayoutResult result =  element.Draw(page, bounds);

        // Draw the string one after another.
        result = element.Draw(result.Page, new RectangleF(result.Bounds.X, result.Bounds.Bottom + 10, result.Bounds.Width, result.Bounds.Height));

        // Creates a PdfLightTable.
        PdfLightTable pdfLightTable = new PdfLightTable();

        //Add colums to light table
        pdfLightTable.Columns.Add(new PdfColumn("Name"));
        pdfLightTable.Columns.Add(new PdfColumn("Age"));
        pdfLightTable.Columns.Add(new PdfColumn("Sex"));

        //Add row        
        pdfLightTable.Rows.Add(new string[] { "abc", "21", "Male" });

        //Includes the style to display the header of the light table.
        pdfLightTable.Style.ShowHeader = true;

        //Draws PdfLightTable and returns the rendered bounds.
        result = pdfLightTable.Draw(page, new PointF(result.Bounds.Left,result.Bounds.Bottom+20));

        //draw string with returned bounds from table
        result =  element.Draw(result.Page, result.Bounds.X, result.Bounds.Bottom + 10);

        //draw string with returned bounds from table
        element.Draw(result.Page, result.Bounds.X, result.Bounds.Bottom + 10);

        MemoryStream stream = new MemoryStream();

        //Saves the document.
        doc.Save(stream);

        doc.Close(true);

示例链接:http://www.syncfusion.com/downloads/support/directtrac/171058/ze/App2938608856

如果您需要任何进一步的帮助,请告知我们。