获取页面实际大小

本文介绍了一种使用JavaScript来获取网页实际尺寸的方法,包括页面宽度、高度等关键信息。通过判断不同浏览器环境下窗口和文档对象模型(DOM)的特性,实现了一个通用的函数getPageSize(),用于返回页面的实际可视区域大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//获取页面实际大小
function getPageSize(){
var xScroll,yScroll;
if (window.innerHeight && window.scrollMaxY){
xScroll = document.body.scrollWidth;
yScroll = window.innerHeight + window.scrollMaxY;
} else if (document.body.scrollHeight > document.body.offsetHeight){
sScroll = document.body.scrollWidth;
yScroll = document.body.scrollHeight;
} else {
xScroll = document.body.offsetWidth;
yScroll = document.body.offsetHeight;
}
var windowWidth,windowHeight;
//var pageHeight,pageWidth;
if (self.innerHeight) {
windowWidth = self.innerWidth;
windowHeight = self.innerHeight;
} else if (document.documentElement && document.documentElement.clientHeight) {
windowWidth = document.documentElement.clientWidth;
windowHeight = document.documentElement.clientHeight;
} else if (document.body) {
windowWidth = document.body.clientWidth;
windowHeight = document.body.clientHeight;
}
var pageWidth,pageHeight
if(yScroll < windowHeight){
pageHeight = windowHeight;
} else {
pageHeight = yScroll;
}
if(xScroll < windowWidth) {
pageWidth = windowWidth;
} else {
pageWidth = xScroll;
}
arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
return arrayPageSize;
}
<think>我们之前讨论过,使用`page.set_rotation(angle)`旋转页面后,坐标系会发生变化。特别是当旋转角度为90°或270°时,页面的宽度和高度会互换。因此,获取旋转后的实际尺寸应该使用旋转后的页面矩形(`page.rect`)。在PyMuPDF中,`page.rect`属性返回的是页面的边界矩形,它总是反映当前旋转状态下的页面尺寸。也就是说,无论页面如何旋转,`page.rect.width`和`page.rect.height`都会给出旋转后的有效宽度和高度。 ###获取旋转后页面实际尺寸的方法: 1. **使用`page.rect`属性**:-旋转后,直接通过`page.rect.width`和`page.rect.height`获取当前页面的宽度和高度。-注意:旋转操作会改变页面的显示方向,但`page.rect`会自动调整以反映旋转后的实际尺寸。2.**示例代码**:```pythonimport fitzdoc= fitz.open("your_document.pdf")page= doc[0]#获取第一页#获取旋转前的尺寸original_width= page.rect.widthoriginal_height =page.rect.height#设置旋转90度(顺时针)rotation_angle =90page.set_rotation(rotation_angle)#获取旋转后的尺寸rotated_width= page.rect.widthrotated_height =page.rect.heightprint(f"原始尺寸:宽度={original_width},高度={original_height}")print(f"旋转{rotation_angle}度后尺寸:宽度={rotated_width},高度={rotated_height}")``` 3. **输出说明**:-如果原始页面是横向(比如宽度大于高度),旋转90°后,页面变成纵向,此时`rotated_width`会等于原始高度,`rotated_height`会等于原始宽度。-旋转180°时,宽度和高度不变,但坐标系原点不变(左上角),坐标轴方向反转。###注意事项: -**`page.rect`的坐标系**:`page.rect`返回的矩形总是以旋转后的坐标系为基准,其原点(0,0)在旋转后的左上角。- **旋转角度限制**:PyMuPDF只支持0°、90°、180°、270°的旋转角度。其他角度会抛出异常。 -**保存更改**:旋转操作后,需要保存文档才会永久生效(`doc.save(...)`)。###相关问题:1.如何获取页面原始的旋转角度(即PDF中存储的初始旋转值)?2.旋转页面会影响页面上的注释(annotations)和链接(links)的位置吗?3.如何将页面上的一个点从原始坐标系转换到旋转后的坐标系?4.旋转操作会改变页面内容的实际存储方式吗?(例如,图片和文字是否会被物理旋转?) [^1]:参考PyMuPDF文档中关于页面旋转和坐标系的说明。</think>在 PyMuPDF 中,使用 `page.set_rotation()` 旋转页面后,获取实际尺寸的方法如下: ### 获取旋转后页面实际尺寸的正确方法 1. **直接使用 `page.rect` 属性** 这是最可靠的方法,它会自动返回旋转后的实际尺寸: ```python # 设置旋转(例如90°) page.set_rotation(90) # 获取旋转后的实际尺寸 rotated_width = page.rect.width # 旋转后实际宽度 rotated_height = page.rect.height # 旋转后实际高度 ``` 2. **尺寸变化规则** 根据旋转角度不同: - **0° 或 180°**: 宽度和高度不变 $$(w', h') = (w, h)$$ - **90° 或 270°**: 宽度和高度互换 $$(w', h') = (h, w)$$ 3. **完整示例** ```python import fitz doc = fitz.open("document.pdf") page = doc[0] orig_width, orig_height = page.rect.width, page.rect.height print(f"原始尺寸: {orig_width} x {orig_height}") # 旋转90° page.set_rotation(90) rotated_width, rotated_height = page.rect.width, page.rect.height print(f"旋转后尺寸: {rotated_width} x {rotated_height}") # 输出: (原始高度, 原始宽度) # 验证尺寸互换 assert rotated_width == orig_height assert rotated_height == orig_width ``` ### 重要注意事项 1. **坐标系一致性** 所有后续操作(如 `page.get_text()` 或 `page.insert_image()`)都应使用 `page.rect` 返回的旋转后尺寸,坐标系原点仍在左上角。 2. **与缩放的区别** 引用[1]中提到的缩放操作 (`Matrix(zoom, zoom)`) 会影响渲染尺寸,但**不影响页面本身的逻辑尺寸**。旋转操作会改变 `page.rect` 返回的尺寸值。 3. **实际应用场景** 当需要精确放置元素时(如图像或注释),必须使用旋转后的尺寸: ```python # 在旋转后页面中心放置图片 center_x = page.rect.width / 2 center_y = page.rect.height / 2 page.insert_image(fitz.Rect(center_x-50, center_y-50, center_x+50, center_y+50), filename="image.png") ``` ### 相关问题 1. 如何将旋转前的坐标转换为旋转后的坐标? 2. 页面旋转会影响现有注释(annotations)的位置吗? 3. 在旋转后的页面上进行文本提取时,坐标系如何处理? 4. 如何永久保存页面的旋转状态到PDF文件?[^1] [^1]: PyMuPDF 官方文档:页面变换和坐标系
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值