0



我接手了一个应用程序的开发,使用户能够下载一些报告。
系统设置如下:

  • 使用 php 检索的数据创建一个 *.html 文件。
  • 将 *.html 文件的所有内容复制到 *.doc 文件中(不是真正的 *.doc 文件,只是扩展名为“.doc”的 *.html 文件)。
  • *.doc 可供下载。

我知道创建报告文件是一个奇怪的解决方案,而且我在设置 CSS 以在 *.doc 文件中正常工作时遇到了很多困难。
例如,现在我需要将边距设置为 0cm,但是当然,当我在 OpenOffice、LibreOffice、MSWord 等文本编辑器中打开生成的 *.doc 时,他在 WEB 模式下打开 CSS 边距设置为 0cm 工作正常。但是,用户需要在标准模式下打开文件(就像一个真正的 *.doc 文件)并且不想做一些操作来转换文档,或者将边距设置为 0 厘米(...)。

因此,我找到了在 *.odt 中转换 *.html 或 *.doc 文件、解压缩 *.odt 文件、修改文件“styles.xml”的解决方案,它允许我将“标准”边距设置为0cm,然后,重新保存为*.doc 格式。
这个解决方案效果很好,但是,我只在我的 PC 上使用 LibreOffice GUI 实现了这一点。

当我尝试使用命令行中的任何程序(甚至是 LibreOffice 转换模块)转换 *.odt 中的 *.html 或 *.doc 文件时,*.odt 文件与我使用 LibreOffice GUI 时的文件不同。所以我尝试了其他转换脚本,如:

  • 潘多克
  • abiword
  • ooconvert

那么,有没有办法将我的 *.html 文件正确转换为 *.odt 文件?或者另一种让我做我想做的事的方式?
谢谢。

编辑/解决:

JODConverter一起使用!

4

1 回答 1

0

如果您想保留 HTML,我仍然会维护 LiveDocx 可能只是有用的。我做了更多的挖掘,偶然发现了phpdocx。在页面底部有一个链接,向您展示如何嵌入 HTML。
LiveDocX 和 phpdocx 都在各自的站点上提供了示例。我建议你浏览这些。

SO也出现了几次:有趣的问题可能是:

我知道后者与你想要做的相反,但不要仅仅因为这个原因就把它写下来。通常,从另一个角度看待事物会很有帮助。

由于您的最后一条评论使我相信您实际上还没有开始编码(I just need a script etc...),所以我想说 SO 不是代码生成器。当您阅读完有关 phpdocx 和 livedocx 的内容后,也许您应该阅读什么是好问题

我想,我在这里找到了你要找的东西。如果您想使用 php-cli,我的猜测是将您的脚本的输出流设置为一个文件,并使用下面找到的标头(从链接复制粘贴)。

    header("Content-type: application/vnd.ms-word");
    header("Content-Disposition: attachment; Filename=SaveAsWordDoc.doc");

抱歉,如果我遇到了有点苛刻的评论,关于 SO 不是代码生成器的评论,以及指向“什么是好问题”的链接。不是要揍你的。

更新

抱歉,前面的示例只能用作下载链接:下面是一个基于 html 字符串生成 .doc 文件的工作脚本:

#!/bin/php -n
<?php
    $opts = array('file'=>array('header'=>'Content-type: application/vnd.ms-word'."\r\n".'Content-type: application/vnd.ms-word'."\r\n"));
    $resource = stream_context_create($opts);
    $doc = fopen('asDoc.doc','w+',false,$resource);
    if (!$doc)
    {
        die('FFS');
    }
    $html='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
    $html .='<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\"><title>Foo</title></head><body><h1>Hello, world</h1></body></html>';
    fwrite($doc,$html);
    fclose($doc);
    exit();
?>

标头在上下文流中定义,因此前两行代码至关重要。与<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">元标记一样。其他都是很基本的。
您需要的所有功能都在这里,所以如果您想知道什么是什么,请参阅他们的手册页以获取更多信息......

祝你好运

于 2012-05-15T11:31:49.263 回答