List of usage examples for com.lowagie.text.pdf PdfContentByte setLineWidth
public void setLineWidth(float w)
From source file:br.gov.jfrj.itextpdf.Documento.java
License:Open Source License
public static byte[] stamp(byte[] abPdf, String sigla, boolean rascunho, boolean cancelado, boolean semEfeito, boolean internoProduzido, String qrCode, String mensagem, Integer paginaInicial, Integer paginaFinal, Integer cOmitirNumeracao, String instancia, String orgaoUsu) throws DocumentException, IOException { PdfReader pdfIn = new PdfReader(abPdf); Document doc = new Document(PageSize.A4, 0, 0, 0, 0); // final SimpleDateFormat sdf = new SimpleDateFormat( // "EEE MMM dd HH:mm:ss zzz yyyy"); // doc.add(new Meta("creationdate", sdf.format(new Date(0L)))); final ByteArrayOutputStream boA4 = new ByteArrayOutputStream(); PdfWriter writer = PdfWriter.getInstance(doc, boA4); doc.open();//from w w w. jav a2s . com PdfContentByte cb = writer.getDirectContent(); // Resize every page to A4 size // // double thetaRotation = 0.0; for (int i = 1; i <= pdfIn.getNumberOfPages(); i++) { int rot = pdfIn.getPageRotation(i); float left = pdfIn.getPageSize(i).getLeft(); float bottom = pdfIn.getPageSize(i).getBottom(); float top = pdfIn.getPageSize(i).getTop(); float right = pdfIn.getPageSize(i).getRight(); PdfImportedPage page = writer.getImportedPage(pdfIn, i); float w = page.getWidth(); float h = page.getHeight(); // Logger.getRootLogger().error("----- dimensoes: " + rot + ", " + w // + ", " + h); doc.setPageSize((rot != 0 && rot != 180) ^ (w > h) ? PageSize.A4.rotate() : PageSize.A4); doc.newPage(); cb.saveState(); if (rot != 0 && rot != 180) { float swap = w; w = h; h = swap; } float pw = doc.getPageSize().getWidth(); float ph = doc.getPageSize().getHeight(); double scale = Math.min(pw / w, ph / h); // do my transformations : cb.transform(AffineTransform.getScaleInstance(scale, scale)); if (!internoProduzido) { cb.transform(AffineTransform.getTranslateInstance(pw * SAFETY_MARGIN, ph * SAFETY_MARGIN)); cb.transform(AffineTransform.getScaleInstance(1.0f - 2 * SAFETY_MARGIN, 1.0f - 2 * SAFETY_MARGIN)); } if (rot != 0) { double theta = -rot * (Math.PI / 180); if (rot == 180) { cb.transform(AffineTransform.getRotateInstance(theta, w / 2, h / 2)); } else { cb.transform(AffineTransform.getRotateInstance(theta, h / 2, w / 2)); } if (rot == 90) { cb.transform(AffineTransform.getTranslateInstance((w - h) / 2, (w - h) / 2)); } else if (rot == 270) { cb.transform(AffineTransform.getTranslateInstance((h - w) / 2, (h - w) / 2)); } } // Logger.getRootLogger().error( // "----- dimensoes: " + rot + ", " + w + ", " + h); // Logger.getRootLogger().error("----- page: " + pw + ", " + ph); // cb.transform(AffineTransform.getTranslateInstance( // ((pw / scale) - w) / 2, ((ph / scale) - h) / 2)); // put the page cb.addTemplate(page, 0, 0); // draw a red rectangle at the page borders // // cb.saveState(); // cb.setColorStroke(Color.red); // cb.rectangle(pdfIn.getPageSize(i).getLeft(), pdfIn.getPageSize(i) // .getBottom(), pdfIn.getPageSize(i).getRight(), pdfIn // .getPageSize(i).getTop()); // cb.stroke(); // cb.restoreState(); cb.restoreState(); } doc.close(); abPdf = boA4.toByteArray(); final ByteArrayOutputStream bo2 = new ByteArrayOutputStream(); final PdfReader reader = new PdfReader(abPdf); final int n = reader.getNumberOfPages(); final PdfStamper stamp = new PdfStamper(reader, bo2); // adding content to each page int i = 0; PdfContentByte under; PdfContentByte over; final BaseFont helv = BaseFont.createFont("Helvetica", BaseFont.WINANSI, false); // Image img = Image.getInstance("watermark.jpg"); final BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED); byte maskr[] = { (byte) 0xff }; Image mask = Image.getInstance(1, 1, 1, 1, maskr); mask.makeMask(); mask.setInverted(true); while (i < n) { i++; // watermark under the existing page under = stamp.getUnderContent(i); over = stamp.getOverContent(i); final Barcode39 code39 = new Barcode39(); // code39.setCode(doc.getCodigo()); code39.setCode(sigla.replace("-", "").replace("/", "").replace(".", "")); code39.setStartStopText(false); final Image image39 = code39.createImageWithBarcode(over, null, null); Rectangle r = stamp.getReader().getPageSizeWithRotation(i); image39.setInitialRotation((float) Math.PI / 2.0f); image39.setAbsolutePosition( r.getWidth() - image39.getHeight() + (STAMP_BORDER_IN_CM - PAGE_BORDER_IN_CM) * CM_UNIT, BARCODE_HEIGHT_IN_CM * CM_UNIT); image39.setBackgroundColor(Color.green); image39.setBorderColor(Color.RED); image39.setBorderWidth(0.5f * CM_UNIT); image39.setImageMask(mask); over.setRGBColorFill(255, 255, 255); mask.setAbsolutePosition(r.getWidth() - image39.getHeight() - (PAGE_BORDER_IN_CM) * CM_UNIT, (BARCODE_HEIGHT_IN_CM - STAMP_BORDER_IN_CM) * CM_UNIT); mask.scaleAbsolute(image39.getHeight() + 2 * STAMP_BORDER_IN_CM * CM_UNIT, image39.getWidth() + 2 * STAMP_BORDER_IN_CM * CM_UNIT); over.addImage(mask); over.setRGBColorFill(0, 0, 0); over.addImage(image39); // over.addImage(mask, mask.getScaledWidth() * 8, 0, 0, // mask.getScaledHeight() * 8, 100, 450); if (qrCode != null) { java.awt.Image imgQRCode = createQRCodeImage(qrCode); Image imageQRCode = Image.getInstance(imgQRCode, Color.BLACK, true); imageQRCode.scaleAbsolute(QRCODE_SIZE_IN_CM * CM_UNIT, QRCODE_SIZE_IN_CM * CM_UNIT); imageQRCode.setAbsolutePosition(QRCODE_LEFT_MARGIN_IN_CM * CM_UNIT, PAGE_BORDER_IN_CM * CM_UNIT); over.setRGBColorFill(255, 255, 255); mask.setAbsolutePosition((QRCODE_LEFT_MARGIN_IN_CM - STAMP_BORDER_IN_CM) * CM_UNIT, (PAGE_BORDER_IN_CM - STAMP_BORDER_IN_CM) * CM_UNIT); mask.scaleAbsolute((QRCODE_SIZE_IN_CM + 2 * STAMP_BORDER_IN_CM) * CM_UNIT, (QRCODE_SIZE_IN_CM + 2 * STAMP_BORDER_IN_CM) * CM_UNIT); over.addImage(mask); over.setRGBColorFill(0, 0, 0); over.addImage(imageQRCode); } if (mensagem != null) { PdfPTable table = new PdfPTable(1); table.setTotalWidth(r.getWidth() - image39.getHeight() - (QRCODE_LEFT_MARGIN_IN_CM + QRCODE_SIZE_IN_CM + 4 * STAMP_BORDER_IN_CM + PAGE_BORDER_IN_CM) * CM_UNIT); PdfPCell cell = new PdfPCell(new Paragraph(mensagem, FontFactory.getFont(FontFactory.HELVETICA, 8, Font.NORMAL, Color.BLACK))); cell.setBorderWidth(0); table.addCell(cell); over.setRGBColorFill(255, 255, 255); mask.setAbsolutePosition( (QRCODE_LEFT_MARGIN_IN_CM + QRCODE_SIZE_IN_CM + STAMP_BORDER_IN_CM) * CM_UNIT, (PAGE_BORDER_IN_CM - STAMP_BORDER_IN_CM) * CM_UNIT); mask.scaleAbsolute(2 * STAMP_BORDER_IN_CM * CM_UNIT + table.getTotalWidth(), 2 * STAMP_BORDER_IN_CM * CM_UNIT + table.getTotalHeight()); over.addImage(mask); over.setRGBColorFill(0, 0, 0); table.writeSelectedRows(0, -1, (QRCODE_LEFT_MARGIN_IN_CM + QRCODE_SIZE_IN_CM + 2 * STAMP_BORDER_IN_CM) * CM_UNIT, table.getTotalHeight() + PAGE_BORDER_IN_CM * CM_UNIT, over); } if (cancelado) { over.saveState(); final PdfGState gs = new PdfGState(); gs.setFillOpacity(0.5f); over.setGState(gs); over.setColorFill(Color.GRAY); over.beginText(); over.setFontAndSize(helv, 72); over.showTextAligned(Element.ALIGN_CENTER, "CANCELADO", r.getWidth() / 2, r.getHeight() / 2, 45); over.endText(); over.restoreState(); } else if (rascunho) { over.saveState(); final PdfGState gs = new PdfGState(); gs.setFillOpacity(0.5f); over.setGState(gs); over.setColorFill(Color.GRAY); over.beginText(); over.setFontAndSize(helv, 72); over.showTextAligned(Element.ALIGN_CENTER, "MINUTA", r.getWidth() / 2, r.getHeight() / 2, 45); over.endText(); over.restoreState(); } else if (semEfeito) { over.saveState(); final PdfGState gs = new PdfGState(); gs.setFillOpacity(0.5f); over.setGState(gs); over.setColorFill(Color.GRAY); over.beginText(); over.setFontAndSize(helv, 72); over.showTextAligned(Element.ALIGN_CENTER, "SEM EFEITO", r.getWidth() / 2, r.getHeight() / 2, 45); over.endText(); over.restoreState(); } // if (!rascunho // && request.getRequestURL().indexOf("http://laguna/") == -1) { if (!rascunho && !cancelado && !semEfeito && ((!Contexto.resource("isVersionTest").equals("false")) || (!Contexto.resource("isBaseTest").equals("false")))) { over.saveState(); final PdfGState gs = new PdfGState(); gs.setFillOpacity(0.5f); over.setGState(gs); over.setColorFill(Color.GRAY); over.beginText(); over.setFontAndSize(helv, 72); over.showTextAligned(Element.ALIGN_CENTER, "INVLIDO", r.getWidth() / 2, r.getHeight() / 2, 45); over.endText(); over.restoreState(); } // Imprime um circulo com o numero da pagina dentro. if (paginaInicial != null) { String sFl = String.valueOf(paginaInicial + i - 1); // Se for a ultima pagina e o numero nao casar, acrescenta "-" e // pagina final if (n == i) { if (paginaFinal != paginaInicial + n - 1) { sFl = sFl + "-" + String.valueOf(paginaFinal); } } if (i > cOmitirNumeracao) { // Raio do circulo interno final float radius = 18f; // Distancia entre o circulo interno e o externo final float circleInterspace = Math.max(helv.getAscentPoint(instancia, TEXT_HEIGHT), helv.getAscentPoint(orgaoUsu, TEXT_HEIGHT)) - Math.min(helv.getDescentPoint(instancia, TEXT_HEIGHT), helv.getDescentPoint(orgaoUsu, TEXT_HEIGHT)) + 2 * TEXT_TO_CIRCLE_INTERSPACE; // Centro do circulo float xCenter = r.getWidth() - 1.8f * (radius + circleInterspace); float yCenter = r.getHeight() - 1.8f * (radius + circleInterspace); over.saveState(); final PdfGState gs = new PdfGState(); gs.setFillOpacity(1f); over.setGState(gs); over.setColorFill(Color.BLACK); over.saveState(); over.setColorStroke(Color.black); over.setLineWidth(1f); over.setColorFill(Color.WHITE); // Circulo externo over.circle(xCenter, yCenter, radius + circleInterspace); over.fill(); over.circle(xCenter, yCenter, radius + circleInterspace); over.stroke(); // Circulo interno over.circle(xCenter, yCenter, radius); over.stroke(); over.restoreState(); { over.saveState(); over.beginText(); over.setFontAndSize(helv, TEXT_HEIGHT); // Escreve o texto superior do carimbo float fDescent = helv.getDescentPoint(instancia, TEXT_HEIGHT); showTextOnArc(over, instancia, helv, TEXT_HEIGHT, xCenter, yCenter, radius - fDescent + TEXT_TO_CIRCLE_INTERSPACE, true); // Escreve o texto inferior float fAscent = helv.getAscentPoint(orgaoUsu, TEXT_HEIGHT); showTextOnArc(over, orgaoUsu, helv, TEXT_HEIGHT, xCenter, yCenter, radius + fAscent + TEXT_TO_CIRCLE_INTERSPACE, false); over.endText(); over.restoreState(); } over.beginText(); int textHeight = 23; // Diminui o tamanho do font ate que o texto caiba dentro do // circulo interno while (helv.getWidthPoint(sFl, textHeight) > (2 * (radius - TEXT_TO_CIRCLE_INTERSPACE))) textHeight--; float fAscent = helv.getAscentPoint(sFl, textHeight) + helv.getDescentPoint(sFl, textHeight); over.setFontAndSize(helv, textHeight); over.showTextAligned(Element.ALIGN_CENTER, sFl, xCenter, yCenter - 0.5f * fAscent, 0); over.endText(); over.restoreState(); } } } stamp.close(); return bo2.toByteArray(); }
From source file:br.org.archimedes.io.pdf.PDFWriter.java
License:Open Source License
public void write(Layer layer) { PdfContentByte cb = helper.getPdfContentByte(); cb.setLineWidth((float) layer.getThickness()); Color layerColor = layer.getPrintColor(); cb.setRGBColorStroke(layerColor.getRed(), layerColor.getGreen(), layerColor.getBlue()); if (layer.getLineStyle() == LineStyle.STIPPED) { cb.setLineDash(5, 0);//from ww w . j ava 2 s . c o m } else { cb.setLineDash(0); } ElementEPLoader elementEPLoader = new ElementEPLoader(); ElementExporterEPLoader exporterLoader = new ElementExporterEPLoader(); for (Element element : layer.getElements()) { String elementId = elementEPLoader.getElementId(element); ElementExporter<Element> exporter = exporterLoader.getExporter(elementId); try { exporter.exportElement(element, helper); } catch (IOException e) { // Something went wrong when writting this element. // Just skip it and trace the log. e.printStackTrace(); } catch (NotSupportedException e) { // wont reach here } } }
From source file:ch.gpb.elexis.kgexporter.pdf.HeaderFooterPageEvent.java
License:Open Source License
public void onStartPage(PdfWriter writer, Document document) { Rectangle rect = writer.getBoxSize("art"); ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_LEFT, new Phrase(sbHeader), rect.getLeft(), rect.getTop(), 0); ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_RIGHT, new Phrase(sDate), rect.getRight(), rect.getTop(), 0); PdfContentByte cb = writer.getDirectContentUnder(); //cb.rectangle(document.left(), document.top(), // document.right() - document.left(), document.top() - 25); /*/*from w w w. j a v a2 s . c o m*/ System.out.println("l: " + document.left()); System.out.println("r: " + document.right()); System.out.println("t: " + document.top()); System.out.println("b: " + document.bottom()); l: 36.0 r: 559.0 t: 806.0 b: 36.0 */ //Rectangle rect2 = new Rectangle(document.top() - 36, document.top() - 36, 559, 1); /* float l = 36f; float r = 36f; float t = 559f; float b = 2f; Rectangle rect2 = new Rectangle(l, r, t, b); //Rectangle rect2 = new Rectangle(36, 36, 559, 1); rect2.setBorder(Rectangle.BOTTOM); rect2.setBorderWidth(0.5f); cb.rectangle(rect2); //cb.setColorStroke(Color.BLACK); */ /* for (int i = 30; i > 0; i--) { System.err.println((float) i / 10); cb.setLineWidth((float) i / 10); cb.moveTo(36, 806 - (5 * i)); cb.lineTo(400, 806 - (5 * i)); cb.stroke(); } cb.moveTo(10, 50); cb.lineTo(559, 50); */ cb.setLineWidth(0.5f); cb.moveTo(30, 791); cb.lineTo(559, 791); cb.stroke(); }
From source file:ch.gpb.elexis.kgexporter.pdf.HeaderFooterPageEvent.java
License:Open Source License
public void onEndPage(PdfWriter writer, Document document) { Rectangle rect = writer.getBoxSize("art"); ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_LEFT, new Phrase(this.sbFooter), rect.getLeft(), rect.getBottom(), 0); /*/*from w w w .ja v a 2 s . c om*/ ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase("Bottom Right"), rect.getRight(), rect.getBottom(), 0); */ PdfContentByte cb = writer.getDirectContentUnder(); cb.setLineWidth(0.5f); cb.moveTo(30, 50); cb.lineTo(559, 50); cb.stroke(); }
From source file:classroom.filmfestival_c.Movies19.java
protected static void drawGrid(PdfWriter writer, List<String> places, String day, float left, float column_width, float top, float row_height) { // CANVAS//ww w .j av a 2 s . c om PdfContentByte directcontent = writer.getDirectContent(); Rectangle art = writer.getBoxSize("art"); // LINES directcontent.setLineWidth(1); float bottom = art.getTop(); // rows int rows = places.size(); for (int i = 0; i <= rows; i++) { directcontent.moveTo(art.getLeft(), art.getTop() - (i * row_height)); directcontent.lineTo(art.getRight(), art.getTop() - (i * row_height)); bottom = art.getTop() - (i * row_height); } // Rectangle directcontent.moveTo(art.getLeft(), art.getTop()); directcontent.lineTo(art.getLeft(), bottom); directcontent.moveTo(left, art.getTop()); directcontent.lineTo(left, bottom); directcontent.moveTo(art.getLeft() + (COLUMNS * column_width), art.getTop()); directcontent.lineTo(art.getLeft() + (COLUMNS * column_width), bottom); directcontent.stroke(); // columns directcontent.saveState(); directcontent.setLineWidth(0.3f); directcontent.setColorStroke(SILVER); directcontent.setLineDash(3, 1); for (int i = 2; i < COLUMNS; i++) { directcontent.moveTo(art.getLeft() + (i * column_width), art.getTop()); directcontent.lineTo(art.getLeft() + (i * column_width), bottom); } directcontent.stroke(); directcontent.restoreState(); // TEXT // date directcontent.beginText(); directcontent.setFontAndSize(FONT, 12); directcontent.showTextAligned(Element.ALIGN_RIGHT, day, art.getLeft() - 5, art.getTop(), 90); directcontent.endText(); // time for (int i = 1; i < COLUMNS; i++) { directcontent.beginText(); directcontent.setFontAndSize(FONT, 8); directcontent.showTextAligned(Element.ALIGN_LEFT, TIME[i - 1], art.getLeft() + (i * column_width) + 5, top + 5, 90); directcontent.endText(); } // places for (int i = 0; i < rows; i++) { directcontent.beginText(); directcontent.setFontAndSize(FONT, 12); directcontent.showTextAligned(Element.ALIGN_CENTER, places.get(i), art.getLeft() + 16, art.getTop() - ((i + 0.5f) * row_height), 90); directcontent.endText(); } }
From source file:classroom.filmfestival_c.Movies19.java
protected static void drawMovie(PdfWriter writer, FestivalScreening screening, List<String> places, float minute, float left, float top, float row_height) throws DocumentException { FilmTitle movie = screening.getFilmTitle(); // defining the rectangle int place = places.indexOf(screening.getId().getPlace()); float llx, urx, lly, ury; llx = left + minute * getMinutesAfter930(screening); urx = llx + minute * (screening.getShortfilm() + movie.getDuration()); ury = top - place * row_height;//from w w w .j a v a2s . c om lly = top - ((place + 1) * row_height); // FOREGROUND PdfContentByte foreground = writer.getDirectContent(); // rectangle foreground.setColorStroke(BLACK); foreground.setLineWidth(1); foreground.moveTo(urx, lly); foreground.lineTo(llx, lly); foreground.lineTo(llx, ury); foreground.lineTo(urx, ury); foreground.closePathStroke(); // title ColumnText ct = new ColumnText(foreground); ct.setSimpleColumn(new Phrase(movie.getTitle(), SMALLEST), llx, lly, urx, ury, 14, Element.ALIGN_CENTER); ct.go(); // BACKGROUND PdfContentByte background = writer.getDirectContentUnder(); // draw background background.setColorFill(getColor(movie)); background.moveTo(urx, lly); background.lineTo(llx, lly); background.lineTo(llx, ury); background.lineTo(urx, ury); background.fill(); // draw a white P for press screenings if (screening.getPress() == 1) { background.saveState(); background.beginText(); background.setFontAndSize(FONT, 24); background.setColorFill(WHITE); background.showTextAligned(Element.ALIGN_CENTER, "P", (llx + urx) / 2f, (lly + ury) / 2f - 12, 0); background.endText(); background.restoreState(); } // draw shortfilm background.setColorStroke(WHITE); if (screening.getShortfilm() > 0) { background.moveTo(llx + (minute * screening.getShortfilm()), lly); background.lineTo(llx + (minute * screening.getShortfilm()), ury); background.stroke(); } }
From source file:com.actelion.research.spiritapp.print.CagePrinterPDF.java
License:Open Source License
private static void drawCageSeparation(Document doc, PdfContentByte canvas) { canvas.setLineWidth(1f); canvas.setColorStroke(Color.BLACK); canvas.moveTo(0, doc.getPageSize().getHeight() / 2); canvas.lineTo(doc.getPageSize().getWidth(), doc.getPageSize().getHeight() / 2); canvas.moveTo(doc.getPageSize().getWidth() / 4, 0); canvas.lineTo(doc.getPageSize().getWidth() / 4, doc.getPageSize().getHeight()); canvas.moveTo(2 * doc.getPageSize().getWidth() / 4, doc.getPageSize().getBottom()); canvas.lineTo(2 * doc.getPageSize().getWidth() / 4, doc.getPageSize().getHeight()); canvas.moveTo(3 * doc.getPageSize().getWidth() / 4, 0); canvas.lineTo(3 * doc.getPageSize().getWidth() / 4, doc.getPageSize().getHeight()); canvas.stroke();//from w w w .j a va 2 s . com }
From source file:com.dlya.facturews.DlyaPdfExporter2.java
License:Open Source License
/** * *//*from w w w .j ava 2 s . c o m*/ private static void preparePen(PdfContentByte pdfContentByte, JRPen pen, int lineCap) { float lineWidth = pen.getLineWidth().floatValue(); if (lineWidth <= 0) { return; } pdfContentByte.setLineWidth(lineWidth); pdfContentByte.setLineCap(lineCap); Color color = pen.getLineColor(); pdfContentByte.setRGBColorStroke(color.getRed(), color.getGreen(), color.getBlue()); switch (pen.getLineStyleValue()) { case DOUBLE: { pdfContentByte.setLineWidth(lineWidth / 3); pdfContentByte.setLineDash(0f); break; } case DOTTED: { switch (lineCap) { case PdfContentByte.LINE_CAP_BUTT: { pdfContentByte.setLineDash(lineWidth, lineWidth, 0f); break; } case PdfContentByte.LINE_CAP_PROJECTING_SQUARE: { pdfContentByte.setLineDash(0, 2 * lineWidth, 0f); break; } } break; } case DASHED: { switch (lineCap) { case PdfContentByte.LINE_CAP_BUTT: { pdfContentByte.setLineDash(5 * lineWidth, 3 * lineWidth, 0f); break; } case PdfContentByte.LINE_CAP_PROJECTING_SQUARE: { pdfContentByte.setLineDash(4 * lineWidth, 4 * lineWidth, 0f); break; } } break; } case SOLID: default: { pdfContentByte.setLineDash(0f); break; } } }
From source file:com.estate.pdf.Page.java
protected void drawFilledRect(Rectangle rct, Color color) { PdfContentByte cb = writer.getDirectContentUnder(); // Do the lower left box cb.setLineWidth(0); cb.setRGBColorStroke(255, 255, 255); cb.rectangle(rct.getLeft(), rct.getBottom(), rct.getWidth(), rct.getHeight()); cb.setColorFill(color);//from www . ja v a2 s . co m cb.closePathFillStroke(); }
From source file:com.estate.pdf.Page.java
protected void drawLine(float x1, float y1, float x2, float y2, Color color) { PdfContentByte cb = writer.getDirectContentUnder(); // Set our line color cb.setColorStroke(color);/* w ww . jav a2 s . co m*/ cb.setLineWidth(.75f); // do the line cb.moveTo(x1, y1); cb.lineTo(x2, y2); cb.stroke(); }