gpt4 book ai didi

pdf - Ghostscript 旋转页面

转载 作者:行者123 更新时间:2023-12-04 02:16:04 27 4
gpt4 key购买 nike

我使用 Ghostscript 将 PDF 文档转换为 PCL 进行打印。最近我有一个额外的要求,即所有页面必须在打印前旋转为纵向。我找到了一种使用 Ghostscript 和以下命令和 postscript 函数来做到这一点的方法。

"C:\Program Files (x86)\gs\bin\gswin32c.exe" "-dNOPAUSE" "-dNOPROMPT" "-dBATCH" "-sDEVICE=pxlmono" "-Ic:\Program Files (x86)\gs\fonts\;c:\Program Files (x86)\gs\lib\;c:\Program Files (x86)\gs\lib\;" "-r300" "-sOutputFile=C:\EXPORTFILE_e542e04f-5e84-4c8e-9b41-55480cd5ec52.cache" "rotate612x792.ps" "C:\EXPORTFILE_3a5de9da-d9ca-4562-8cb6-10fb8715385a.cache"
rotate612x792.ps 的内容
%! Rotate Pages
<< /Policies << /PageSize 5 >>
/PageSize [612 792]
/InputAttributes currentpagedevice
/InputAttributes get mark exch {1 index /Priority eq not {pop << /PageSize [612 792] >>} if } forall >>
>> setpagedevice
问题是这个函数用字母大小替换了所有页面大小。我的文件有时是合法的或 A4 纸。我曾尝试修改此功能以将横向尺寸替换为纵向尺寸,但无法生成有效的附言。我需要指向正确的方向以生成以下伪代码的 postscript 等效项。
for(each page)
{
if(PageSize == [792 612])
PageSize = [612 792];
}
我知道有非 Ghostscript 旋转页面的方式,但如果我能让它工作,它将非常适合我的流程并且不会降低性能。
这是我的一个 pdf 文件的示例:
Sample1.pdf

最佳答案

PostScript 是一种编程语言,因此您可以用它做很多事情。您在这里需要做的是重新定义请求页面大小的操作。页面大小和内容在 PostScript 中是分开的,因此您需要做两件事:

1)将媒体请求从横向更改为纵向

2) 旋转页面内容

最简单的方法是重新定义“setpagedevice”操作符。下面是一个例子:

/oldsetpagedevice /setpagedevice load def %% copy original definition

/setpagedevice {
dup /PageSize known { %% Do we have a page size redefinition ?
dup /PageSize get %% get the array if so
aload pop %% get elements remove array copy
gt { %% is width > height ?
dup /PageSize get aload %% get size array, put content on stack
3 1 roll %% roll stack to put array at back
exch %% swap width and height
3 -1 roll %% bring array back to front of stack
astore %% put swapped elements into array
/PageSize exch %% put key on stack and swap with value
2 index %% copy the original dict
3 1 roll %% move dict to back of stack
put %% put new page size array in dict
90 rotate %% rotate content 90 degrees anti-clockwise
} if
} if
oldsetpagedevice %% call the original definition
} bind def

这会检查配置更改以查看页面大小是否被更改,如果是,则获取新大小,并查看宽度 > 高度(横向的简单定义)。如果这是真的,那么它通过交换宽度和高度来改变请求,然后将页面内容旋转 90 度。

您可以通过将上述内容放在一个文件(例如 prolog.ps)中,然后在您自己的工作之前运行该文件来将其与 Ghostscript 一起使用:

gs ...... prolog.ps job.ps

我试过这个,但没有使用横向文件,因为我手头没有。另请注意,可以构建一个 PostScript 程序来解决这个问题。

关于pdf - Ghostscript 旋转页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10457128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com