使用C3中的itextSharp定位文本

时间:2015-04-22 18:24:59

标签: itextsharp

我正在尝试按下按钮生成pdf。我正在挑战设计页面。如果有人可以帮助,如何将文本定位在特定位置。

说我希望我的地址位于右上角并朝向中心。

以下是我正在处理的代码:

private void pdf_btn_Click(object sender, EventArgs e)
{
    SaveFileDialog svg = new SaveFileDialog();
    svg.ShowDialog();
    using (FileStream stream = new FileStream(svg.FileName + ".pdf", FileMode.Create))
    {
        // Create a Document object
        var document = new Document(PageSize.A4, 50, 50, 25, 25);
        // Create a new PdfWrite object, writing the output to a MemoryStream
        // var output = new MemoryStream();
        var writer = PdfWriter.GetInstance(document, stream);               
        document.Open();
        // First, create our fonts... (For more on working w/fonts in iTextSharp, see: http://www.mikesdotnetting.com/Article/81/iTextSharp-Working-with-Fonts
        var titleFont = FontFactory.GetFont("Arial", 18, Convert.ToInt32(Font.Bold));
        var AddressFont = FontFactory.GetFont("Arial", 7, Convert.ToInt32(Font.Bold));
        var boldTableFont = FontFactory.GetFont("Arial", 12, Convert.ToInt32(Font.Bold));
        var endingMessageFont = FontFactory.GetFont("Arial", 10, Convert.ToInt32(Font.Italic));
        var bodyFont = FontFactory.GetFont("Arial", 12);
        // Add the "" title
        document.Add(new Paragraph("Certificate of Analysis", titleFont));
        // Add Address 
        var text = document.Add(new Paragraph("Abc Company", AddressFont));
        document.Add(new Paragraph("Tel:(xx) xxx-xxxx, (xxx) xxx-xxx", AddressFont));
        document.Add(new Paragraph("Fax: (xxx) xxx-xxx, , AddressFont));
        document.Close();
        stream.Close();
    }            
}

1 个答案:

答案 0 :(得分:0)

有不同的方法可以达到你想要的效果。

目前,您正在告诉iText进行布局。如果您想将文字"Certificate of Analysis"居中,那么您可以像这样更改Paragraph的对齐方式:

Paragraph header = new Paragraph("Certificate of Analysis", titleFont);
header.Alignment = Element.ALIGN_CENTER;
document.Add(header);

如果您希望文本"Abc Company"右对齐,可以像这样更改对齐方式:

Paragraph company = new Paragraph("Abc Company", AddressFont);
company.Alignment = Element.ALIGN_RIGHT;
document.Add(company);

当然:当我们添加company时,它会从header下的新行开始。也许你希望文本在同一行。

在这种情况下,为什么不使用PdfPTable

PdfPTable myTable = new PdfPTable(3);
myTable.WidthPercentage = 100;
PdfPCell mydate = new PdfPCell(new Phrase("April 22, 2015", myfont));
mydate.Border = Rectangle.NO_BORDER;
myTable.AddCell(mydate);
PdfPCell header = new PdfPCell(new Phrase("Certificate of Analysis", titleFont));
header.Border = Rectangle.NO_BORDER;
header.HorizontalAlignment = Element.ALIGN_CENTER;
myTable.AddCell(header);
PdfPCell address = new PdfPCell(new Phrase("Company Address", AddressFont));
address.Border = Rectangle.NO_BORDER;
address.HorizontalAlignment = Element.ALIGN_RIGHT;
myTable.AddCell(address);
doc.Add(myTable);

现在,页面的可用宽度将分为三个,日期将与左侧对齐,标题将居中,地址将与右侧对齐。显然,您可以向PdfPCell添加更多数据,向PdfPTable添加更多行。这只是一个简单的概念证明。

另一种选择是将文本添加到绝对位置(使用坐标)。这可以通过使用ColumnText对象来完成。 The Best iText Questions on StackOverflow

中有很多例子