首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将合并后的.pdf文件转换为Word中打开良好的.docx文件

将合并后的.pdf文件转换为Word中打开良好的.docx文件
EN

Stack Overflow用户
提问于 2021-04-13 17:52:34
回答 1查看 187关注 0票数 0

所以,我有下面的场景。

我正在研究一套学术论文系统。我有几个输入,如作者的名字,合著者,标题,类型的论文,导言,目标等。我把所有的信息都存储在数据库里。用户有一个预览按钮,单击该按钮,异步生成一个单词,并将文件位置发送回用户,然后使用Google在iframe中向用户显示该文件。

有一个特定的用例,在这个用例中,论文的用户/作者可以将.docx文件附加到表中,或者将.jpeg文件附加到图形中。该表/图必须包含在最终的.docx文件中。

对于.docx生成过程,我使用PHPWord

因此,在此之前,一切都很好,但当我试图混合所有内容并将.docx文件放在一起时,我的问题就开始了。

逼近一号

我做这件事的第一种方法是使用PHPWord完成所有事情。我创建文件,在需要的地方添加文本,在图像的情况下,只插入图像,然后是图像下面的图形标题。

但是,当我尝试对.docx表文件做同样的事情时,事情就变得棘手起来了。我唯一的选择是使用获取表XML。它成功了,但我遇到的问题是,当我打开生成的Word文件时,表就在那里,但是已经失去了所有的样式和透明的边框。由于这些透明的边框,后来当将其转换为PDF时,边框被忽略了,表格信息只是被置乱的文本。

方法第二(当前第一)

在与第一招搏斗,使事情变得更复杂之后,我决定做一些不同的事情。由于我已经生成了一个包含主要纸张信息的docx文件,并且需要添加另一个docx文件,所以我决定使用DocX合并库

所以,基本上,我有三个生成的word文件,一个用于主要的纸张信息,一个用于表,一个用于表标题(最后一个主要是为了不过度复杂信息的顺序)。而且,该数据不在表.docx文件中。

然后我运行这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$dm->merge( [
    'paper-info.docx',
    'attached-table.docx',
    'attached-table-caption.docx'
], 'complete-file.docx');

因此,之后,我检查并生成了Word文件,就像我需要它与表一起维护其原始样式和维度一样。

但是,如果我在LibreOffice中打开它,就会收到以下错误消息:

然后,如果我继续并打开该文件,该文件将正确地打开所有数据,唯一的例外是它不再像Word中显示的那样尊重文件的字体。

因此,问题出现在下一步。由于我需要使用使用以下语法显示文件的预览:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<iframe src="https://docs.google.com/gview?embedded=true&hl=es_LA&url=https://usersite.net/complete-file.docx?pid=explorer&efh=false&a=v&chrome=false&embedded=true" width="100%" height="600" style="border: none;"></iframe>

文档可以很好地加载,但是当我查看它时,我看到的是它只显示第一个paper-info.docx文件的内容,并且结束于应该出现表和表标题的地方。我在Word中打开完全相同的文件,它显示表和标题。

另一个问题是当我试图将文件转换为PDF时。

如果我将PHPWord的转换方法与DomPDF结合使用,我得到的问题与Google完全相同,我只有第一个文件的内容,使用以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$phpWordPDF = \PhpOffice\PhpWord\IOFactory::load('complete-file.docx');
$xmlWriterPDF = \PhpOffice\PhpWord\IOFactory::createWriter($phpWordPDF, 'PDF');
$xmlWriterPDF->save('complete-file-pdf');

因此,我唯一可行的方法是使用以下命令使用LibreOffice的命令行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
soffice --headless --convert-to pdf complete-file.docx

这将正确地转换文件,但是当尝试在.docx中打开LibreOffice文件时,字体样式会被取消配置。

还有一个奇怪的部分是,如果我试图在PHP脚本中运行这个程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shell_exec('soffice --headless --convert-to pdf complete-file.docx');

什么都没发生。

我在Windows10 x64上运行Apache2.4.25,PHP7.4.11。

结论

直到现在,我最好的结果是合并文件,但也导致了这个问题。因此,也许问题来自于我正在使用的合并过程。理想的方法是能够使用PHPWord插入带有样式和所有内容的表,但是我还没有找到任何关于如何这样做的示例。

我看到的另一个选项是这个图书馆,但是合并功能只存在于599美元的许可中,而且由于我非常接近解决这个问题,所以我不确定它是否能解决我的问题。如果是这样的话,我会投资,因为我需要尽快完成这件事,但我想问一下你们对这个案子的建议是什么。也许是另一个合并库,或者通过PHPWord完成所有事情。

我们很感激你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-17 06:33:47

经过多次尝试,我无法通过PHPWord和我提到的合并库实现我想要的结果。

由于我需要解决这个问题,我决定投资于我在问题中提到的付费图书馆。这是一个昂贵的购买,但对那些有兴趣的人,它做的正是所需的,它做得很好。

我需要的两个主要功能是文档合并和将内容导入到.docx文件。

所以我不得不买了高级套餐。一旦到了那里,图书馆就会为你做任何事。

docx文件合并代码的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
require_once 'classes/MultiMerge.php';

$merge = new MultiMerge();

$merge->mergeDocx('document.docx', array('second.docx', 'other.docx'), 'output.docx', array());

如何从另一个docx文件导入表的示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
require_once 'classes/CreateDocx.php';

$docx = new CreateDocxFromTemplate('document.docx');

