net - itext sample
¿Orientación y posicionamiento del paisaje? (3)
Acabo de comenzar a trabajar con iText (5.4.2, versión más reciente) y hay dos cosas que aún no he logrado aclarar.
- Creando documentos en el paisaje. Todas las páginas son retratadas.
- Insertar imágenes en una posición dada (número de milímetros desde arriba y hacia la izquierda).
Tengo el código de abajo.
Document d = new Document(PageSize.A4_LANDSCAPE,0,0,0,0);
PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream("C:/test.pdf"));
document.open();
document.newPage();
Image img = Image.getInstance(String.format("C:/file.png"));
img.scaleToFit(400,240);
document.left(100f);
document.top(150f);
document.add(img);
document.close();
Pero la página se representa en vertical (no horizontal) y la imagen se coloca en la esquina superior izquierda (no a 10 y 15 unidades de distancia, según se solicite). ¿Qué estoy haciendo mal?
Está utilizando PageSize.A4_LANDSCAPE
, una variable que fue introducida por un colaborador y que nunca debería haberse agregado a la versión principal. Por favor use PageSize.A4.rotate()
lugar.
No está claro lo que quieres lograr con las líneas:
document.left(100f);
document.top(150f);
Esos son captadores, no setters. Parece que estás asumiendo que el PDF es similar al HTML. Esa suposición es errónea.
Si desea que la imagen se coloque 10 unidades de usuario desde la izquierda y 15 desde la parte superior (en cuyo caso 100 y 150 son valores incorrectos), puede reemplazar los valores 0 en el constructor de documentos para definir un margen izquierdo de 10 unidades de usuario y el margen superior 15 unidades de usuario.
Otra forma sería definir una posición absoluta para la imagen con el método setAbsolutePosition()
. En ese caso, debe tener en cuenta que el sistema de coordenadas está orientado de tal manera que la esquina inferior izquierda de la página tiene la coordenada x = 0, y = 0 para los documentos creados desde cero.
Document d = new Document(PageSize.A4.rotate(), 10f, 10f, 10f, 0f);
esto funcionó para mí, acabo de piratear algunos bits del anterior
iTextSharp.text.Document pdfDoc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4.Rotate(), 10f, 10f, 10f, 0f);