2011-06-13 65 views
8

¿Es posible agregar un borde a una página en un documento PDF usando iTextSharp? Estoy generando el archivo PDF desde cero, así que no necesito agregar bordes a un documento ya existente.¿Cómo agrego un borde a una página usando iTextSharp?

Aquí está mi código, por ejemplo:

Document pdfDocument = new Document(PageSize.LETTER); 
Font headerFont = new Font(baseFont, 13); 
Font font = new Font(baseFont, 10); 
PdfWriter writer = PdfWriter.GetInstance(pdfDocument, 
             new FileStream(fileName, FileMode.Create)); 
pdfDocument.Open(); 

//I add IElements here. 

pdfDocument.Close(); 
+0

Estoy seguro de que puede. ¿Querías preguntar cómo hacerlo? – Oded

+0

Por supuesto [caracteres]. –

+0

No estoy seguro de si puede agregar un borde directamente al documento. Sin embargo, debería poder usar una tabla o 'PDFTable' para lograr el mismo resultado. –

Respuesta

7

Aquí hay una respuesta (adaptada de Mark Storer) en C#. Este ejemplo utiliza los márgenes de la página para dibujar el borde, que a veces considero útil para depurar el diseño de la página.

public override void OnEndPage(PdfWriter writer, Document document) 
{ 
    base.OnEndPage(writer, document); 

    var content = writer.DirectContent; 
    var pageBorderRect = new Rectangle(document.PageSize); 

    pageBorderRect.Left += document.LeftMargin; 
    pageBorderRect.Right -= document.RightMargin; 
    pageBorderRect.Top -= document.TopMargin; 
    pageBorderRect.Bottom += document.BottomMargin; 

    content.SetColorStroke(BaseColor.RED); 
    content.Rectangle(pageBorderRect.Left, pageBorderRect.Bottom, pageBorderRect.Width, pageBorderRect.Height); 
    content.Stroke(); 
} 
1

le sugiero que el contenido directo de la página actual como es que generamos, y su frontera con PdfContentByte.

Probablemente querrá una clase derivada de PdfPageEventHelper que dibuja en el evento onEndPage.

Puede consultar el tamaño de página actual a través del document del parámetro getPageSize(), y usar eso (un poco ajustado) para dibujar sus bordes. Dado que está utilizando iTextSharp, es probable que tenga una propiedad PageSize en lugar de un método "get".

Algo así como:

public void onEndPage(PdfWriter writer, Document doc) { 
    PdfContentByte content = writer.getDirectContent(); 
    Rectangle pageRect = doc.getPageSize(); 

    pageRect.setLeft(pageRect.getLeft() + 10); 
    pageRect.setRight(pageRect.getRight() - 10); 
    pageRect.setTop(pageRect.getTop() - 10); 
    pageRect.setBottom(pageRect.getBottom() + 10); 

    content.setColorStroke(Color.red); 
    content.rectangle(pageRect.getLeft(), pageRect.getBottom(), pageRect.getWidth(), pageRect.getHeight()); 
    content.stroke(); 
} 

Tenga en cuenta que en realidad se puede pasar una Rectangle en content.rectangle(), en cuyo momento que se utilizan frontera & configuración de relleno del rectángulo. Pensé que podría ser un poco confuso, así que no lo codifiqué de esa manera.

0

que fue capaz de hacerlo añadir borde rojo a un PDF existente

public void createPdf(PdfReader pdfReader) 
     throws DocumentException, IOException { 
    String userDir = System.getProperty("user.dir"); 
    System.out.println("userDir = " + userDir); 
    RESULT = userDir + "/work/"+"sample.pdf"; 
    // step 1 
    Document document = new Document(); 
    // step 2 
    PdfCopy copy = new PdfCopy(document, new FileOutputStream(RESULT)); 

    // step 3 
    document.open(); 
    int noOfPages = pdfReader.getNumberOfPages(); 
    for (int page = 0; page < noOfPages;) { 
     if(page==0) { 
      PdfImportedPage immportedPage = copy.getImportedPage(pdfReader, ++page); 
      PageStamp stamp = copy.createPageStamp(immportedPage); 
      PdfContentByte canvas = stamp.getOverContent(); 
      drawPageBorder(canvas, PageSize.A4.getWidth(), PageSize.A4.getHeight()); 
      stamp.alterContents(); 
      copy.addPage(immportedPage); 
     } else { 
      copy.addPage(copy.getImportedPage(pdfReader, ++page)); 
     } 
    } 

    copy.freeReader(pdfReader); 
    pdfReader.close(); 
    // step 4 
    document.close(); 
} 

public void drawPageBorder(PdfContentByte content, float width, float height) { 
    content.saveState(); 
    PdfGState state = new PdfGState(); 
    state.setFillOpacity(0.0f); 
    content.setGState(state); 
    content.setColorStroke(BaseColor.RED); 
    content.setLineWidth(6); 
    content.rectangle(5, 5, width, height); 
    content.fillStroke(); 
    content.restoreState(); 
} 
Cuestiones relacionadas