有没有可能只使用免费的软件在C#中将文档转换为PDF或编辑PDF?

4
我有一个愚蠢的想法,创建一个 .docx 或 .rtf 或 .pdf 模板,然后替换文档中的文本以生成报告。这似乎比使用付费报告软件更好。
嗯,我相信我现在已经尝试了几乎所有的东西,惊讶于处理 pdf 的难度。
尝试 1:
HTML -> PDF
设计模板更加困难。打印时不会呈现相同的外观。只在命令行示例中完成工作(不确定 iTextSharp-LGPL 是否能够处理 base64 字符串或者其他如何告诉它图片的方法)。无论如何,用这种方式做模板太难了。
尝试 2:
OpenXml -> PDF
我愚蠢地认为,因为 Word 可以保存为 PDF,所以 OpenXml 也可以。但我错了,它不能保存为 PDF。
尝试 3:
OpenOffice/LibreOffice (docX -> PDF)
它无法读取OpenXml,这是一个问题,因为我正在将模板编辑为OpenXml,然后保存结果(作为.docx),但它无法读取该保存的文档。
尝试4: iTextSharp LGPL 这个根本不起作用,哈哈。显然,即使在谷歌搜索“将rtf转换为pdf”时,唯一出现的是iText及其派生品,它也不能将rtf文档转换为pdf文档。我亲自验证了这一点(它只保存文本而不是格式),后来发现this的帖子让我相信我没有做错什么。
尝试5:
PDF -> PDF

由于似乎将任何东西转换为PDF可能是不可能的,也许我可以将模板保存为PDF,然后对其进行文本替换。不行,哈哈,这显然是一件非常困难的事

尝试6

Pandoc (.odt/.docx -> pdf), (.rtf -> .pdf不支持)

pandoc mockup2.odt -s -o mockup2.pdf

链接到图片中的文件。*注意,如果尝试将.odt/.docx转换为.tex,则会以相同的方式出错。 enter image description here

我该怎么办?购买软件以便我可以将文件保存为PDF吗?这是唯一的选择吗?


在服务器环境中,这是不被允许的,很遗憾。 - user875234
其他选项包括:将Pandoc与您的程序一起打包,并通过C#代码直接在命令行中调用以将多种输入格式转换为PDF;使用PDF库手动生成PDF;在LaTeX中创建模板并将LaTeX与您的软件一起打包,并通过C#代码中的cmd调用将其转换为PDF; - Magnetron
顺便说一下,我认为这个问题更适合软件推荐 - Magnetron
Pandoc 看起来很有前途,但它在我尝试使用的文件中没有正确地生成任何内容。我仍在进行实验,但到目前为止它生成的输出无效。 - user875234
是的,要实现相同的外观和感觉有点困难,特别是对于表格。这归结于我之前写的另外两个解决方案,要么使用iTextSharp或其他库手动创建pdf,要么学习LaTeX(它是一种带有特殊命令的文本,您可以使用特殊编辑器来帮助您创建模板,例如LyX),以任何您喜欢的方式创建模板,通过代码填充数据并使用c#代码在cmd中调用pdftext。 - Magnetron
显示剩余5条评论
2个回答

2

我有一个解决方案。我不是说这是最好的解决方案。LibreOffice(或者如果你愿意的话,可能是OpenOffice)接受命令行参数,可以执行切换操作。

最初的回答:

我有一个解决方案。我并不是说这是最好的解决方案。LibreOffice(或者如果你偏爱的话,可以使用OpenOffice)接受命令行参数来实现切换。

soffice.exe --headless --convert-to pdf mockup.odt

*注意 - 这是我将LibreOffice添加到我的路径(C:\Program Files\LibreOffice\program)之后的操作。我不知道为什么它的文件名叫soffice.exe而不是libreoffice.exe。


0

如果您在模板的docx文件上遇到困难,我可能为您提供了一个可行的解决方案。我找到了一种免费的docx转pdf转换解决方案,而不需要使用microsoft.interop等工具:请参见此堆栈溢出帖子中的第一个答案

它使用两个工具:开放式xml power tools和DinkToPdf(本质上是wkhtmltopdf包装器)。 html转pdf部分运作良好,但docx转html部分一开始看起来像一场灾难。您可以使用自定义css进行修复(有一些在线资源可用)。

Powertools-.NetStandard

DinkToPdf-GitHub

还有一些专有软件的可能性,例如Asposes.Words和Syncfusion文件格式。大多数专有解决方案都非常昂贵...

如果您只是在安装了MS-Office的Windows环境中工作,可以使用Microsoft.Interop。这是迄今为止最简单的解决方案(在本文中,Interop被提到了几次Stackoverflow Word to PDF

如果您找到了另一个(更好的)工作解决方案,请告诉我。我仍然没有决定是否使用专有或免费解决方案。 :-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接