C# 使用evo pdf转换word文档时图像质量差

C# 使用evo pdf转换word文档时图像质量差,c#,pdf,evopdf,evo,C#,Pdf,Evopdf,Evo,我使用evo的WordToPdfConverter将Word文档转换为PDF。Word文档采用RTF格式,包含二维码等图像 不幸的是,生成的PDF中的图像质量非常差(因此二维码不可读)。即使禁用图像压缩或将其设置为最低级别(=>最佳质量),生成的图像质量也非常差 有没有其他方法来控制图像质量?或者有没有办法告诉evo的WordToPdfConverter不要使用JPG作为结果图像格式,而是坚持使用源格式(例如PNG) 由于RTF是一种文本格式,您应该将其转换为PDF,而无需进行任何图像压缩,因为

我使用evo的WordToPdfConverter将Word文档转换为PDF。Word文档采用RTF格式,包含二维码等图像

不幸的是,生成的PDF中的图像质量非常差(因此二维码不可读)。即使禁用图像压缩或将其设置为最低级别(=>最佳质量),生成的图像质量也非常差

有没有其他方法来控制图像质量?或者有没有办法告诉evo的WordToPdfConverter不要使用JPG作为结果图像格式,而是坚持使用源格式(例如PNG)


由于RTF是一种文本格式,您应该将其转换为PDF,而无需进行任何图像压缩,因为这将花费更长的时间来处理,并将导致更大的输出文件+您可能会遇到嵌入图像的图像质量问题

我创建了一个示例RTF文件(),其中包含您描述的二维码:

然后,我拿了RTF并从服务器上运行了它。作为免责声明:我与这个库有关联

此文档转换器保留文本并按原样解析源文档中的图像,然后将其输出为PDF

您可以从此处下载输出PDF:

以下是一些示例代码:

using (var documentConverter = new DocumentConverter())
{
   var filename = @"C:\temp\evo\TestWordDoc.rtf";
   var document = DocumentFactory.LoadFromStream(filename, new LoadDocumentOptions());
   var jobData = DocumentConverterJobs.CreateJobData(filename, Path.Combine(Path.GetDirectoryName(filename), $"{Path.GetFileNameWithoutExtension(filename)}_{DateTime.Now:yyyyMMddHHmmss}.pdf"), DocumentFormat.Pdf);
   var job = documentConverter.Jobs.CreateJob(jobData);
   documentConverter.Jobs.RunJob(job);
}

所以你最好使用微软Word自动化。类似于:Picture.Image.Save(imgName、System.Drawing.Imaging.ImageFormat.Png);如果它是rtf,您不应该使用rtf到pdf转换器吗?我看不出这里有什么牵连。我可以推测一些rtf到docx到pdf的转换在这里会出错。如果没有专用工具,您可以简单地解析rtf文件:@Ralf:Evo建议我使用“WordToPdfConverter”进行rtf到pdf的转换,因为“RtfToPdfConverter”的错误更大。@Daemon-5:我不想提取图像。我想把一个完整的word文档(包括图片)转换成pdf文件。谢谢你的回复!我们的系统是一个巨大的遗留系统,我不能(轻松地)切换到另一个PDF渲染器。
using (var documentConverter = new DocumentConverter())
{
   var filename = @"C:\temp\evo\TestWordDoc.rtf";
   var document = DocumentFactory.LoadFromStream(filename, new LoadDocumentOptions());
   var jobData = DocumentConverterJobs.CreateJobData(filename, Path.Combine(Path.GetDirectoryName(filename), $"{Path.GetFileNameWithoutExtension(filename)}_{DateTime.Now:yyyyMMddHHmmss}.pdf"), DocumentFormat.Pdf);
   var job = documentConverter.Jobs.CreateJob(jobData);
   documentConverter.Jobs.RunJob(job);
}