Cambiar la escala de EPS según el tamaño del texto

Ya busqué durante mucho tiempo una forma elegante, pero no pude encontrar una opción. Estoy usando InDesign CS5 y quería saber cómo escalar un gráfico EPS (o cualquier otro vector) que inserté en mi póster de acuerdo con el tamaño del texto.
El archivo EPS que tengo contiene esquemas de reacciones químicas con símbolos de elementos y enlaces, etc. (hecho por ChemDraw). El texto que se incluye en este archivo sigue siendo un texto de texto (no lo convertí en curvas ni nada). Ahora estoy buscando el poder de agrandar estos esquemas de reacción diciéndole al programa que haga que la fuente tenga un tamaño de 20 pt, por ejemplo, y que todos los demás elementos de este gráfico vectorial se amplíen proporcionalmente .
la razonla razón por la que pregunto esto es porque tengo varias de esas imágenes, pero no se importan con el mismo tamaño, pero me gustaría mostrarlas de manera uniforme en todo el póster o documento.
La forma sucia sería escribir texto con el tamaño deseado junto a él y cambiar la escala del esquema hasta que los tamaños de fuente coincidan. Sin embargo, tan pronto como sea necesario que un esquema sea un poco más pequeño, tendría que repetir todo el proceso para cada gráfico.

Editar:
descarga del archivo EPS ficticio (el archivo se llama "wilkinson.eps" en referencia al catalizador)

Bueno, podría obtener esta métrica del propio eps. ¿Es posible que comparta una versión ficticia representativa?
Hola Crystal, bienvenida a GDSE y gracias por tu pregunta. Si desea obtener más información sobre el sitio, consulte el centro de ayuda o haga ping a uno de nosotros en el chat de diseño gráfico una vez que su reputación sea suficiente (20). ¡Sigue contribuyendo y disfruta del sitio!
¡Gracias por su cálida bienvenida! Preparé un enlace de descarga para un ejemplo de archivo EPS. ¿Eso es suficiente o ayudaría algo más?

Respuestas (2)

Al observar que el archivo EPS usa una sintaxis de estilo PDF, noté que la escala del texto se realiza con Tf:

8 0 0 8 5.327283 18.119995 Tm

Los 6 números son una matriz de transformación, donde el primer número ( 8) es la escala x y el cuarto número (también, como suele suceder, 8) es la escala y del texto. Tienes que elegir uno (bueno, generalmente): elegí el primer número.

A continuación, obtener el archivo de imagen de cualquier selección. Puede probar si una selección (ya sea 'directa' o su rectángulo principal) es cualquier gráfico y, de ser así, cuál es su descripción textual: imageTypeName. Para mi versión de InDesign, esto es "EPS".

Un archivo vinculado da acceso a su nombre de ruta completo original, y como el EPS es un formato de texto sin formato simple, puede leerlo una línea a la vez y probar con una expresión regular para que aparezca el primer comando Tf. Esta, la función scanFile, devuelve el tamaño real del texto. Al multiplicar esto por la escala del objeto, se obtiene el tamaño efectivo del texto, en la escala actual de su documento. Luego, todo lo que queda es emitir 2 resizecomandos: uno para el rectángulo contenedor y otro para la imagen contenedora.

El siguiente Javascript hace todo esto en un EPS seleccionado. Guárdelo como scaleEPS.jsxen su carpeta Panel de usuario/guiones. Cambie el desiredSizeen la parte superior a su tamaño deseado, o reemplácelo con la línea

desiredSize = Number(prompt("Size", "10"));

para ingresarlo para cada ejecución separada si necesita diferentes tamaños para cada ejecución.

//DESCRIPTION:Scale EPS Image for Text
// A Jongware Script 17-Jul-2015
var desiredSize = 12;

if (app.selection.length == 1)
{
    obj = app.selection[0];
    if (obj.hasOwnProperty('graphics') && obj.graphics.length == 1)
    obj = obj.graphics[0];
    if (obj instanceof EPS ||
        (obj instanceof Graphic && obj.imageTypeName == "EPS"))
    {
        textsize = scanFile (obj.itemLink.filePath);
        textsize *= obj.horizontalScale/100;
        obj.parent.resize (CoordinateSpaces.INNER_COORDINATES,
            AnchorPoint.CENTER_ANCHOR,
            ResizeMethods.MULTIPLYING_CURRENT_DIMENSIONS_BY, [desiredSize/textsize, desiredSize/textsize]);
        obj.resize (CoordinateSpaces.INNER_COORDINATES,
            AnchorPoint.CENTER_ANCHOR,
            ResizeMethods.MULTIPLYING_CURRENT_DIMENSIONS_BY, [desiredSize/textsize, desiredSize/textsize]);
    }
}

function scanFile (fullpath)
{
    var file = File(fullpath)
    if (file.open('r') == false)
        return 0;
    var m;
    while (!file.eof)
    {
        m = file.readln().match(/^(\d+(\.\d*)?)( (\d+(\.\d*)?)){5} Tm/);
        if (m)
        {
            file.close();
            return m[1];
        }
    }
    file.close();
    // a reasonable default
    return 10;
}

Algunos descargos de responsabilidad:

  1. Este script asume que está colocando archivos EPS, creados a través de ChemDraw y guardados exactamente como su archivo de muestra. No funcionará (lo más probable) con ningún EPS aleatorio.
  2. Devuelve el tamaño del primer elemento de texto en el EPS. Si hay varios tamaños diferentes, no sabría cuál usar de todos modos. Los textos en su archivo son todos iguales, bueno, más o menos. Los números del subíndice son un poco más pequeños. Si tiene mucha mala suerte, puede encontrarse con un archivo en el que el primer texto está en superíndice o subíndice; y luego se informará ese tamaño. (Es bien sabido que las computadoras hacen lo que les dices que hagan, no lo que tú quisiste que hicieran).
  3. Se supone que tanto la imagen como el rectángulo contenedor se pueden escalar con seguridad desde el centro. Verá que esto falla si corta un poco solo en un lado.

Este es un procedimiento muy simple. lo que sabes exactamente es cuánto agrandar (en porcentaje) un texto de 18pt a 20pt.

Simplemente mida el texto antes de ampliarlo (en píxeles o mm) y mídalo después de ampliarlo. luego haga algunos cálculos, y esta será la proporción con la que debe ampliar todo el dibujo.