【问题标题】:Differences between command-line and GUI converting (*.html, *.odt, *.doc)命令行和 GUI 转换之间的差异(*.html、*.odt、*.doc)
【发布时间】:2012-05-15 10:28:55
【问题描述】:



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

  • 使用 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”的解决方案,它允许我设置“STANDARD” " 页边距为 0cm,然后重新保存为 *.doc 格式。
这个解决方案效果很好,但是,我只在我的 PC 上使用 LibreOffice GUI 实现了这一点。

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

  • 潘多克
  • abiword
  • ooconvert

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

编辑/解决:

适用于JODConverter !!

【问题讨论】:

  • 有一种正确的方法......但你不会喜欢它:获取开放的文档类型 for MSLibreOffice 并获取一个 xml 解析器,或者很快使用 liveDocx成为采埃孚的一员 - 就​​像参考资料一样,这是一个很好的选择。 PS:you won't like it 我的意思是:你将不得不重写很多代码
  • 我只需要一个允许我将 *.html 文件正确转换为 *.odt 存档的脚本。我不认为 liveDocx 是一个解决方案,因为我不确定他是否保留 HTML(问题 4621430)。

标签: php html file type-conversion


【解决方案1】:

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

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

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

自从您的上一条评论让我相信您实际上还没有开始编码 (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();
?>

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

祝你好运

【讨论】:

  • 对于我的最后一条评论,如果您已经使用 liveDocx,我认为您会在这一点上更加准确。然后,如果我有一个可在命令行中使用并且尊重 *.odt 格式的脚本/函数/软件,我的问题就会解决。我已经看过 phpdocx 文档,但是用于插入 HTML 代码的函数只能在 PRO 版本中使用。 (我是法国人,所以我想有些词不在他们的位置:))
  • 好的,我的 PHP 脚本中已经有了这两行。此时,当我在 MSWord 或类似 MSWord 的软件中打开我的 *.doc 文件时,他以 HTML 模式打开文件(完全正常)。这就是我需要 *.html 到 *.odt 转换器的原因。我已经说过了,但是当我使用文本编辑器的 GUI 界面重现我的步骤时它可以工作(打开我的 *.html 文件,-> 另存为 *.odt 格式 -> 在 *.zip 中重命名 -> 解压缩它 -> 修改文件“styles.xml” -> 在 *.odt 中重命名 -> 在我的文本编辑器中重新打开 -> 另存为 *.doc -> 完美运行。
  • 例如,docx2doc.com/convert/html-to-odt.html 做我想做的事!我的问题是我无法解压缩我尝试过的转换器生成的文件!
  • 我完全不知道你在做什么,发布你到目前为止的代码。使用这个简单的 sn-p 代码,我几乎可以完成您想要实现的所有目标。我可能误解了你的问题
  • 不需要代码 我只是有一个 HTML 文件,我打算将其转换为 ODT 格式。
猜你喜欢
  • 1970-01-01
  • 2016-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
相关资源
最近更新 更多