# -*- coding: utf-8 -*- """pixelconversion.ipynb Automatically generated by Colaboratory. Original file is located at https://colab.research.google.com/drive/1hfdgkYOw8w6DdJqsZx8txmw8INUGxesl """ # pip install pymupdf -q """### Imports""" import fitz from PIL import Image import numpy as np import cv2 import db import tsadropboxretrieval import fitz from io import BytesIO ################################################ ### Check if page is visually rotated or not def is_content_rotated(docpage): docpage.draw_rect([250,250,docpage.mediabox.width-500,docpage.mediabox.height-500], color = (0,0,0), width = 1,fill=(0,0,0),fill_opacity=1) pix = docpage.get_pixmap() image = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) img = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2GRAY) kernel = np.ones((3,3),np.uint8) img = cv2.dilate(img,kernel, iterations=6) img=cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV)[1] # cv2_imshow(img) contours, _ = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # Check the orientation of page through large shape drawn for contour in contours: rect = cv2.minAreaRect(contour) angle = rect[-1] # print(angle) if angle != 0.0 and angle != 90.0 and angle != 180.0 and angle!=-90.0 and angle!=-180.0: print("Page content appears visually rotated.") return True print("Page content does not appear visually rotated.") return False def drawisrotated(data=0,pdf_content=0,dpi=0): if pdf_content: docPath = fitz.open(stream=pdf_content, filetype="pdf") else: docPath = fitz.open("pdf",data) #dropbox path pageDocPath=docPath[0] bool_T_F=is_content_rotated(pageDocPath) if bool_T_F==True: if pdf_content: docPath = fitz.open(stream=pdf_content, filetype="pdf") else: docPath = fitz.open("pdf",data) #dropbox path pageDocPath=docPath[0] pageDocPath.draw_rect([250,250,pageDocPath.mediabox.width-500,pageDocPath.mediabox.height-500], color = (75/255,0,130/255), width = 1,fill=(75/255,0,130/255),fill_opacity=0.9) if dpi: pix=pageDocPath.get_pixmap(dpi=dpi) newwidth_ratio=pix.width/pageDocPath.mediabox.width newheight_ratio=pix.height/pageDocPath.mediabox.height else: newwidth_ratio=1 newheight_ratio=1 area=((pageDocPath.mediabox.height-500-250)*newheight_ratio) * ((pageDocPath.mediabox.width-500-250)*newwidth_ratio) perimeter=(((pageDocPath.mediabox.width-500-250)*newwidth_ratio) *2) + ( ((pageDocPath.mediabox.height-500-250)*newheight_ratio) *2) if pageDocPath.mediabox.height >pageDocPath.mediabox.width: rectText=fitz.Rect(300, 200, (pageDocPath.mediabox.width-80),( pageDocPath.mediabox.width+80) ) else: rectText=fitz.Rect(500, 200, (pageDocPath.mediabox.height-80),( pageDocPath.mediabox.height+80) ) text = """Scale Document""" annot1=pageDocPath.add_freetext_annot(rectText, text, fontsize=45, fontname='helv', border_color=(1,1,1), text_color=(1,1,1), rotate= pageDocPath.rotation, align=1) annot1.update() # docPath.save('drawnOn.pdf') return docPath,area,perimeter else: if pdf_content: if dpi: doc,area,perimeter=openDrawPDF(pdf_content=pdf_content,dpi=dpi) return doc,area,perimeter else: doc,area,perimeter=openDrawPDF(pdf_content=pdf_content) return doc,area,perimeter else: if dpi: doc,area,perimeter=openDrawPDF(data,dpi=dpi) return doc,area,perimeter else: doc,area,perimeter=openDrawPDF(data) return doc,area,perimeter def openDrawPDF(data=0,pdf_content=0,dpi=0): if pdf_content: doc = fitz.open(stream=pdf_content, filetype="pdf") else: doc = fitz.open("pdf",data) #dropbox path page = doc[0] print(page.rotation) if page.rect.height > page.rect.width: rectText = fitz.Rect(300, 200, (page.mediabox.width - 80), (page.mediabox.width + 80)) else: rectText = fitz.Rect(500, 200, (page.mediabox.height - 80), (page.mediabox.height + 80)) page.draw_rect([0 + 10, 0 + 10, page.mediabox.width - 10, page.mediabox.height - 10],color=(75 / 255, 0, 130 / 255), width=1, fill=(75 / 255, 0, 130 / 255), fill_opacity=0.9) if dpi: pix = page.get_pixmap(dpi=dpi) newwidth_ratio = pix.width / page.mediabox.width newheight_ratio = pix.height / page.mediabox.height else: print('No DPI specified') newwidth_ratio = 1 newheight_ratio = 1 # Apply the transformation to the rectangle's area and perimeter area = ((page.mediabox.width - 10 - 10) * newwidth_ratio) * ((page.mediabox.height - 10 - 10) * newheight_ratio) perimeter = (((page.mediabox.width - 10 - 10) * 2) * newwidth_ratio) + (((page.mediabox.height - 10 - 10) * 2) * newheight_ratio) # Apply the transformation to the text annotation (shift and scale its position) text = """Scale Document""" annot1 = page.add_freetext_annot(rectText, text, fontsize=45, fontname='helv', border_color=(1, 1, 1),text_color=(1, 1, 1), rotate=page.rotation, align=1) annot1.update() # print('fitzzzzzzzzzzzz',fitz.__version__) # doc.save('drawnOn_transformed.pdf') return doc, area, perimeter