我们有一个批处理实用程序,可以从 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
从讨论来看,源模板无法更改,但输出 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