如何使用iTextSharp在特定位置放置段落

时间:2017-09-04 22:03:41

标签: c# winforms position itext

如何在pdf的特定位置放置文字?我做了一些搜索,但没有发现任何太好的东西。我有document.Add(new Paragraph("Date:" + DateTime.Now));,我想把它放在pdf文件的特定区域。

我的代码:

   private void savePDF_Click(object sender, EventArgs e)
    {
        FileStream fileStream = new FileStream(nameTxtB.Text + "Repair.pdf", FileMode.Create, FileAccess.Write, FileShare.None);
        Document document = new Document();
        document.Open();
        iTextSharp.text.Rectangle rectangle = new iTextSharp.text.Rectangle(PageSize.LETTER);
        PdfWriter pdfWriter = PdfWriter.GetInstance(document, fileStream);

        iTextSharp.text.Image r3tsLogo = iTextSharp.text.Image.GetInstance("rt3slogo.PNG"); //creates r3ts logo
        iTextSharp.text.Image r3Info = iTextSharp.text.Image.GetInstance("R3 Information.PNG"); //creates r3 information text below r3ts logo

        r3tsLogo.SetAbsolutePosition(document.PageSize.Width - 375 - 0f, document.PageSize.Height - 130 - 0f); 
        r3Info.SetAbsolutePosition(document.PageSize.Width - 365 - 0f, document.PageSize.Height - 170 - 0f); //higher the number in height the lower the place of text on paper
                                   //less  number will result in text more to right in width

        //increase size of picture
        r3tsLogo.ScalePercent(120); 
        r3Info.ScalePercent(65);

//---------------adds all images to pdf file --------------------------------- 
        document.Add(r3tsLogo);
        document.Add(r3Info);
        document.Add(new Paragraph("Date:" + DateTime.Now));




        document.Close(); 
    }

2 个答案:

答案 0 :(得分:3)

假设您知道如何在绝对位置添加图像(请参阅Joris'答案),但查看如何添加文字,那么您的问题的答案是:使用ColumnText

如果您只需要添加一行不需要换行,可以使用ShowTextAligned()方法:

ColumnText.showTextAligned(writer.DirectContent,
     Element.ALIGN_CENTER, new Phrase("single line"), x, y, rotation);

在这行代码中,xy是文本中间的坐标(其他可能的对齐值为ALIGN_LEFTALIGN_RIGHT)。 rotation参数定义以度为单位的旋转。请注意,文本"single line"不会被包装。您可以添加"从页面上删除的文字"这样,如果您添加的文字太长。

如果要在特定矩形内添加文本,则需要使用Rectangle对象定义列:

ColumnText ct = new ColumnText(writer.DirectContent);
ct.setSimpleColumn(new Rectangle(0, 0, 523, 50));
ct.addElement(new Paragraph("This could be a very long sentence that needs to be wrapped"));
ct.go();

如果您提供的文字多于适合矩形的文字,则不会呈现该文字。但是,它仍然可以在ct对象中使用,以便您可以将其余文本添加到其他位置。

所有这些都在之前得到了回答:

单行:

多行:

我是否必须长期搜索这些示例?不,我在Absolute Positioning of text下的官方网站上找到了它们。

那些搜索的人有智慧......

答案 1 :(得分:1)

这个概念在“iText in action”一书中有详尽的解释。哪个可以在网站上找到。

http://developers.itextpdf.com/examples/itext-action-second-edition/chapter-3

短代码示例(查看网站上的其他示例):

// step 1
Document document = new Document(PageSize.POSTCARD, 30, 30, 30, 30);

// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT));

// step 3
document.open();

// step 4
// Create and add a Paragraph
Paragraph p = new Paragraph("Foobar Film Festival", new Font(FontFamily.HELVETICA, 22));
p.setAlignment(Element.ALIGN_CENTER);
document.add(p);

// Create and add an Image
Image img = Image.getInstance(RESOURCE);
img.setAbsolutePosition(
        (PageSize.POSTCARD.getWidth() - img.getScaledWidth()) / 2,
        (PageSize.POSTCARD.getHeight() - img.getScaledHeight()) / 2);
document.add(img);