我正在尝试创建自定义打印机驱动程序来生成图像。为此,我安装了 Printer++,它将打印文件转换为 postscript。要将 postscript 文件转换为图像,我使用的是 ghostscript。独立地,这两个过程都运行良好,我能够实现所需的目标。
但是,我需要一个自定义过程来一次性生成图像。我跟着 Printer++ tutorial但它没有用。 这就是我所做的:
我安装了 Printer++ 并将打印机驱动程序的名称命名为 Septane。
在 Visual Studio 中,我创建了一个项目 - Test。
Processor.cs 类中的以下代码:
using System;
using System.Net.Mail;
using PrinterPlusPlusSDK;
namespace Test
{
public class Processor : PrinterPlusPlusSDK.IProcessor
{
public PrinterPlusPlusSDK.ProcessResult Process(string key, string psFilename)
{
//Convert PS to Png
psFilename = "b.ps";
MessageBox.Show("Rahul");
ConvertPsToTxt(psFilename);
}
public static string ConvertPsToTxt(string psFilename, string txtFilename)
{
var retVal = string.Empty;
var errorMessage = string.Empty;
var command = "C:\\PrinterPlusPlus\\gs\\gswin64.exe";
var args = string.Format("-dNOPAUSE -dBATCH -dFirstPage=1 -q -r300 -sDEVICE=png256 -sOutputFile=", psFilename, txtFilename);
retVal = Shell.ExecuteShellCommand(command, args, ref errorMessage);
return retVal;
}
}
}
该类继承于PrinterPlusPlusSDK.IProcessor
,实现了PrinterPlusPlusSDK.ProcessResult
处理功能。我已经测试了独立控制台项目(不使用 PrinterPlusPlusSDK 处理器)并且成功地将 ps 转换为 png。
- 现在,根据教程,需要将 dll 部署到 printer++ 并注册为处理器。我将 Test.dll 复制到 Printer++ 安装文件夹,并在 PrinterPlusPlus.exe.config 文件中添加了一个条目。
配置条目如下所示:
<processors>
<add key="Test"
value="Test.Processor, Septane, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</processors>
就是这样。现在,当我打印一个文件时,它给出了一个错误:
Proccessor not found for: Septane
我做错了什么? 如果有人有更好的想法来实现同样的目标,请告诉我。实际上,我的是商业产品,所以不能使用 CutePDF/VerPDf 类选项。
编辑:我现在知道为什么会出现错误 - 找不到处理器。我将我的打印机重命名为 Test,错误消失了。我也编辑了我的代码。
为了测试,我添加了一个消息框。一旦我发出打印命令,我希望得到一个弹出窗口。但事实并非如此。 ps 文件生成时没有错误,仅此而已。我无法查看弹出消息,也没有 png 转换文件。有人可以至少帮我解决这个问题吗?它似乎根本没有提取 dll。
谢谢。
最佳答案
请记住打印机名称必须与您的 dll 名称相同
如果您的打印机驱动程序名称是 Septane。那么您必须创建一个名为“Septane”的项目。在这种情况下,项目名称“Test”将不起作用。
关于c# 将自定义 dll 作为处理器注册到 Printer++ 配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33334920/