如何将由垂直线分隔的段落文本添加到itextsharp创建的PDF中

时间:2014-05-31 08:55:53

标签: c# pdf itextsharp

我有一个要求,我需要将新创建的PDF文件分成由垂直线分隔的两个部分。现在根据我的要求我必须将文本添加到新的PDF段落中意味着首先所有记录应该去第一段和第一段应该从顶部显示第二段。

这是我尝试使用的代码,但我只在PDF的一半部分得到垂直线。我完全不知道如何添加段落文本。

public static void paraPDF(string pdffile){

   Document pdfDoc = new Document();
   PdfWriter writer = PdfWriter.GetInstance(pdfDoc, new FileStream(pdffile, FileMode.OpenOrCreate));

   pdfDoc.Open();
   pdfDoc.Add(new Paragraph("Some Text added"));
   PdfContentByte cb = writer.DirectContent;
   cb.MoveTo(pdfDoc.PageSize.Width / 2, pdfDoc.PageSize.Height / 2);
   cb.LineTo(pdfDoc.PageSize.Width / 2, pdfDoc.PageSize.Height);
   cb.Stroke();

   pdfDoc.Close();

   Console.WriteLine("The file was created.");
   Console.ReadLine();
} 

请帮帮我..

2 个答案:

答案 0 :(得分:4)

假设您希望按照本PDF中的方式将段落添加到列中:column_paragraphs.pdf

在这种情况下,您将定义两列,每页一半。例如,左半部分为new Rectangle(36, 36, 290, 806),右半部分为new Rectangle(305, 36, 559, 806)。假设这些是COLUMNS数组中的两个值。

然后,您将使用此COLUMNS数组来定位ColumnText对象。在Java中,这看起来像这样:

PdfContentByte canvas = writer.getDirectContent();
ColumnText ct = new ColumnText(canvas);
int side_of_the_page = 0;
ct.setSimpleColumn(COLUMNS[side_of_the_page]);
int paragraphs = 0;
while (paragraphs < 30) {
    ct.addElement(new Paragraph(String.format("Paragraph %s: %s", ++paragraphs, TEXT)));
    while (ColumnText.hasMoreText(ct.go())) {
        if (side_of_the_page == 0) {
            side_of_the_page = 1;
            canvas.moveTo(297.5f, 36);
            canvas.lineTo(297.5f, 806);
            canvas.stroke();
        }
        else {
            side_of_the_page = 0;
            document.newPage();
        }
        ct.setSimpleColumn(COLUMNS[side_of_the_page]);
    }
}

side_of_the_page的值为0时,您正在页面的左侧工作,并且在切换到右侧时需要绘制一条线。当side_of_the_page的值为1时,您正在页面的右侧工作,并且需要在再次切换到左侧之前转到新页面。

我知道您正在使用C#,但请查看Java代码,就好像它是伪代码一样。 C#代码非常相似。有关详细信息,请查看my book中的其他ColumnText示例(我是编写iText的原始开发人员)。对于相应的C#示例,请使用this link

答案 1 :(得分:0)

这是C#中的代码,虽然它没有转到第二列,但出于某种原因, HasMoreText(ct.Go())总是为假? @Bruno,关于我能做什么的任何想法?

  var doc = new Document();
        var pdf = "D:/Temp/pdfs/" + DateTime.Now.ToString("yyyymmdd") + ".pdf"; // mm ??

        PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(pdf, FileMode.Create));
        doc.Open();
        PdfContentByte canvas = writer.DirectContent;
        ColumnText ct = new ColumnText(canvas);
        int side_of_the_page = 0;
        ct.SetSimpleColumn(COLUMNS[side_of_the_page]);
        int paragraphs = 0;
        while (paragraphs < 30)
        {
            ct.AddElement(new iTextSharp.text.Paragraph(String.Format("Paragraph %s: %s", ++paragraphs, "SOME STUFF")));
            while (ColumnText.HasMoreText(ct.Go()))
            {
                if (side_of_the_page == 0)
                {
                    side_of_the_page = 1;
                    canvas.MoveTo(297.5f, 36);
                    canvas.LineTo(297.5f, 806);
                    canvas.Stroke();
                }
                else
                {
                    side_of_the_page = 0;
                    doc.NewPage();
                }
                ct.SetSimpleColumn(COLUMNS[side_of_the_page]);
            }
        }
        doc.Close();