命令行和GUI转换之间的差异(* .html,* .odt,* .doc)

时间:2012-05-15 10:28:55

标签: php html file type-conversion



我接管了一个应用程序的开发,使用户可以下载一些报告 系统设置如下:

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

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

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

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

  • pandoc
  • AbiWord的
  • ooconvert

那么,有没有办法将我的* .html文件正确转换为* .odt文件? 还是另一种让我做我想做的事情?
感谢。

编辑/解决:

适用于JODConverter !!

1 个答案:

答案 0 :(得分:0)

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

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

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

由于您的上一条评论让我相信您实际上没有完成编码(I just need a script etc...),我想说SO不是代码生成器。当你读完关于phpdocx和livedocx的文章时,也许你应该阅读what makes a good question

我认为,here,我找到了你要找的东西。如果你想使用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\">元标记一样。其他一切都很基础。
您需要的所有功能都在这里,如果您想知道什么做什么,请参阅他们的手册页以获取更多信息......

祝你好运