X markiert den Punkt - einen Druckauftrag

10

Drucken Sie bei zwei Zahlen eine Seite mit einem "X" an der angegebenen Stelle (± 10%).

Die Zahlen müssen entweder Prozentsätze oder Bruchteile der Druckbereichsabmessungen der Seite sein, z . B. [25,75]oder ["15%","0%"]oder [0.33,1]. Sie müssen keine Ränder berücksichtigen. Denken Sie daran, anzugeben, welche Zahl die Breite und welche die Höhe ist und welche Ecke der Ursprung ist.

Sie können natürlich davon ausgehen, dass ein Drucker angeschlossen ist und auch jeder virtuelle Drucker zählt. Möglicherweise möchten Sie sogar einen PDF-Drucker als Standarddrucker festlegen, bevor Sie mit dieser Herausforderung beginnen.

Sie können eine druckbare Datei (z. B. eine PDF-Datei) erstellen und diese an einen virtuellen Drucker senden, der wiederum Ihre Ergebnis-PDF-Datei erstellt. Möglicherweise erstellen Sie die endgültige PDF-Datei jedoch nicht direkt. Dies muss ein ordnungsgemäßer Druckauftrag sein.

Fügen Sie nach Möglichkeit ein Foto, einen Scan oder einen Screenshot des Ergebnisses oder einen Link zu einem Online-Dokument bei. Beachten Sie, dass Imgur PDFs akzeptiert.

Sie erhalten natürlich mehr positive Stimmen, wenn Sie tatsächlich ein X platzieren, anstatt Zeilenumbrüche und Leerzeichen mit einer angenommenen Schriftart und Papiergröße auszugeben.

Beispiel

Für die Eingabehöhe 75% und die Breite 25% drucken Sie von oben links das folgende Dokument:


[25,75]


Adam
quelle
Dürfen wir die Bilddatei von überall lesen?
Beta-Zerfall
@BetaDecay Welche Bilddatei?
Adám
Das Bild in Ihrer Frage: i.stack.imgur.com/rfZeO.png
Beta Decay
@BetaDecay Sie sollen ein Dokument generieren, kein Bild lesen.
Adám
Welches Papierformat sollten wir verwenden / annehmen, oder spielt es eine Rolle?
Stephen

Antworten:

6

MacOS Bash + OfficeJet Pro 8600, 46

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

Ursprung ist die obere linke Ecke.

Ich habe einen Testdruck durchgeführt, um die Zeichenabmessungen der Druckvorgänge lpauf meinem Drucker zu überprüfen. Es scheint 82 B x 64 H zu sein, sodass (ganzzahlige) Multiplikation der Prozentsätze mit 3/5 bzw. 4/5 innerhalb der 10% -Toleranz liegt.

Ergebnis mit Befehlszeileneingabe von 25 75:

Geben Sie hier die Bildbeschreibung ein

Digitales Trauma
quelle
6
Whoa, muss die erste physische Objekteinreichung auf PPCG sein.
Adám
@ Adám nein - ich hatte auch einige auf meiner Druckerfrage :)
Digital Trauma
1
@ Adám was ist damit ?
NoOneIsHere
1

APL (Dyalog) unter Windows, 36 35 Bytes

Anonyme Funktion, die (Y, X) in Prozent von oben links als Argument verwendet

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

Wir beginnen mit einer Liste von drei Elementen:

{ eine anonyme Funktion (alle Variablen sind lokal)

 das Argument, z 75 25

( rechts von

  'X'⎕WC'Printer'W indows C reate ein Druckerobjekt mit dem Namen X , Rückkehr'#.X'

  2↓ Lass zwei Zeichen fallen, um gerecht zu werden 'X'

) rechts von

'Text' was wir hinzufügen werden

'X.'⎕WCW indows C reate ein Objekt (Typ, Inhalt, Position) im Objekt X und kehrt zurück'#.X'

} Funktionsende (da X lokal ist, wird es beim Beenden der Funktion zerstört und signalisiert Windows, dass der Druckauftrag abgeschlossen ist, wodurch Windows ihn druckt.)


X @ 75 25

Adam
quelle
0

Java 8, 210 209 Bytes

-1 Byte: In Currying-Syntax geändert

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){}};

Nimmt die Eingabe als Gleitkommaversion von Prozent : 0.25, 0.75.

Wenn das Papierformat mit 72 dpi (8,5 x 11 Zoll) angenommen werden kann, 184 Byte

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){}};

Verwendet Standardwerte zum Drucken in PDF. Nimmt jetzt die Eingabe als ganzzahlige Version von Prozent : 25, 75.

Wenn auch ein Windows-Betriebssystem angenommen werden kann, 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){}};

Gleiche Eingaben wie oben : 25, 75.

Verwendungszweck

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);

Testfall

Zur Eingabe von 0.25, 0.75:

Java Printing Test Case

(Ich habe keinen physischen Drucker, aber dies sollte immer noch ohne Probleme funktionieren.)

Justin Mariner
quelle
Sehr beeindruckend. Warum brauchen Sie catch(Exception e){}?
Adám
@ Adám Weil PrinterJob.print()wirft ein PrinterExceptionund ich sah keinen Weg, um es zu umgehen.
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 ist eine Schriftart, die standardmäßig auf meinem Windows 10-Computer installiert ist, wobei 4 der kürzeste Schriftartname zu sein scheint. Ich habe das getestet, indem ich Folgendes in C # ausgeführt und dann blahim Debugger überprüft habe .

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

Vollversion / formatiert:

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);
        }
    }
}

Testfall (0,25, 0,75):


Beispieldokument

TheLethalCoder
quelle