Guest User

Untitled

a guest
Aug 17th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. # Upscale a PDF file
  2. import os
  3. from tempfile import NamedTemporaryFile
  4. from pdfrw import PdfReader, PdfWriter, PageMerge, IndirectPdfDict
  5.  
  6.  
  7. def add_suffix(file_path, suffix, sep):
  8. split = os.path.basename(file_path).rsplit('.', 1)
  9. return os.path.join(os.path.dirname(file_path), split[0] + sep + suffix + '.' + split[1])
  10.  
  11.  
  12. def upscale(file_name, scale=1.5, margin_x=0, margin_y=0, suffix='scaled', tempdir=None):
  13. """Upscale a PDF to a large size."""
  14. def adjust(page):
  15. info = PageMerge().add(page)
  16. x1, y1, x2, y2 = info.xobj_box
  17. viewrect = (margin_x, margin_y, x2 - x1 - 2 * margin_x, y2 - y1 - 2 * margin_y)
  18. page = PageMerge().add(page, viewrect=viewrect)
  19. page[0].scale(scale)
  20. return page.render()
  21.  
  22. # Set output file name
  23. if tempdir:
  24. output = NamedTemporaryFile(suffix='.pdf', dir=tempdir, delete=False).name
  25. elif suffix:
  26. output = os.path.join(os.path.dirname(file_name), add_suffix(file_name, suffix))
  27. else:
  28. output = NamedTemporaryFile(suffix='.pdf').name
  29.  
  30. reader = PdfReader(file_name)
  31. writer = PdfWriter(output)
  32. for i in list(range(0, len(reader.pages))):
  33. writer.addpage(adjust(reader.pages[i]))
  34. writer.trailer.Info = IndirectPdfDict(reader.Info or {})
  35. writer.write()
  36. return output
  37.  
  38.  
  39. def main():
  40. pdf = 'your/path/to/doc.pdf'
  41. scale = 1.0
  42. upscale(pdf, scale)
  43.  
  44.  
  45. if __name__ == '__main__':
  46. main()
Add Comment
Please, Sign In to add comment