¿Dónde está el origen (x, y) de una página PDF?

Las dimensiones de una página (también conocidas como los límites de la página) se definen en un diccionario de página:

  • /MediaBox: los límites del medio físico (la página). Este valor es obligatorio, por lo que lo encontrará en cada PDF.
  • /CropBox: la región que es visible cuando se muestra o imprime. El /CropBoxes igual o menor que el /MediaBox. Este valor es opcional; si falta, el /CropBoxes igual al /MediaBox.
  • Otros valores posibles son /BleedBox, /TrimBoxy /ArtBox. Estos se han definido para fines específicos, pero ya no se usan con tanta frecuencia. Si faltan, el valor predeterminado es /CropBox. Ninguno de estos valores puede sobredimensionar el /CropBox.

Cuando crea un documento con iText, define /MediaBoxexplícita o implícitamente.

Explícitamente:

Rectangle rect = new Rectangle(20, 20, 300, 600);
Document document = new Document(rect);

Implícitamente:

Document document = new Document();

Esta sola línea es equivalente a:

Rectangle rect = new Rectangle(0, 0, 595, 842);
Document document = new Document(rect);

Los cuatro parámetros pasados al Rectangleconstructor ( llx, lly, urx, ury) definen un rectángulo con la coordenadas x e y de la inferior izquierda y la esquina superior derecha.

En caso de que new Rectangle(0, 0, 595, 842), la esquina inferior izquierda de la página coincida con el origen del sistema de coordenadas (0, 0). La esquina superior derecha de la página coincide con la coordenada (595, 842).

Todas las medidas se definen en unidades de usuario y, por defecto, las unidades de usuario corresponden aproximadamente con el punto tipográfico: 1 unidad de usuario = 1 punto.

Tenga en cuenta la palabra más o menos : usamos puntos para hacer cálculos, pero en el estándar ISO, somos muy cautelosos de no usar punto como sinónimo de unidad de usuario. Por ejemplo: una página A4 mide 595 por 842 unidades de usuario, pero si calcula el valor exacto en puntos, habrá una ligera diferencia (algunos números después del punto).

La esquina inferior izquierda de la página no siempre es el origen del sistema de coordenadas. Si definimos una página usando Rectangle(20, 20, 300, 600), el origen es 20 unidades de usuario debajo y 20 unidades de usuario a la izquierda de la esquina inferior izquierda. También es posible usar valores negativos para definir un tamaño de página.

Por ejemplo: suponga que desea crear un documento A2 que consta de 4 páginas A4, de lo que podría definir los tamaños de página de esta manera:

Rectangle(-595, 0, 0, 842)   Rectangle(0, 0, 595, 842)
Rectangle(-595, -842, 0, 0)  Rectangle(0, -842, 595, 0);

Al definir el cuadro de medios de esta manera, también pasa información con respecto a la posición relativa de las diferentes páginas. Si observa las 4 páginas A4 como una unidad, el origen del sistema de coordenadas es el centro exacto de la página A2.

Importante:

Todo lo anterior supone que no introdujo ninguna transformación de coordenadas, por ejemplo, utilizando el método concatCTM()o transform(). Estos métodos le permiten cambiar el sistema de coordenadas, por ejemplo, cambiar el ángulo entre los ejes xey de 90 grados (el valor predeterminado) a otro ángulo. También puede escalar un eje para obtener una relación de aspecto diferente. Si bien es ciertamente divertido hacer esto, requiere bastante matemática.

Respuesta 1

Estoy tratando de usar el certificado SSL obtenido con StartSSL.com en un servidor Apache. La conexión con el navegador está bien, pero cuando trato de usar una aplicación Java, obtengo esta excepción: Excepción ...

¿Cómo nombra las interfaces de repositorio y servicio y sus clases de implementación? Por ejemplo, tengo un modelo con el nombre Pregunta. ¿Cómo llamarías al repositorio (interfaz e implementación) ...

Tengo un problema al abrir extensiones * .jnlp con Internet Explorer. La extensión se abre correctamente en Chrome y Firefox, lo que me hace creer que es un problema con IE y posiblemente el servidor web / ...

Tengo un modelo de tabla personalizado cuyos datos quiero editar en una JXTable, pero solo lectura en una segunda JXTable. ¿Se puede hacer esto sin tener dos modelos separados? ¿Hay alguna forma de anular el modelo ...