pdfbox unit-conversion

PDFBox convierte pulgadas o centímetros en el sistema de coordenadas



unit-conversion (1)

Soy nuevo en PDFBox (y en la generación de PDF) y tengo dificultades para generar mi propio PDF.

Tengo texto con ciertas coordenadas en pulgadas / centímetros y necesito convertirlos a las unidades que usa PDFBox. ¿Alguna sugerencia / utilidad que pueda hacer esto automáticamente?

PDPageContentStream.moveTextPositionByAmount(x,y) tiene ningún sentido para mí.


En general, PDFBox utiliza las coordenadas del espacio de usuario de PDF al crear un PDF. Esto significa:

  1. Las coordenadas de una página están delimitadas por su CropBox de forma predeterminada a su MediaBox , los valores aumentan de izquierda a derecha y de abajo a arriba. Por lo tanto, si crea una página con el new PDPage() o el new PDPage(PDPage.PAGE_SIZE_*) el origen del sistema de coordenadas comienza en la esquina inferior izquierda de la página.

  2. La unidad en el espacio de usuario comienza como la unidad de espacio de usuario predeterminada definida por la Unidad de usuario de la página. La mayoría de las veces (por ejemplo, si crea una página utilizando cualquiera de los constructores de PDPage y no cambia ese valor explícitamente), no se establece explícitamente y, por lo tanto, sus patadas predeterminadas son de 1 inch72 pulgadas.

  3. El sistema de coordenadas del espacio de usuario se puede cambiar de forma bastante arbitraria concatenando una matriz a la matriz de transformación actual. La matriz de transformación actual comienza como la matriz de identidad.

    En PDFBox, puede hacer esto utilizando una de las sobrecargas de PDPageContentStream.concatenate2CTM() .

  4. Tan pronto como cambia al modo de texto utilizando PDPageContentStream.beginText() , el sistema de coordenadas utilizado se ve influido por la transformación introducida por la matriz de texto.

    En PDFBox, configura la matriz de texto utilizando una de las sobrecargas de PDPageContentStream.setTextMatrix() .

Como usted es nuevo en PDFBox (como dice) y nuevo en PDF en general (como supongo, porque de lo contrario probablemente habría reconocido las coordenadas), le aconsejaría que se abstuviera inicialmente de usar transformaciones siempre que sea posible y, por lo tanto, permanezca en El estado en el que el sistema de coordenadas comienza en la parte inferior izquierda, no está girado ni sesgado, y tiene una unidad de longitud de 1/72 pulgadas.

Para este contexto, puedes usar las constantes proporcionadas por PDFBox para la conversión:

  • Multiplica las coordenadas en pulgadas por PDPage.DEFAULT_USER_SPACE_UNIT_DPI para obtener las coordenadas de espacio de usuario predeterminadas.
  • Multiplique las coordenadas en mm por PDPage.MM_TO_UNITS para obtener las coordenadas de espacio de usuario predeterminadas.

Sin embargo, si desea divertirse con las coordenadas, mire la especificación PDF ISO-32000-1 y estudie las secciones 8.3 Sistemas de coordenadas y 9.4.4 Detalles del espacio de texto .

Las constantes de PDPage señaladas anteriormente solían ser accesibles en las versiones anteriores de PDFBox 1.8.x pero luego se ocultaron (en private ), y finalmente se eliminaron en la transición a PDFBox 2.x.

Para referencia, las constantes fueron definidas como

private static final int DEFAULT_USER_SPACE_UNIT_DPI = 72; private static final float MM_TO_UNITS = 1/(10*2.54f)*DEFAULT_USER_SPACE_UNIT_DPI;