// import tables
$referenceNode = array(
    'type' => 'table',
);

$docx->importContents('document_1.docx', $referenceNode);

$docx->createDocx('output');

正如你所看到的,这很容易。这个答案绝不是这个图书馆的广告,但是对于那些和我有同样问题的人来说,这是一个救生者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67084480

复制
相关文章
package-lock.json和package.json
package-lock.json就是锁定安装时的包的版本号,以保证其他人在npm install时大家的依赖能保持一致。
用户3258338
2019/09/04
2K0
package.json
复杂的模块依赖关系需要被记录,确保模块的版本和当前保持一致,否则会导致当前项目运行报错
Qwe7
2022/04/21
7000
package.json
每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。npm install 命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
奋飛
2019/08/15
7630
package.json 详解[每日前端夜话0xEF]
Node 项目在项目根目录中名为 package.json 的文件中跟踪依赖关系和元数据。这是你项目的核心。它包含名称、描述和版本之类的信息,以及运行、开发以及有选择地将项目发布到 NPM 所需的信息。
疯狂的技术宅
2019/12/11
2.3K0
npm脚本和package.json
  在创建node.js项目如一个vue项目,或一个react项目时,项目都会生成一个描述文件package.json 。
tandaxia
2019/12/31
1.8K0
package.json文件
项目描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、 当前项目依赖了哪些第三方模块等。 package.json文件在项目根目录下使用npm init -y命令生成。
星辰_大海
2022/05/10
7620
package.json文件
package.json 知多少?
在 Node.js 中,模块是一个库或框架,也是一个 Node.js 项目。Node.js 项目遵循模块化的架构,当我们创建了一个 Node.js 项目,意味着创建了一个模块,这个模块必须有一个描述文件,即 package.json。它是我们最常见的配置文件,但是它里面的配置你真的有详细了解过吗?配置一个合理的 package.json 文件直接决定着我们项目的质量,本章就带大家了解下 package.json 的各项详细配置。
ConardLi
2019/12/02
1.9K0
【基础】package.json文件详解
每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息。
青年码农
2020/12/17
1.1K0
package.json文件的作用
项目描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、 当前项目依赖了哪些第三方模块等。 package.json文件在项目根目录下使用npm init -y命令生成。
清出于兰
2020/10/26
2.1K0
package.json文件的作用
package.json文件知多少?
Version: 当前项目的版本,需要满足以下约定 x.x.x - major.minor.patches
用户7365393
2021/09/26
5450
全方位解读 package.json
允许不修改[major, minor, patch]元组中最左边的非零元素的更改 。换句话说,这允许版本1.0.0及以上版本的补丁和次要更新,版本的补丁更新0.X >=0.1.0,以及版本的不更新0.0.X。
@超人
2021/09/17
1.5K0
全方位解读 package.json
package.json 配置完全解读
package.json 是前端每个项目都有的 json 文件,位于项目的根目录。许多脚手架在搭建项目时也会自动帮我们自动初始化好 package.json。
Leecason
2022/12/16
2.8K0
package.json 配置完全解读
package.json文件快速入门详解
相信入门nodejs或者npm的同学会对package.json这个文件有疑惑,对这个文件的作用不是很清晰,但搭建自己的博客每每用到node,npm这个文件又必不可少。
wblearn
2018/08/27
9890
package.json文件快速入门详解
npm脚本获取package.json配置
在执行npm脚本时,可以通过**npm_package_**前缀环境变量获取package.json里的字段 例如:
路过君
2022/04/13
1.3K0
升级package.json中的包
npm-check-updates upgrades your package.json dependencies to the latest versions, ignoring specified versions.
周星星9527
2021/09/30
1.6K0
升级package.json中的包
npm 与 package.json 快速入门
张拭心 shixinzhang
2018/01/05
2.1K0
npm 与 package.json 快速入门
nodejs的package.json依赖dependencies中 ^ 和 ~ 的区别
nodejs的package.json定义了一个模块,包括其依赖关系的一个简单的JSON文件,该文件可以包含多个不同的指令来告诉Node包管理器如何处理模块。 dependencies则表示此模块依赖的模块和版本,其中常常可以看到类似 ^1.2.0 或 ~1.2.0 这样的版本范围指示。 首先,一个完整的版本号组表示为: [主要版本号,次要版本号,补丁版本号] 1. 用 ~ 指示范围 版本号中如果指定了主要版本、次要版本,则只允许补丁版本升级; 如果只指定了主要版本,则允许次要版本、补丁版本升级。 ~1.2
蓓蕾心晴
2018/04/12
1.3K0
npm 与 package.json 快速入门教程
npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解了一些,这次结合官方文章总结一下,加深下理解吧!
张拭心 shixinzhang
2019/05/29
2.3K0
npm 与 package.json 快速入门教程
package.json中script的生命周期
package.json 文件是我们每个项目当中必须指定的,我们就以下面的 package.json 为例进行测试
小小杰啊
2022/12/21
8900
package.json中script的生命周期
[译] 如何更新 package.json 中的依赖项
原文:https://medium.com/better-programming/how-to-upgrade-dependencies-in-package-json-e5546804187f
江米小枣
2020/06/15
5.2K0

相似问题

package.json修改包-lock.json

11

查找漏洞源(在package.json中)(包-lock.json)

12

有没有办法从-lock.json包中提取package.json?

248

有没有工具来验证/检查package.json和包-lock.json是否一致?

169

npm要从包中创建一个package.json文件-lock.json文件?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文