0
private static string[] GetArgs(string inputFile, string outputFile)
{
    return new[] {
    $"gs",
    $"-o",
    $"{outputFile}",
    $"-dNoOutputFonts",
    $"-sDEVICE=pdfwrite",
    $"{inputFile}",
 }; 


GhostscriptProcessor ghostscript = new GhostscriptProcessor();
string inputFile = "D:\\%1.pdf";
string outputFile = "D:\\%output.pdf";
ghostscript.Process(GetArgs(inputFile, outputFile));

there will be an error "An error occured when call to 

'gsapi_init_with_args' 是:-100"

但是如果将文件路径更改为同伴

字符串 inputFile = "D:\%1.pdf"; (包含 %) 字符串 outputFile = "D:\output.pdf"; (不包含 %)

它有效,没问题

如果将文件路径更改为同伴

字符串 inputFile = "D:\你.pdf"; 字符串 outputFile = "D:\output.pdf";

inputFile="D:\你.pdf" "你" 是汉字

这也行不通

我做了更多的测试,如果文件路径包含中文字符,则不起作用。

任何人都可以提供一些建议吗?非常感谢。

我做了一些更改以将文件名转换为 UTF8 作为研究员

UTF8Encoding utf8 = new UTF8Encoding();

字符串 inputFile = "D:\你.pdf"; 字符串输出文件 = "D:\%91.pdf";

字节[] inputFileEncodedBytes = utf8.GetBytes(inputFile);

字节[] outPutFileEncodedBytes = utf8.GetBytes(outputFile);

字符串 strInput = System.Text.Encoding.UTF8.GetString(inputFileEncodedBytes);
字符串 strOutPut =System.Text.Encoding.UTF8.GetString(outPutFileEncodedBytes);

ghostscript.Process(GetArgs(strInput, strOutPut));

结果是一样的

4

1 回答 1

0

Ghostscript 可执行文件(与 Ghostscript.NET 使用的 DLL 不同)将在文件名未表示为 UTF-8 的平台上将文件名转换为 UTF-8。例如,在 Windows 上,非拉丁文件名采用宽字符格式,Ghostscript 前端可执行文件将在将它们传递给 DLL 之前将它们转换为 UTF-8。

DLL 不会自行执行此操作。由调用者(在本例中为 Ghostscript.NET 或您的代码)确保传递给 DLL 的任何文件名都是 UTF-8 格式。

于 2019-07-08T06:59:28.803 回答