343 |
343 |
344 @param printer reference to a ready configured printer object |
344 @param printer reference to a ready configured printer object |
345 (QPrinter) |
345 (QPrinter) |
346 @param diagramName name of the diagram (string) |
346 @param diagramName name of the diagram (string) |
347 """ |
347 """ |
348 painter = QPainter() |
348 painter = QPainter(printer) |
349 painter.begin(printer) |
349 |
350 offsetX = 0 |
|
351 offsetY = 0 |
|
352 widthX = 0 |
|
353 heightY = 0 |
|
354 font = QFont("times", 10) |
350 font = QFont("times", 10) |
355 painter.setFont(font) |
351 painter.setFont(font) |
356 fm = painter.fontMetrics() |
352 fm = painter.fontMetrics() |
357 fontHeight = fm.lineSpacing() |
353 fontHeight = fm.lineSpacing() |
358 marginX = printer.pageRect().x() - printer.paperRect().x() |
354 marginX = ( |
|
355 printer.pageLayout().paintRectPixels(printer.resolution()).x() - |
|
356 printer.pageLayout().fullRectPixels(printer.resolution()).x() |
|
357 ) |
359 marginX = ( |
358 marginX = ( |
360 Preferences.getPrinter("LeftMargin") * |
359 Preferences.getPrinter("LeftMargin") * |
361 int(printer.resolution() / 2.54) - marginX |
360 int(printer.resolution() / 2.54) - marginX |
362 ) |
361 ) |
363 marginY = printer.pageRect().y() - printer.paperRect().y() |
362 marginY = ( |
|
363 printer.pageLayout().paintRectPixels(printer.resolution()).y() - |
|
364 printer.pageLayout().fullRectPixels(printer.resolution()).y() |
|
365 ) |
364 marginY = ( |
366 marginY = ( |
365 Preferences.getPrinter("TopMargin") * |
367 Preferences.getPrinter("TopMargin") * |
366 int(printer.resolution() / 2.54) - marginY |
368 int(printer.resolution() / 2.54) - marginY |
367 ) |
369 ) |
368 |
370 |
375 printer.height() - fontHeight - 4 - marginY - |
377 printer.height() - fontHeight - 4 - marginY - |
376 Preferences.getPrinter("BottomMargin") * |
378 Preferences.getPrinter("BottomMargin") * |
377 int(printer.resolution() / 2.54) |
379 int(printer.resolution() / 2.54) |
378 ) |
380 ) |
379 |
381 |
380 border = self.border == 0 and 5 or self.border |
382 self.scene().render(painter, |
381 rect = self._getDiagramRect(border) |
383 target=QRectF(marginX, marginY, width, height)) |
382 diagram = self.__getDiagram(rect) |
384 |
383 |
385 # write a foot note |
384 finishX = False |
386 tc = QColor(50, 50, 50) |
385 finishY = False |
387 painter.setPen(tc) |
386 page = 0 |
388 painter.drawRect(marginX, marginY, width, height) |
387 pageX = 0 |
389 painter.drawLine(marginX, marginY + height + 2, |
388 pageY = 1 |
390 marginX + width, marginY + height + 2) |
389 while not finishX or not finishY: |
391 painter.setFont(font) |
390 if not finishX: |
392 painter.drawText(marginX, marginY + height + 4, width, |
391 offsetX = pageX * width |
393 fontHeight, Qt.AlignmentFlag.AlignRight, diagramName) |
392 pageX += 1 |
|
393 elif not finishY: |
|
394 offsetY = pageY * height |
|
395 offsetX = 0 |
|
396 pageY += 1 |
|
397 finishX = False |
|
398 pageX = 1 |
|
399 if (width + offsetX) > diagram.width(): |
|
400 finishX = True |
|
401 widthX = diagram.width() - offsetX |
|
402 else: |
|
403 widthX = width |
|
404 if diagram.width() < width: |
|
405 widthX = diagram.width() |
|
406 finishX = True |
|
407 offsetX = 0 |
|
408 if (height + offsetY) > diagram.height(): |
|
409 finishY = True |
|
410 heightY = diagram.height() - offsetY |
|
411 else: |
|
412 heightY = height |
|
413 if diagram.height() < height: |
|
414 finishY = True |
|
415 heightY = diagram.height() |
|
416 offsetY = 0 |
|
417 |
|
418 painter.drawPixmap(marginX, marginY, diagram, |
|
419 offsetX, offsetY, widthX, heightY) |
|
420 # write a foot note |
|
421 s = self.tr("{0}, Page {1}").format(diagramName, page + 1) |
|
422 tc = QColor(50, 50, 50) |
|
423 painter.setPen(tc) |
|
424 painter.drawRect(marginX, marginY, width, height) |
|
425 painter.drawLine(marginX, marginY + height + 2, |
|
426 marginX + width, marginY + height + 2) |
|
427 painter.setFont(font) |
|
428 painter.drawText(marginX, marginY + height + 4, width, |
|
429 fontHeight, Qt.AlignmentFlag.AlignRight, s) |
|
430 if not finishX or not finishY: |
|
431 printer.newPage() |
|
432 page += 1 |
|
433 |
394 |
434 painter.end() |
395 painter.end() |
435 |
396 |
436 ########################################################################### |
397 ########################################################################### |
437 ## The methods below should be overridden by subclasses to get special |
398 ## The methods below should be overridden by subclasses to get special |