Soy programador y tengo un código de impresión que dibuja una cuadrícula en el papel.
La cuadrícula tiene 4 columnas y tienen la misma longitud horizontal. La altura de la celda es una décima parte del tamaño del papel y es fija.
Se desconoce el número total de filas, pero sé con certeza que habrá al menos una fila y que las celdas tendrán dimensiones fijas.
El número máximo de caracteres que pueden caber en la celda es 50.
El usuario puede elegir el tamaño de papel en el que se realizará la impresión y allí me enfrento a un problema:
Dado que las dimensiones de la celda dependen del tamaño del papel, no sé cómo calcular el tamaño de la fuente para que el texto quepa en la celda.
Pedí ayuda en StackOverflow pero fallé, y traté de encontrar una fórmula matemática , pero esa solución no funcionó para todos los casos.
Pido disculpas por preguntar aquí, pero estoy desesperado en este momento. Si se requiere más información, pregunte y actualizaré mi publicación.
Gracias.
En general, un lenguaje de programación tendrá un contexto de dispositivo que le permitirá dibujar un texto de ejemplo y luego medir su ancho y alto. Por ejemplo, en python, usando el kit de herramientas GUI de wxPython:
import wx
dc = wx.ScreenDC()
#yourFont = wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.NORMAL, True)
#dc.SetFont(yourFont)
w,h = dc.GetTextExtent('X')
Independientemente de las herramientas que utilice, los requisitos suelen ser los mismos. Necesita saber el tamaño de fuente deseado y el relleno de celda deseado:
cell_height = padding_top + text_height + padding_bottom
donde las unidades son generalmente píxeles y text_height es af (fontSize).
Por lo general, no es recomendable cambiar el tamaño de las fuentes en función del ancho, a menos que esté dispuesto a ajustar el texto. Use un '...' o algo así para acortar el texto largo si no puede usar una nueva línea.
Tampoco escriba su propio código de ajuste de texto. Nuevamente, en Python:
import textwrap
a = "This sentence is less than 50 characters"
widthInChars = 20
lines = textwrap.wrap(a,widthInChars)
Ahora tiene una relación entre el tamaño de fuente, el espacio entre líneas, el relleno y el tamaño de celda.
WinAPI
y C++
. Tengo un contexto de dispositivo y una función que mide la longitud del texto, pero primero necesito seleccionar la fuente en el contexto del dispositivo. Esto significa que necesito "adivinar" el tamaño de la fuente, calcular la longitud del texto y solo luego verificar si se ajusta a la celda. Si no encaja, entonces necesito "hacer algo" para solucionarlo. Por lo general, no es recomendable cambiar el tamaño de las fuentes en función del ancho, a menos que esté dispuesto a ajustar el texto. Estoy dispuesto a hacer el envoltorio (pero no puedo usar ...
para cortar el texto adicional). No hay nada como lines = textwrap.wrap(a,widthInChars)
en WinAPI
.DrawTextExt
que arruinan mis planes, pero has entendido mi problema. Necesito algo similar que no modifique el rectángulo pasado si el texto es demasiado largo/alto.Si el usuario puede elegir el tamaño del papel impreso de una lista antes de ingresar cualquier texto en las celdas, ¿puede recorrer una serie de tamaños de papel y asignar a la tabla un tamaño de fuente según el papel? Esto requeriría muchas pruebas para ver qué fuentes se adaptan a qué tamaño de papel.
1 Obtendrá el tamaño de cualquier carácter de fuente, incluyendo todo (mayúsculas y ,-+'"&*#$ etc.), porque todas las fuentes tienen separaciones diferentes entre caracteres.
<div id='size23' >dd</div>...<div id='size43' >didididi</div>.... <div id='size54' >dwdwdwdw</div>
y use javascript para obtener el tamaño con diferentes combinaciones de caracteres
Width43 = getElementById('size43').offsetWidth; ....
2.-Cada fuente tiene una proporción de tamaño alto/ancho y métricas de fuente (proporción adicional personalizada), obtienes la proporción y la métrica de fuente para esa fuente. puede encontrar más aquí use una imagen del texto de fuente de zoom para obtenerlo.
3.-Utilice el número de proporción para obtener tamaños de celda como
proportion_number_font = 0.6
size_a = 0.10; size_b = 0.9 ...
total_a = 10, total_u = 5 , ......
Total_size = 34;
cell_width = total_size
cell_height = 0.6*34 ;
n = 2 // n is a proportional
addjust_cell_proportion = cell_width * n * proportion_number_font;
usuario13497
usuario13497
SiempreAprendiendoCosasNuevas
SiempreAprendiendoCosasNuevas
usuario13497
SiempreAprendiendoCosasNuevas