diff --git a/pdfreader.lua b/pdfreader.lua index 3a6a98ec5..1e506c219 100644 --- a/pdfreader.lua +++ b/pdfreader.lua @@ -135,8 +135,9 @@ function PDFReader:setzoom(page) local dc = pdf.newDC() local pwidth, pheight = page:getSize(self.nulldc) - if self.globalzoommode == self.ZOOM_FIT_TO_PAGE then - self.globalzoom = width / pwidth ---------- + if self.globalzoommode == self.ZOOM_FIT_TO_PAGE + or self.globalzoommode == self.ZOOM_FIT_TO_CONTENT then + self.globalzoom = width / pwidth self.offset_x = 0 self.offset_y = (height - (self.globalzoom * pheight)) / 2 if height / pheight < self.globalzoom then @@ -144,34 +145,43 @@ function PDFReader:setzoom(page) self.offset_x = (width - (self.globalzoom * pwidth)) / 2 self.offset_y = 0 end - elseif self.globalzoommode == self.ZOOM_FIT_TO_PAGE_WIDTH then + elseif self.globalzoommode == self.ZOOM_FIT_TO_PAGE_WIDTH + or self.globalzoommode == self.ZOOM_FIT_TO_CONTENT_WIDTH then self.globalzoom = width / pwidth self.offset_x = 0 self.offset_y = (height - (self.globalzoom * pheight)) / 2 - elseif self.globalzoommode == self.ZOOM_FIT_TO_PAGE_HEIGHT then + elseif self.globalzoommode == self.ZOOM_FIT_TO_PAGE_HEIGHT + or self.globalzoommode == self.ZOOM_FIT_TO_CONTENT_HEIGHT then self.globalzoom = height / pheight self.offset_x = (width - (self.globalzoom * pwidth)) / 2 self.offset_y = 0 - elseif self.globalzoommode == self.ZOOM_FIT_TO_CONTENT then + end + if self.globalzoommode == self.ZOOM_FIT_TO_CONTENT then local x0, y0, x1, y1 = page:getUsedBBox() - self.globalzoom = width / (x1 - x0) - self.offset_x = -1 * x0 * self.globalzoom - self.offset_y = -1 * y0 * self.globalzoom + (height - (self.globalzoom * (y1 - y0))) / 2 - if height / (y1 - y0) < self.globalzoom then - self.globalzoom = height / (y1 - y0) - self.offset_x = -1 * x0 * self.globalzoom + (width - (self.globalzoom * (x1 - x0))) / 2 - self.offset_y = -1 * y0 * self.globalzoom + if (x1 - x0) < pwidth then + self.globalzoom = width / (x1 - x0) + self.offset_x = -1 * x0 * self.globalzoom + self.offset_y = -1 * y0 * self.globalzoom + (height - (self.globalzoom * (y1 - y0))) / 2 + if height / (y1 - y0) < self.globalzoom then + self.globalzoom = height / (y1 - y0) + self.offset_x = -1 * x0 * self.globalzoom + (width - (self.globalzoom * (x1 - x0))) / 2 + self.offset_y = -1 * y0 * self.globalzoom + end end elseif self.globalzoommode == self.ZOOM_FIT_TO_CONTENT_WIDTH then local x0, y0, x1, y1 = page:getUsedBBox() - self.globalzoom = width / (x1 - x0) - self.offset_x = -1 * x0 * self.globalzoom - self.offset_y = -1 * y0 * self.globalzoom + (height - (self.globalzoom * (y1 - y0))) / 2 + if (x1 - x0) < pwidth then + self.globalzoom = width / (x1 - x0) + self.offset_x = -1 * x0 * self.globalzoom + self.offset_y = -1 * y0 * self.globalzoom + (height - (self.globalzoom * (y1 - y0))) / 2 + end elseif self.globalzoommode == self.ZOOM_FIT_TO_CONTENT_HEIGHT then local x0, y0, x1, y1 = page:getUsedBBox() - self.globalzoom = height / (y1 - y0) - self.offset_x = -1 * x0 * self.globalzoom + (width - (self.globalzoom * (x1 - x0))) / 2 - self.offset_y = -1 * y0 * self.globalzoom + if (y1 - y0) < pheight then + self.globalzoom = height / (y1 - y0) + self.offset_x = -1 * x0 * self.globalzoom + (width - (self.globalzoom * (x1 - x0))) / 2 + self.offset_y = -1 * y0 * self.globalzoom + end end dc:setZoom(self.globalzoom) dc:setOffset(self.offset_x, self.offset_y)