Как откалибровать координаты печати PDF - PullRequest
0 голосов
/ 11 июля 2019

Я делаю некоторый код Java, используя библиотеку pdfbox 2.0.16 для печати прямоугольника с точной координатой (x, y).

Я хочу указать координаты в мм.

Я конвертируюмм в единице pdfbox, используя это:

public static float getInc(float mm)
{
    return mm / (25.4f / 72f);
}

Поэтому я создаю документ и страницу

 float page_w_mm = 210f;
 float page_h_mm = 297f;

 PDDocument doc = new PDDocument();
 PDRectangle pageSize = new PDRectangle(PDFUtils.getInc(page_w_mm), PDFUtils.getInc(page_h_mm));
 PDPage page1 = new PDPage(pageSize);

 page1.setMediaBox(pageSize);
 page1.setCropBox(pageSize);

и печатаю прямоугольник, используя этот метод

public static void drawRect(PDPageContentStream content, float x_mm, float y_mm) {
..
float w = 3;
float h = 3;
content.addRect(getInc(x_mm), getInc(y_mm), getInc(w), getInc(h));
PDColor black = new PDColor(new float[]
        {
            0, 0, 0
        }, PDDeviceRGB.INSTANCE);
content.setNonStrokingColor(black);
content.fill();

..}

затем после закрытия страницы, документа и т. Д. Я пытаюсь распечатать его с помощью этого кода

String printerNameDesired = "MYPrinter";
PrintService[] service = PrinterJob.lookupPrintServices(); 
DocPrintJob docPrintJob = null;
for (int i = 0; i < service.length; i++) {
    System.out.println(service[i].getName());
    if (service[i].getName().equalsIgnoreCase(printerNameDesired ))       
    {
        docPrintJob = service[i].createPrintJob();
        break;
    }
}

try {
    final HashPrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet();
    attrs.add( new MediaPrintableArea(0, 0, page_w_mm, page_h_mm,
             MediaPrintableArea.MM));


    PrinterJob pjob = PrinterJob.getPrinterJob();

    Paper paper = pjob.defaultPage().getPaper();
paper.setImageableArea(0, 0, paper.getWidth(), paper.getHeight());

pjob.setPrintService(docPrintJob.getPrintService());
pjob.setJobName("job");
pjob.setPageable(new PDFPageable(doc));

pjob.print(attrs);

проблема в том, что при печати документа координата x rect всегда верна, ноу прямоугольная координата неверна (она всегда на 4 мм больше указанной)

Почему?

...