X menandai tempat - pekerjaan cetak

10

Diberi dua angka, cetak halaman dengan "X" di lokasi yang ditentukan (± 10%).

Angka-angka harus baik persentase atau fraksi dari halaman area cetak dimensi, misalnya [25,75]atau ["15%","0%"]atau [0.33,1]. Anda tidak harus mempertimbangkan margin. Ingatlah untuk menyatakan angka mana yang lebar, dan mana yang tinggi, dan sudut mana yang merupakan asal.

Anda tentu saja dapat berasumsi bahwa sebuah printer terhubung, dan semua printer virtual juga diperhitungkan. Bahkan, Anda mungkin ingin mengatur printer PDF sebagai printer default Anda sebelum memulai tantangan ini.

Anda dapat membuat file yang dapat dicetak (mis. PDF) dan mengirimkannya ke printer virtual, yang pada gilirannya menciptakan hasil PDF Anda, tetapi Anda mungkin tidak secara langsung membuat PDF final. Ini harus menjadi pekerjaan cetak yang tepat.

Jika memungkinkan, harap sertakan foto, pindaian, atau tangkapan layar hasil, atau tautan ke dokumen online. Perhatikan bahwa Imgur menerima PDF.

Anda tentu saja akan mendapatkan lebih banyak upvotes jika Anda benar-benar menempatkan X daripada mengeluarkan baris baru dan spasi dengan asumsi font dan ukuran kertas.

Contoh

Untuk tinggi input 75% dan lebar 25%, dari kiri atas, cetak dokumen berikut:


[25,75]


Adm
sumber
Apakah kami diizinkan membaca file gambar dari mana saja?
Beta Decay
@ BetaDecay File gambar apa?
Adám
Gambar dalam pertanyaan Anda: i.stack.imgur.com/rfZeO.png
Beta Decay
@ BetaDecay Anda seharusnya menghasilkan dokumen, bukan membaca gambar.
Adám
Berapa ukuran kertas yang harus kita gunakan / asumsikan, atau apakah itu penting?
Stephen

Jawaban:

6

MacOS Bash + OfficeJet Pro 8600, 46

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

Asal adalah sudut kiri atas.

Saya melakukan tes cetak untuk memeriksa dimensi karakter dari apa yang akan dicetak lpke printer saya - tampaknya 82w x 64jam, jadi (bilangan bulat) mengalikan persentase dengan 3/5 dan 4/5 masing-masing mendapat toleransi 10%.

Hasil, dengan input baris perintah 25 75:

masukkan deskripsi gambar di sini

Trauma Digital
sumber
6
Whoa, harus menjadi objek pengajuan objek fisik pertama di PPCG.
Adám
@ Adám nggak - Saya punya beberapa pertanyaan printer saya juga :)
Digital Trauma
1
@ Adám bagaimana dengan ini ?
NoOneIsHere
1

APL (Dyalog) pada Windows, 36 35 byte

Pengambilan fungsi anonim (Y, X) dalam persen dari kiri atas sebagai argumen

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

Kita mulai dengan daftar tiga elemen:

{ fungsi anonim (semua variabel lokal)

 argumennya, mis 75 25

( di sebelah kanan dari

  'X'⎕WC'Printer'W indows C membuat objek Printer bernama X , kembali'#.X'

  2↓ turunkan dua karakter untuk mendapatkan yang adil 'X'

) di sebelah kanan dari

'Text' apa yang akan kita tambahkan

'X.'⎕WCW menginduksi C membuat objek (tipe, konten, posisi) dalam objek X , kembali'#.X'

} akhir fungsi (karena X adalah lokal, ia dihancurkan ketika fungsi berakhir, memberi sinyal ke Windows bahwa kita selesai dengan pekerjaan cetak, yang menyebabkan Windows untuk mencetaknya)


X @ 75 25

Adm
sumber
0

Java 8, 210 209 byte

-1 byte: diubah ke sintaks currying

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

Mengambil input sebagai versi floating-point dari persen: 0.25, 0.75.

Jika ukuran kertas dapat diasumsikan 8.5x11in (72dpi), 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){}};

Menggunakan nilai default untuk mencetak ke PDF. Sekarang mengambil input sebagai versi integer persen: 25, 75.

Jika OS Windows juga dapat diasumsikan, 177 byte

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

Input yang sama seperti di atas: 25, 75.

Pemakaian

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

Kasus cobaan

Untuk input dari 0.25, 0.75:

Java Printing Test Case

(Saya tidak memiliki printer fisik, tetapi ini harus tetap bekerja tanpa masalah)

Justin Mariner
sumber
Sangat mengesankan. Mengapa Anda perlu catch(Exception e){}?
Adám
@ Adám Karena PrinterJob.print()melempar PrinterExceptiondan saya tidak melihat cara untuk menyiasatinya.
Justin Mariner
0

C #, 259 202 201 byte

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 adalah font yang diinstal pada mesin Windows 10 saya secara default di mana 4 tampaknya menjadi nama font terpendek. Saya mengujinya dengan menjalankan yang berikut ini di C # dan kemudian memeriksa blahdi debugger.

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

Versi lengkap / diformat:

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

Test case (0,25, 0,75):


Contoh dokumen

TheLethalCoder
sumber