添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Part II - Writing text, images and simple graphics in the document.
This is the second part of this articles series about creating simple PDFs using iTextSharp. In the first part we looked at how to create the file and add meta information. We also added a simple line of text in the document. As there are several ways of placing elements in the document, I will describe two in this article; The flow layout and exact positioning.
Flow layout

The flow layout mode just puts all of the added elements in a left to right, line by line manner. This was how we put Hello World to the document in part I. When you write text like this you don't need to keep track of the page breaks, this is handled by the document itself.
Exact positioning

Here you set the exact coordinates (Y & X) to place elements in the document and this is the way we will continue to place text in this tutorial. Here you need to control the page bounds yourself, keeping track of when it's time to switch page. This gives us better control over how we create documents.
To enable exact positioning of text and other elements as described above you need to use the PdfContentByte class which enables you to place it where you want to. You get hold of a reference with this simple line of code:
  • BaseFont f_cb = BaseFont.CreateFont( "c:\\windows\\fonts\\calibrib.ttf" , BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
  • BaseFont f_cn = BaseFont.CreateFont( "c:\\windows\\fonts\\calibri.ttf" , BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
  • Note that the document will be corrupt if you use fonts that aren't installed on your machine. There are several other ways of doing this, but I don't cover that here. To be sure that the target machine can open the file, you could change BaseFont.NOT_EMBEDDED to BaseFont.EMBEDDED which includes the font in the file, but be careful, if you do then the size of the file increases very much!

    Okay, now you can place text where you want to with the following code:

  • cb.SetTextMatrix(10, row);
  • cb.ShowText( "Y: " + row.ToString());
  • row += 12; // The spacing between the rows is set to 12 "points"
  • int col = 35;
  • for ( int x = 0; x != 22; x++)
  • cb.SetTextMatrix(col, 829);
  • cb.ShowText( "X: " + col.ToString());
  • col += 25; // The spacing between the columns is set to 25 "points"
  • The first one starts at Y (vertical) position 1.

    pdf_coordinates_Y.jpg
    and works its way up to the top with the line spacing of 12 points. The last position is here the Y: 829.

    The second loop creates the left to right "column" illustration, and that one goes from right to left as normal positioning of coordinates are used. This is normally something I keep in printing on my desktop when I design PDF's using iTextSharp, it can otherwise be many test documents created before everything falls into the right place!
    Text alignment

    You can align the text by using the ShowTextAligned method which takes an alignment parameter, like this:
  • cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "This text is left aligned" , 200, 800, 0);
  • cb.ShowTextAligned(PdfContentByte.ALIGN_RIGHT, "This text is right aligned" , 200, 788, 0);
  • Drawing lines

    To draw a line with exact positioning you need to first set the line width, like this: cb.SetLineWidth(0f). Then you set the starting point, like this: cb.MoveTo(30, 650) and the ending point, like this: cb.LineTo(570, 650).

    To draw the line in the document, use the Stroke method like this cb.Stroke().
    Drawing lines

    To draw a rectangle you can use the Rectangle method, like this:
    cb.Rectangle(400, 700, 100, 100);


    cb.Stroke();
    NOTE : You need to call the end text method before you write lines or add images in the document when you use exact positioning, if you are doing it while writing text. One way to keep track of this is to start out with the graphics before you start placing text!

    Images


    There are several ways of placing images, but I will just show the simplest one, using exact positioning.  First, create a instance of the image class, like this:
  • iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance( "http://www.c-sharpcorner.com/App_Themes/CSharp/Images/CSSiteLogo.gif" );
  • Or you could reference a file on disk like this.
  • iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(Server.MapPath( "img.png" ));
  • To place the image you first set the position and then add the image to the content byte:

    Okay, that's it!
    Now you have the basic knowledge of how to place text, graphics and images in a PDF document using iTextSharp. Please, check out Part III where I go thru a simple process creating a PDF invoice from a XML file.

    Part I , Part III