从 EPLAN API 调用时 PDF 导出不显示白色对象

问题描述 投票:0回答:1

我们有一个批处理实用程序,可以从 EPLAN Electric P8 存档文件列表中生成许多可交付成果,包括 PDF 导出。我们正在将 EPLAN 版本从 2.7 更新到 2.9,从 API 调用时 PDF 不再正确导出。白色物体不会出现在打印中。当从 EPLAN 中调用时,它们仍然正确显示(页面 -> 导出 -> PDF...)。

注意:我们需要导出为 pdf 而不是打印。

我们尝试通过Export对象调用导出函数:

string projectPath = @"<PATH TO VALID .ell/.elk FILE>";
Eplan.EplApi.DataModel.Project testProject = TESTER_OpenProject(projectPath);
Eplan.EplApi.HEServices.Export export = new Eplan.EplApi.HEServices.Export(true);
export.PdfProject(testProject, string.Empty, $"$(DOC)\\{testProject.ProjectName}.pdf", Eplan.EplApi.HEServices.Export.DegreeOfColor.BlackAndWhite, false, "en_US", true);

也可以通过命令行解释器:

Eplan.EplApi.ApplicationFramework.ActionCallingContext pdfContext = new Eplan.EplApi.ApplicationFramework.ActionCallingContext();

pdfContext.AddParameter("type", "PDFPROJECTSCHEME");
pdfContext.AddParameter("projectname", <projectName>);
pdfContext.AddParameter("exportfile", <pdfFileName>);
pdfContext.AddParameter("blackwhite", "1");
pdfContext.AddParameter("exportscheme", "");
pdfContext.AddParameter("useprintmargins", "1");

Eplan.EplApi.ApplicationFramework.CommandLineInterpreter cmdLineItp = new Eplan.EplApi.ApplicationFramework.CommandLineInterpreter();
cmdLineItp.Execute("export", pdfContext);

并通过操作管理器:

Eplan.EplApi.ApplicationFramework.ActionCallingContext PDFContext = new Eplan.EplApi.ApplicationFramework.ActionCallingContext();
PDFContext.AddParameter("type", "PDFPROJECTSCHEME");
PDFContext.AddParameter("projectname", <projectName>);
PDFContext.AddParameter("exportfile", <pdfFileName>);
PDFContext.AddParameter("blackwhite", "1");
PDFContext.AddParameter("exportscheme", "");
PDFContext.AddParameter("useprintmargins", "1");
PDFContext.AddParameter("Language", "en_US");

Eplan.EplApi.ApplicationFramework.ActionManager actionManager = new Eplan.EplApi.ApplicationFramework.ActionManager();

Eplan.EplApi.ApplicationFramework.Action PDFExportAction = actionManager.FindAction("export");
PDFExportAction.Execute(PDFContext);

上述所有 3 种方法都会生成相同的结果。 pdf 不显示白色背景的对象。

测试是在一个精简的 EPLAN 项目上进行的,该项目的单页由一个绿色方块和一个白色方块组成。 EPLAN 菜单栏中的导出命令生成的 pdf 显示两个方块,而上述所有 C# 代码生成的 pdf 只显示绿色方块。

相关文件:https://filetransfer.io/data-package/2fCt26V3#link

  1. 从 EPLAN 内部生成 PDF 导出。
  2. 从 EPLAN API 生成 PDF 导出。
  3. 用于生成上述 PDF 文件的最小示例的 EPLAN 存档文件。
c# pdf-generation export-to-pdf cad
1个回答
0
投票

从讨论来看,源模板无法更改,但输出 PDF 可以。

更改 PDF 颜色可能是一项复杂的任务,因为通常会设置颜色,因此在该设置之后、分配另一种颜色之前,该颜色将用于所有对象。因此,针对一种文件类型的解决方案可能不适合另一种用途。

检查需要黑色的文件行是否已放置在白色设置之后,因此最简单的解决方案是将所有行设置为一种颜色,无论其颜色如何。使用非商业 Coherent cpdf 可以轻松完成此操作。

cpdf -blacklines in.pdf out.pdf

但是您需要注意,任何灰色或其他颜色的线条也将转换为新颜色(默认黑色)。

在这种情况下,另一种选择是将白色的所有颜色定义转换为黑色,这样做的危险是白色背景也会变成黑色。

幸运的是,该示例基于透明的非白色背景。因此,批量针对白色

1 1 1 RG
1 1 1 rg
适用于给定的样本,以允许(解压后)转换为
0 0 0 RG
0 0 0 rg

因此 AGPL Artifex MuTool 可用于对文件进行去线性化以进行编辑。

mutool clean -a -c -d -gggg EXPORT_FROM_API.pdf decompressed.pdf

注意不要使用“-sanitise”,因为它会删除一些白色定义!

一旦文件适合编辑,我们就可以通过查找和替换进行更改。但是,我使用 PowerShell 的尝试导致了损坏,因此效果不佳。

正确结果。

0 0 0 RG
0 0 0 rg
459.385 128.769 m
780.155 128.769 l
S
780.155 481.616 m
780.155 128.769 l
S
459.385 481.616 m
780.155 481.616 l
S
459.385 481.616 m
459.385 128.769 l
S

有许多“查找和替换”工具可以在更复杂的示例上进行测试,但关键是文件不得更改大小,也不得与文件的任何其他部分不同。

一旦您在真实的复杂多色案例中测试了该结果,就可以再次使用 MuTool 进行重新线性化。

mutool clean -f -i -l -z modified.pdf whiteISblack.pdf
© www.soinside.com 2019 - 2024. All rights reserved.