X oznacza miejsce - zadanie drukowania

10

Biorąc pod uwagę dwie liczby, wydrukuj stronę ze znakiem „X” w określonej lokalizacji (± 10%).

Numery muszą być albo procenty lub frakcje o wymiarach strefy wydrukować stronę użytkownika, np [25,75]albo ["15%","0%"]albo [0.33,1]. Nie musisz brać pod uwagę marginesów. Pamiętaj tylko, aby podać, która liczba jest szerokością, a która wysokość, a który narożnik jest początkiem.

Możesz oczywiście założyć, że drukarka jest podłączona, a każda drukarka wirtualna również się liczy. W rzeczywistości przed rozpoczęciem tego wyzwania możesz ustawić drukarkę PDF jako drukarkę domyślną.

Możesz utworzyć plik do wydruku (np. PDF) i wysłać go do wirtualnej drukarki, która z kolei tworzy wynikowy plik PDF, ale nie możesz bezpośrednio utworzyć końcowego pliku PDF. To musi być właściwe zadanie drukowania.

Jeśli to możliwe, dołącz zdjęcie, skan lub zrzut ekranu wyniku lub link do dokumentu online. Pamiętaj, że Imgur akceptuje pliki PDF.

Oczywiście uzyskasz więcej głosów pozytywnych, jeśli faktycznie umieścisz X zamiast wypisywania nowych linii i spacji o założonej czcionce i rozmiarze papieru.

Przykład

W przypadku wysokości wejściowej 75% i szerokości 25% od lewego górnego rogu wydrukuj następujący dokument:


[25,75]


Adám
źródło
Czy wolno nam czytać plik obrazu z dowolnego miejsca?
Beta Decay
@BetaDecay Jaki plik obrazu?
Adám
Obraz w twoim pytaniu: i.stack.imgur.com/rfZeO.png
Rozpad
@BetaDecay Powinieneś wygenerować dokument, a nie odczytać obraz.
Adám
Jaki rozmiar papieru powinniśmy zastosować / założyć, czy ma to znaczenie?
Stephen

Odpowiedzi:

6

MacOS Bash + OfficeJet Pro 8600, 46

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

Pochodzenie to lewy górny róg.

Zrobiłem wydruk testowy, aby sprawdzić wymiary znaków drukowanych lpna mojej drukarce - wydaje się, że to 82 w x 64 godz., Więc (liczba całkowita) pomnożenie wartości procentowych odpowiednio przez 3/5 i 4/5 mieści się w granicach 10% tolerancji.

Wynik z wprowadzeniem z wiersza poleceń 25 75:

wprowadź opis zdjęcia tutaj

Cyfrowa trauma
źródło
6
Whoa, musi być pierwszym fizycznym zgłoszeniem obiektu w PPCG.
Adám
@ Adám nope - Mam też pytanie dotyczące mojej drukarki :)
Cyfrowa trauma
1
@ Adám co z tym ?
NoOneIsHere
1

APL (Dyalog) w systemie Windows, 36 35 bajtów

Funkcja anonimowa przyjmuje (Y, X) w procentach od lewego górnego rogu jako argument

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

Zaczynamy od listy trzech elementów:

{ funkcja anonimowa (wszystkie zmienne są lokalne)

 argument, np 75 25

( na prawo od

  'X'⎕WC'Printer'W indows C tworzy obiekt Printer o nazwie X , zwracając'#.X'

  2↓ upuść dwie postacie, aby dostać 'X'

) na prawo od

'Text' co dodamy

'X.'⎕WCW indows C tworzy obiekt (typ, treść, pozycja) w obiekcie X , zwracając'#.X'

} koniec funkcji (ponieważ X jest lokalny, jest niszczony, gdy funkcja się kończy, sygnalizując systemowi Windows, że skończyliśmy zadanie drukowania, co powoduje, że Windows je wydrukuje)


X @ 75 25

Adám
źródło
0

Java 8, 210 209 bajtów

-1 bajt: zmieniono na składnię 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){}};

Zajmuje wejście jako zmiennoprzecinkowej wersji procent: 0.25, 0.75.

Jeśli rozmiar papieru można przyjąć jako 8,5 x 11 cali (72 dpi), 184 bajty

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

Wykorzystuje wartości domyślne do drukowania do pliku PDF. Teraz trwa wejścia jako procent całkowitej z wersji: 25, 75.

Jeśli można również założyć system operacyjny Windows, 177 bajtów

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

Wejścia same jak powyżej: 25, 75.

Stosowanie

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

Przypadek testowy

Do wprowadzenia 0.25, 0.75:

Java Printing Test Case

(Nie mam drukarki fizycznej, ale powinna ona nadal działać bez problemu)

Justin Mariner
źródło
Bardzo imponujące. Dlaczego musisz catch(Exception e){}?
Adám
@ Adám Ponieważ PrinterJob.print()rzuca a PrinterExceptioni nie widziałem żadnego sposobu na obejście tego.
Justin Mariner
0

C #, 259 202 201 bajtów

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 to czcionka instalowana domyślnie na moim komputerze z systemem Windows 10, gdzie 4 wydaje się być najkrótszą nazwą czcionki. Przetestowałem to, uruchamiając następujące polecenia w C #, a następnie sprawdzając blahw debuggerze.

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

Pełna / sformatowana wersja:

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

Przypadek testowy (0,25; 0,75):


Przykładowy dokument

TheLethalCoder
źródło