PHP能获取word页数吗,php - 如何在Linux上获取Word文档中的页数?
我看到这个问题。我还需要确定给定word文件(doc/docx)的页数。我试图调查phplivedocx/zf(@hobodave链接到最初的post答案中),但我在那里失去了手脚。我也不能使用任何外部web服务(比如doc2pdf站点,然后计算pdf版本中的页面数,等等…)。
简单地说:是否有任何php代码(使用zf或php中的任何其他代码,不包括com对象或其他执行文件,例如abiword;我使用共享linux服务器,没有exec或类似的函数)来查找word文件的页数?
编辑:即将支持的word版本是microsoft word 2003&2007。
最佳答案
获取docx文件的页数非常简单:function get_num_pages_docx($filename)
{
$zip = new ZipArchive();
if($zip->open($filename) === true)
{
if(($index = $zip->locateName('docProps/app.xml')) !== false)
{
$data = $zip->getFromIndex($index);
$zip->close();
$xml = new SimpleXMLElement($data);
return $xml->Pages;
}
$zip->close();
}
return false;
}
对于97-2003格式来说,这无疑是一个挑战,但决不是不可能的。页数存储在文档的“摘要信息”部分,但由于文件的OLE格式,因此很难找到。这个结构被定义得非常彻底(尽管imo很糟糕)here并且更简单。我今天看了一个小时,但没走多远!(不是我习惯的抽象级别),而是输出hex以更好地理解结构:
function get_num_pages_doc($filename)
{
$handle = fopen($filename, 'r');
$line = @fread($handle, filesize($filename));
echo '
$hex = bin2hex($line);
$hex_array = str_split($hex, 4);
$i = 0;
$line = 0;
$collection = '';
foreach($hex_array as $key => $string)
{
$collection .= hex_ascii($string);
$i++;
if($i == 1)
{
echo ''.sprintf('%05X', $line).'0: ';
}
echo strtoupper($string).' ';
if($i == 8)
{
echo ' '.$collection.'
'."\n";
$collection = '';
$i = 0;
$line += 1;
}
}
echo '
';
exit();
}
function hex_ascii($string, $html_safe = true)
{
$return = '';
$conv = array($string);
if(strlen($string) > 2)
{
$conv = str_split($string, 2);
}
foreach($conv as $string)
{
$num = hexdec($string);
$ascii = '.';
if($num > 32)
{
$ascii = unichr($num);
}
if($html_safe AND ($num == 62 OR $num == 60))
{
$return .= htmlentities($ascii);
}
else
{
$return .= $ascii;
}
}
return $return;
}
function unichr($intval)
{
return mb_convert_encoding(pack('n', $intval), 'UTF-8', 'UTF-16BE');
}
它将输出代码,您可以在其中找到以下部分:
007000: 0500 5300 7500 6D00 6D00 6100 7200 7900 ..S.u.m.m.a.r.y.
007010: 4900 6E00 6600 6F00 7200 6D00 6100 7400 I.n.f.o.r.m.a.t.
007020: 6900 6F00 6E00 0000 0000 0000 0000 0000 i.o.n...........
007030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
这将允许您查看引用信息,例如:
007040: 2800 0201 FFFF FFFF FFFF FFFF FFFF FFFF (...ÿÿÿÿÿÿÿÿÿÿÿÿ
007050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
007060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
007070: 0000 0000 2500 0000 0010 0000 0000 0000 ....%...........
这将允许您确定描述的属性:
_ab = ("SummaryInformation")
_cb = 0028
_mse = 02 (STGTY_STREAM)
_bflags = 01 (DE_BLACK)
_sidLeftSib = FFFF FFFF
_sidRightSib = FFFF FFFF (none)
_sidChild = FFFF FFFF (n/a for STGTY_STREAM)
_clsid = 0000 0000 0000 0000 0000 0000 0000 0000 (n/a)
_dwUserFlags = 0000 0000 (n/a)
_time[0] = CreateTime = 0000 0000 0000 0000 (n/a)
_time[1] = ModifyTime = 0000 0000 0000 0000 (n/a)
_startSect = 0000 0000
_ulSize = 0000 1000
_dptPropType = 0000 (n/a)
它可以让你找到相关的代码段,解包并得到页码。当然,这是我没有时间去做的最困难的一点,但是应该让你朝着正确的方向走。
M$不容易!
PHP能获取word页数吗,php - 如何在Linux上获取Word文档中的页数?相关推荐
- 用VBA在Word文档中每页页眉插入返回文档目录中相应位置的超链接
[说明]此文中在页眉插入跳转到目录项的超链接的代码几经改进,但改进后并未删除改进之前的代码,是为了有个对比利于学习.如果想节约时间,该步骤可直接查看该部分最后一个代码块. 对于Word长文档,标准做法 ...
- Word控件Spire.Doc 【页眉页脚】教程(1):用C#/VB.NET:在 Word 文档中添加页眉和页脚
Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库.在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建.编辑.转换和打印 Micr ...
- word文档中指定页加水印_如何在Microsoft Word文档中使用水印
word文档中指定页加水印 A watermark is a faded background image that displays behind the text in a document. Y ...
- python获取word页数_python,_如何在 Linux 上使用 Python 读取 word 文件信息(如页数)?,python - phpStudy...
如何在 Linux 上使用 Python 读取 word 文件信息(如页数)? R.T. doc 是二进制文件,Python 如何进行读取呢? .docx 可用 python-docx 读取,但如何读 ...
- InDesign 教程如何控制文档中的页数?
欢迎观看indesign教程,小编带大家学习 InDesign 的基本工具和使用技巧,了解如何在创建新文件时指定页数,以及如何在现有项目中添加和移除页面. 安装:Indesign 2021 for m ...
- 如何在Word文档中添加页眉或页脚
Headers and footers are useful for adding things such as page numbers, dates, file names, and discla ...
- JAVA删除pdf空白页_如何编辑PDF文件,如何删除PDF文档中的空白页
时代在发展,科技在进步,我们现在日常使用的文件也发展了,以前只有Word跟TXT,现在还增加了一个PDF格式的文件,但PDF格式的文件跟Word和TXT文件不一样,Word跟TXT文件可以直接的打开编 ...
- 去除Word文档中的页眉横线
给Word文档添加页眉后,页眉下怎么会自动出来一条横线?删除页眉后,那条横线仍在.怎样才能去除页眉下的横线?能否将它换成其他的线型? 谈起这个问题,我们就不能不说起样式.在默认情况下,我们在Word下 ...
- 去掉Word文档中的页眉横线
1. 改变页眉的样式 如果仅仅想去除页眉下的横线,最为便捷的就是改变页眉的样式.例如,我们在编辑页眉时可以把页眉的样式换成"正文".因为"正文"样式中没有段落边 ...
最新文章
- 部署及配置Lync Server 2013存档功能
- session的简介
- 原来程序员的大部分时间并不是写代码
- vue 动态添加路由
- HALCON 21.11:深度学习笔记---术语表(7)
- 有关科学计算方面的python解决
- 阿里巴巴CTO程立:双11的再进化
- Keli 编译遇到 *** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED且已经破解
- ubuntu安装nvidia显卡驱动
- CareUEyes Pro(电脑防蓝光软件)官方中文版V2.1.0.0 | 超实用电脑护眼软件下载-学生白领必备护眼神器!!
- 这样的简历HR才会看----个人整理
- 数字图像处理与Python实现-颜色空间转换-RGB颜色空间与YIQ颜色空间转换
- Java: Unresolved compilation problem的解决方法
- Android项目修改项目名称
- PHP之ctype扩展
- 10.1 快乐,自费送几本豆瓣9.0高分书籍
- apicloud (第五篇 bmap百度地图一键回到当前位置)
- iOS开发 国际化/多语言适配
- 观察 | 回顾 DeFi 中的“蓝筹股”,DeFi 路在何方?
- Matlab GUI鼠标画线
热门文章
- 清大正式发表全景3D重建技术 AI让单张全景影像重建
- RuntimeError: Couldn‘t install gfpgan.
- android 跳转电池管理器,android – 如何在MIUI设备中打开管理应用程序电池使用设置...
- 微信营销的7个重要流程
- java对键盘输入进行读取_JAVA 读取键盘输入
- 一款国产自助画二次元妹子图的神器!忍不住想尝试
- java中遍历集合_java中遍历ArrayList集合的四种方式
- 超详细的周杰伦演唱会观看攻略,拿走不谢!
- raspberry-pi 连接蓝牙键盘鼠标
- vue模拟触发另一个按钮点击事件