X marca el lugar: un trabajo de impresión

10

Con dos números, imprima una página con una "X" en la ubicación especificada (± 10%).

Los números deben ser porcentajes o fracciones de las dimensiones del área de impresión de la página, por ejemplo, [25,75]or ["15%","0%"]o [0.33,1]. No tiene que considerar los márgenes. Solo recuerde indicar qué número es ancho, cuál es alto y qué esquina es el origen.

Por supuesto, puede suponer que hay una impresora conectada y que cualquier impresora virtual también cuenta. De hecho, es posible que desee configurar una impresora PDF como su impresora predeterminada antes de comenzar este desafío.

Puede crear un archivo imprimible (por ejemplo, un PDF) y enviarlo a una impresora virtual, que a su vez crea el PDF resultante, pero no puede crear directamente el PDF final. Este tiene que ser un trabajo de impresión adecuado.

Si es posible, incluya una foto, escaneo o captura de pantalla del resultado, o enlace a un documento en línea. Tenga en cuenta que Imgur acepta archivos PDF.

Por supuesto, obtendrá más votos a favor si realmente coloca una X en lugar de generar nuevas líneas y espacios con una fuente y un tamaño de papel asumidos.

Ejemplo

Para una altura de entrada del 75% y un ancho del 25%, desde la parte superior izquierda, imprima el siguiente documento:


[25,75]


Adán
fuente
¿Se nos permite leer el archivo de imagen desde cualquier lugar?
Beta Decay
@BetaDecay ¿Qué archivo de imagen?
Adám
La imagen en su pregunta: i.stack.imgur.com/rfZeO.png
Beta Decay
@BetaDecay Se supone que debes generar un documento, no leer una imagen.
Adám
¿Qué tamaño de papel debemos usar / asumir, o importa?
Stephen

Respuestas:

6

MacOS Bash + OfficeJet Pro 8600, 46

(yes ''|sed $[$2*3/5]q;printf %$[$1*4/5]sX)|lp

El origen es la esquina superior izquierda.

Hice una impresión de prueba para verificar las dimensiones de los caracteres de lo que se imprime lpen mi impresora: parece ser 82w x 64h, por lo que multiplicar los porcentajes (enteros) por 3/5 y 4/5 respectivamente dentro de la tolerancia del 10%.

Resultado, con entrada de línea de comando de 25 75:

ingrese la descripción de la imagen aquí

Trauma digital
fuente
66
Whoa, debe ser el primer envío de objetos físicos en PPCG.
Adám
@ Adám nope - También tuve algunas preguntas sobre mi impresora :)
Digital Trauma
1
@ Adám, ¿qué pasa con esto ?
NoOneIsHere
1

APL (Dyalog) en Windows, 36 35 bytes

Función anónima que toma (Y, X) en porcentaje desde la parte superior izquierda como argumento

{'X.'WC'Text'(2'X'WC'Printer')⍵}

Comenzamos con una lista de tres elementos:

{ una función anónima (todas las variables son locales)

 el argumento, por ejemplo 75 25

( a la derecha de

  'X'⎕WC'Printer'W indows C crea un objeto de impresora llamado X , que devuelve'#.X'

  2↓ suelta dos personajes para obtener solo 'X'

) a la derecha de

'Text' lo que agregaremos

'X.'⎕WCW indows C crea un objeto (tipo, contenido, posición) en el objeto X , devolviendo'#.X'

} fin de la función (dado que X es local, se destruye cuando finaliza la función, lo que indica a Windows que hemos terminado con el trabajo de impresión, lo que hace que Windows lo imprima)


X @ 75 25

Adán
fuente
0

Java 8, 210 209 bytes

-1 byte: cambiado a sintaxis curry

import java.awt.print.*;
x->y->{PrinterJob j=PrinterJob.getPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",(int)(p.getWidth()*x),(int)(p.getHeight()*y));return i;});try{j.print();}catch(Exception e){}};

Toma de entrada como la versión de coma flotante de ciento: 0.25, 0.75.

Si se puede suponer que el tamaño del papel es 8.5x11in (72dpi), 184 bytes

import java.awt.print.*;
x->y->{PrinterJob j=PrinterJob.getPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",x*612/100,y*792/100);return i;});try{j.print();}catch(Exception e){}};

Utiliza valores predeterminados para imprimir en PDF. Ahora toma la entrada como la versión número entero de por ciento: 25, 75.

Si también se puede suponer un sistema operativo Windows, 177 bytes

import sun.awt.windows.*;
x->y->{WPrinterJob j=new WPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",x*612/100,y*792/100);return i;});try{j.print();}catch(Exception e){}};

Mismas entradas que el anterior: 25, 75.

Uso

import java.awt.print.*;
...
Function<Double, Consumer<Double>> f =
x->y->{PrinterJob j=PrinterJob.getPrinterJob();j.setPrintable((g,p,i)->{g.drawString("X",(int)(p.getWidth()*x),(int)(p.getHeight()*y));return i;});try{j.print();}catch(Exception e){}};
...
f.apply(.25).accept(.75);

Caso de prueba

Para entrada de 0.25, 0.75:

Java Printing Test Case

(No tengo una impresora física, pero aún así debería funcionar sin problemas)

Justin Mariner
fuente
Muy impresionante. ¿Por qué lo necesitas catch(Exception e){}?
Adám
@ Adám Porque PrinterJob.print()arroja una PrinterExceptiony no vi ninguna forma de evitarlo.
Justin Mariner
0

C #, 259 202 201 bytes

namespace System.Drawing.Printing{w=>h=>{var p=new PrintDocument();p.PrintPage+=(s,e)=>e.Graphics.DrawString("X",new Font("Onyx",9),Brushes.Red,e.PageBounds.Width*w,e.PageBounds.Height*h);p.Print();};}

Onyx es una fuente instalada en mi máquina con Windows 10 de forma predeterminada, donde 4 parece ser el nombre de fuente más corto. Probé eso ejecutando lo siguiente en C # y luego inspeccionando blahen el depurador.

var blah = FontFamily.Families.GroupBy(o => o.Name.Length)
                              .OrderBy(g => g.Key);

Versión completa / formateada:

namespace System.Drawing.Printing
{
    class P
    {
        static void Main(string[] args)
        {
            Func<float, Action<float>> f = w => h =>
            {
                var p = new PrintDocument();
                p.PrintPage += (s, e) =>
                    e.Graphics.DrawString("X", new Font("Onyx", 9), Brushes.Red,
                                          e.PageBounds.Width * w, e.PageBounds.Height * h);
                p.Print();
            };

            f(0.25f)(0.75f);
        }
    }
}

Caso de prueba (0.25, 0.75):


Documento de ejemplo

TheLethalCoder
fuente