2013-04-24 43 views
0

打印完整的文檔目前我正忙着與發展中國家其中PDF轉換成PNG,並使用PNG圖像打印出來到打印機的應用程序。與PySide/QT

的問題是,我可以打印出的圖像,但我不知道如何調整它的方式,它總是在紙上全尺寸。 Offcourse我想設置一些邊距,但圖像必須按照適合的方式重新調整大小。

的問題是,我真的沒有線索如何做到這一點,因爲文檔是非常有限的。

這是我當前的代碼打印的圖像:

#set up printer 
printer = QtGui.QPrinter(QtGui.QPrinter.HighResolution) 
printer.setPrinterName('Adobe PDF') #I print to my Adobe PDF software printer 
#set up image 
image = QtGui.QImage(pngFiles[0]) 
#paint & print 
painter = QtGui.QPainter() 
painter.begin(printer) 
painter.drawImage(100,100, image) 
painter.end() 

我認爲解決的辦法是在這一行: painter.drawImage(100,100,圖像)

它使圖像的保證金100從側面,但它不縮放。如何以適合文檔的方式縮放圖像?我特別尋找一種解決方案,它看起來像打印機的默認文檔大小。

回答

0

根據與Sashoalm談話,我可以做調整圖像大小,並很好地適應到紙張上進行打印。我已經剝離了我的expirmental代碼,它應該像這樣工作。

from PIL import Image 
imagefile = 'image.png' 

def scale(w, h, x, y, maximum=True): 
    nw = y * w/h 
    nh = x * h/w 
    if maximum^(nw >= x): 
     return nw or 1, y 
    return x, nh or 1 

#set up print printer. 
printer = QtGui.QPrinter(QtGui.QPrinter.HighResolution) 
#dlg = QtGui.QPrintDialog(printer, self) 
printer.setPrinterName('Adobe PDF') 

#check image size with PIL: 
image = Image.open(imagefile) 
imageWidth, imageHeight = image.size 

paperPixels = printer.pageRect(QtGui.QPrinter.DevicePixel) 
paperPixels = paperPixels.getRect() #get tuple of the "pixels on the paper" 
paperWidth = paperPixels[2] 
paperHeight = paperPixels[3] 

#set margins for paper 
paperMargin = 100 
#find out the image size 
paperWidth = paperWidth - (paperMargin*2) #times two, for left and right.. 
paperHeight = paperHeight - (paperMargin*2) 

#scale image within a rectangle. 
paintWidth, paintHeight = scale(imageWidth, imageHeight, paperWidth, paperHeight, True)    
#construct the paint dimensions area 
paintRect = QtCore.QRectF(paperMargin, paperMargin, paintWidth, paintHeight) 

#start painting 
image = QtGui.QImage(imagefile) 
painter = QtGui.QPainter() 
painter.begin(printer) 
painter.drawImage(paintRect, image) 
painter.end() 
#now the page gets printed out and the image should fit the paper. 
0

可以使用QPrinter::paperSize獲取文檔的大小。

對於調整大小繪製時它的圖像,使用的QPainter::drawImage重載的版本,這需要QRectF,而不是一個QPoint。圖像將被縮放以適合目的QRectF。

+0

我真的不明白你說的是什麼,對不起。順便說一下,我只有有限的python經驗,我使用Qt與C++。爲什麼這些功能不適合你? – sashoalm 2013-04-24 15:28:18

+0

我在您回答的同時刪除了我的評論。 我完全不理解你。當我這樣做時:papersize = QtGui.QPrinter.paperSize(打印機)。紙張大小是PySide.QtGui.QPrinter.PageSize.A4 ..一直到現在呢?還是我必須執行它不同? 也許你可以告訴我你將如何在C++代碼中完成它,也許我可以將它翻譯成Python。 – Ecno92 2013-04-24 16:32:21

+0

所以你的問題解決了 - paperSize給了你PageSize - 它是A4。你還需要什麼? A4是標準紙張尺寸,您知道嗎?請參閱http://en.wikipedia.org/wiki/Paper_size – sashoalm 2013-04-24 16:34:55