X đánh dấu vị trí - một công việc in ấn


10

Cho hai số, in một trang có chữ "X" ở vị trí đã chỉ định (± 10%).

Các số phải là tỷ lệ phần trăm hoặc phân số của kích thước khu vực in của trang, ví dụ [25,75]hoặc ["15%","0%"]hoặc [0.33,1]. Bạn không phải xem xét lợi nhuận. Chỉ cần nhớ cho biết số nào là chiều rộng, và chiều cao nào, và góc nào là gốc.

Tất nhiên bạn có thể cho rằng một máy in được kết nối và bất kỳ máy in ảo nào cũng được tính. Thực tế, bạn có thể muốn đặt máy in PDF làm máy in mặc định trước khi bắt đầu thử thách này.

Bạn có thể tạo một tệp có thể in (ví dụ: PDF) và gửi tệp đó đến máy in ảo, từ đó tạo ra tệp PDF kết quả của bạn, nhưng bạn không thể trực tiếp tạo tệp PDF cuối cùng. Đây phải là một công việc in ấn thích hợp.

Nếu có thể, vui lòng bao gồm ảnh, quét hoặc ảnh chụp màn hình kết quả hoặc liên kết đến tài liệu trực tuyến. Lưu ý rằng Imgur chấp nhận các tệp PDF.

Tất nhiên bạn sẽ nhận được nhiều lượt nâng cấp hơn nếu bạn thực sự đặt X thay vì xuất ra các dòng mới và khoảng trắng với phông chữ và kích thước giấy giả định.

Thí dụ

Đối với chiều cao đầu vào 75% và chiều rộng 25%, từ trên cùng bên trái, in tài liệu sau:


[25,75]



Chúng tôi có được phép đọc tệp hình ảnh từ bất cứ đâu không?
Beta Decay

@BetaDecay Tập tin hình ảnh gì?
Adám

Hình ảnh trong câu hỏi của bạn: i.stack.imgur.com/rfZeO.png
Beta Decay

@BetaDecay Bạn phải tạo tài liệu, không đọc hình ảnh.
Adám

Kích thước giấy nào chúng ta nên sử dụng / giả sử, hoặc nó có vấn đề?
Stephen

Câu trả lời:


6

MacOS Bash + OfficeJet Pro 8600, 46

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

Nguồn gốc là góc trên cùng bên trái.

Tôi đã thực hiện một bản in thử để kiểm tra kích thước ký tự của những gì được in bằng lpmáy in của mình - nó dường như là 82w x 64h, do đó (số nguyên) nhân tỷ lệ phần trăm với 3/5 và 4/5 tương ứng trong phạm vi dung sai 10%.

Kết quả, với đầu vào dòng lệnh của 25 75:

nhập mô tả hình ảnh ở đây


6
Whoa, phải là đệ trình đối tượng vật lý đầu tiên trên PPCG.
Adám


1
@ Adám thì sao?
NoOneIsHãy

1

APL (Dyalog) trên Windows, 36 35 byte

Hàm ẩn danh (Y, X) tính theo phần trăm từ trên cùng bên trái làm đối số

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

Chúng tôi bắt đầu với một danh sách gồm ba yếu tố:

{ một hàm ẩn danh (tất cả các biến là cục bộ)

 đối số, vd 75 25

( bên phải của

  'X'⎕WC'Printer'W indows C đối tượng reate một máy in có tên là X , trở về'#.X'

  2↓ thả hai nhân vật để có được chỉ 'X'

) bên phải của

'Text' những gì chúng tôi sẽ thêm

'X.'⎕WCW indows C reate một đối tượng (loại, nội dung, vị trí) trong đối tượng X , trả về'#.X'

} kết thúc chức năng (vì X là cục bộ, nó bị hủy khi chức năng kết thúc, báo hiệu cho Windows rằng chúng ta đã hoàn thành công việc in, khiến Windows phải in nó)


X @ 75 25


0

Java 8, 210 209 byte

-1 byte: đã thay đổi thành cú pháp 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){}};

Lấy đầu vào là phiên bản dấu phẩy động của phần trăm : 0.25, 0.75.

Nếu kích thước giấy có thể được giả định là 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){}};

Sử dụng các giá trị mặc định để in thành PDF. Bây giờ lấy đầu vào là phiên bản số nguyên của phần trăm : 25, 75.

Nếu một hệ điều hành Windows cũng có thể được giả sử, 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){}};

Đầu vào tương tự như trên : 25, 75.

Sử dụng

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

Trường hợp thử nghiệm

Đối với đầu vào của 0.25, 0.75:

Java Printing Test Case

(Tôi không có một máy in vật lý, nhưng điều này nên vẫn làm việc mà không vấn đề)


Rất ấn tượng. Tại sao bạn cần catch(Exception e){}?
Adám

@ Adám Bởi vì PrinterJob.print()ném a PrinterExceptionvà tôi không thấy cách nào để vượt qua nó.
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 là một phông chữ được cài đặt trên máy Windows 10 của tôi theo mặc định trong đó 4 dường như là tên phông chữ ngắn nhất. Tôi đã kiểm tra điều đó bằng cách chạy các mục sau trong C # và sau đó kiểm tra blahtrong trình gỡ lỗi.

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

Phiên bản đầy đủ / định dạng:

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

Trường hợp thử nghiệm (0,25, 0,75):


Tài liệu mẫu

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.