如何在pdf文件中显示文字?

时间:2011-09-07 04:14:14

标签: c# .net itextsharp

我使用的是c#.net,需要将一些数据显示在.pdf文件中。我可以通过使用PdfTable来实现,但它以表格格式显示。 我想要一个简单的格式,如:

Data to be displayed as

我不想要精确的表格格式。我正在使用 iTextSharp dll。 是否可以用上面提到的格式显示数据?

欢迎提出任何建议。

3 个答案:

答案 0 :(得分:1)

您可以使用PdfParagraph类以PDF格式呈现真实文本

答案 1 :(得分:0)

在iTextSharp dll中,您只需通过在字符串中创建table / tr / td结构来传递数据,如下所示:

string strData = string.Emrty;
strData = "<table border='0' cellpadding='0' cellspacing='0' width='100%'>";
strData += "<tr>";
strData += "<td>";
strData += "</td>";
strData += "</tr>";
strData += "</table>";

通过创建数据的table / tr / td结构,只需将此变量数据传递给pdf,然后您将以pdf格式获得结果输出。

答案 2 :(得分:0)

所以当你说你不想要精确的表格格式时,你是在谈论边界吗?如果是这样,我建议使用PdfPTable并关闭边框。 PdfPTable中的单元格都基于表格DefaultCell,因此要为名为t的表格关闭边框,您可以执行以下操作:

t.DefaultCell.Border = 0;

以下是一个完整的WinForms应用程序,目标是iTextSharp 5.1.1.0,它正是这样做的:

//PdfPTable Example
using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //PDF file to output
            string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Output.pdf");

            //Create a basic stream to write to
            using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                //Create a new PDF document
                using (Document doc = new Document())
                {
                    //Bind a the document to the stream
                    using (PdfWriter w = PdfWriter.GetInstance(doc, fs))
                    {
                        //Open our PDF for writing
                        doc.Open();

                        //Insert a new page into our output PDF
                        doc.NewPage();

                        //Create a three column table
                        PdfPTable t = new PdfPTable(3);

                        //Remove the border from the table
                        t.DefaultCell.Border = 0;

                        //For the first row we some extra padding
                        t.DefaultCell.PaddingBottom = 10;
                        t.AddCell("ColumnA");
                        t.AddCell("ColumnB");
                        t.AddCell("ColumnC");

                        //Reset the padding for the remaining cells
                        t.DefaultCell.PaddingBottom = 0;
                        t.AddCell("Value1");
                        t.AddCell("Value1");
                        t.AddCell("Value1");

                        t.AddCell("Value2");
                        t.AddCell("Value2");
                        t.AddCell("Value2");

                        //Add the table to the document
                        doc.Add(t);

                        //Close our output PDF
                        doc.Close();
                    }
                }
            }
            this.Close();
        }
    }
}

如果由于某种原因您不希望使用PdfPTable执行此操作,则可以尝试将其与Paragraph一起进行黑客攻击,但除​​非对齐并不重要会让自己头疼。下面的示例使用段落并将段落中的每个“列”格式化为每个20个字符,根据需要填充空格。 注意:这是可变宽度字体的20个字符,因此实际上没有对齐。如果你想要,你可以使用上面的PdfPTable,或者你将不得不测量那些不好玩的字符串。

//Paragraph Example
using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //PDF file to output
            string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Output.pdf");

            //Create a basic stream to write to
            using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                //Create a new PDF document
                using (Document doc = new Document())
                {
                    //Bind a the document to the stream
                    using (PdfWriter w = PdfWriter.GetInstance(doc, fs))
                    {
                        //Open our PDF for writing
                        doc.Open();

                        //Insert a new page into our output PDF
                        doc.NewPage();

                        //Right-pad each "column" for a total of 20 characters
                        string FormatString = "{0,-20}{1,-20}{2,-20}";

                        //Add the first row
                        doc.Add(new Paragraph(String.Format(FormatString, "ColumnA", "ColumnB", "ColumnC")));

                        //Add a blank line
                        doc.Add(new Paragraph(""));

                        //Add the two data rows
                        doc.Add(new Paragraph(String.Format(FormatString, "Value1", "Value1", "Value1")));
                        doc.Add(new Paragraph(String.Format(FormatString, "Value2", "Value2", "Value2")));


                        //Close our output PDF
                        doc.Close();
                    }
                }
            }
            this.Close();
        }
    }
}