为什么存储在mysql中的word文档显示时没有分页符?


Why are the word docs, stored in mysql being displayed without page breaks?

我在mysql数据库中存储.docx文件作为大blobs,在单独的块中(以免溢出每个blob)。然后在php中,我将数据库中的数据块"粘合"在一起后显示文档。一切看起来都很好,只是文档似乎没有分页符,这在试图将其导出到其他程序时是个问题。有人知道怎么加分页符吗或者我哪里错了?

<?
$username=xxx;
$password=xxx;
$database=xxx;
mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die("Unable to select database");
$doc=$_GET['doc'];
header('Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
$request = mysql_query("SELECT docData FROM tblDoc WHERE doc='$doc' ORDER BY pieceOrder ASC");
while($row=mysql_fetch_array($request)) {
    echo $row['docData'];
}
mysql_close();
?>

DOCX文件只是一个重命名的ZIP文件,其中包含许多XML文件和其他资产。如果您将文件拆分以供上传,然后按照正确的顺序重新组装以供下载,则应该与最初上传的文件没有任何差异。但是,如果在重新组装文件时出现错误,则很可能根本无法打开。真正删除分页符的唯一方法是从一些内部XML文件中删除那些特定的XML标记。

然而,在Word窗口的右下方,在缩放滑块的左边,有五个小图标,表示你用来查看文档的视图,这可能是一个很长的镜头。(同样可以通过功能区中的"视图->文档视图"进行访问。)(具体细节可能因Word版本而异。)现在,默认是第一个,打印布局,然后是全屏阅读网页布局大纲草稿。有没有可能,对于来自网络的文档,你的Word副本会自动打开 web布局 ?(网页布局没有分页符)

还有两点:

  1. 你还应该添加一个Content-Disposition头来指示这个文件应该被下载(你也可以指定它将被保存在那里的文件名):

    $filename = 'example.docx';
    header('Content-Disposition: attachment; filename='.$filename);
    
  2. 你不应该使用mysql_函数,它们已经被弃用了,它们存在安全风险,并且会导致不可维护的代码。您最好使用mysqli_或PDO进行数据库访问。这里更多。

结果一切都保存得很好。正如你所说,@pilsetnieks。就在那时,当我从我的应用程序导出时,我没有将它分配为正确的类型,所以它没有期望它得到的格式。谢谢你的帮助!