Я делаю некоторый код 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 мм больше указанной)
Почему?