首先,感谢在此发布的所有人。
我这个叫pdfScale小脚本,它吸收了张贴在这里的答案的一部分。所以我决定发回我的2美分。我正在使用库尔特和蒂姆的答案。更类似于蒂姆的。我跟这个玩了几天,这是我在这里张贴的方式部分结论:
设置纸张尺寸的名称与-sPAPERSIZE
- 易刚通过的文件名(如。 A4)
- 可能无法产生100%的准确点尺寸
- 可能翻转景观<>肖像
在PS点-dDEVICEWIDTHPOINTS
设置纸张尺寸,-dDEVICEHEIGHTPOINTS
- 可以确保得到你点所需的大小
- 可以翻转WIDTH <> HEIGHT自己
- You need to know the sizes in Points
- 没那么容易来编写脚本,因为如果要检测横向/纵向,您将需要新的页面大小,并且还需要源的页面大小。
- 您也可以设置自定义的论文(任何您想要的尺寸)。
- 我使用的是
-dDEVICEWIDTH
,-dDEVICEHEIGHT
而不是更长的积分版本,但他们都似乎做同样的事情(都获得积分)。
因为我的bash脚本已经能够获取源页面大小,并且我喜欢能够设置自定义页面大小的想法,所以我决定专注于设置页面大小。我已经在我的脚本中包含了GS Paper Sizes(包含名称和大小)。所以得到这些信息也很容易。
使用-dFIXEDMEDIA
似乎是两种情况下都必须的,如前所述。
所以这是我的方法如何去(以脚本的方式)
- 获取源PDF页面大小(倒装检测)
- 获取目标的页面大小点(例如,A4> 595x842)
- 检查它们具有相同的方向或者在必要
- 运行GS与分目标翻转或翻转点
当我试图修复自动旋转问题时,I found this other Kurt response。 这是关于使用-dAutoRotatePages
。在这里只复制他的一部分答案:
-dAutoRotatePages=/None
- 保留每个页面的方向;
-dAutoRotatePages=/All
- 根据“多数决定”的种类旋转所有页面(或无);
-dAutoRotatePages=/PageByPage
- 单独自动旋转页面。
我的脚本默认为PageByPage
,但可以调整。它在我的测试中运行良好。使用-dAutoRotatePages
也似乎减少了翻页前页面大小的需要,尽管它不是同一件事。我保留了两种选择。
我的小应用程序最初是为了扩展PDF而创建的(不更改页面大小)。然后,我现在添加了功能来完成一个,另一个或两个。尽管如此,我仍然无法在一次GS呼叫中完成这一切。
这就是我要求调整大小,将变量更改为实际值。这是A4大小的肖像与PageByPage
自动旋转:
gs \
-q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
-dCompatibilityLevel="1.5" -dPDFSETTINGS="/printer" \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dSubsetFonts=true -dEmbedAllFonts=true \
-dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=842 \
-dAutoRotatePages='/PageByPage' \
-dFIXEDMEDIA -dPDFFitPage \
-sOutputFile='../myOutputFile.pdf' \
-f '../input.pdf'
请注意,我还使用-dFIXEDMEDIA
和-dPDFFitPage
。因为这适合页面,所以在调整大小后(特别是如果PDF的比例改变很多),我的脚本的其他部分可能很方便地缩放PDF内的内容。这就是我在脚本中调整大小后(在混合模式下)始终运行缩放的原因之一。
关于使用纸张名称时的分数问题,在我将毫米/英寸转换为点之前,发生了这种情况。在我开始四舍五入之后,他们似乎永远都是需要的人。看起来奇怪的是,GS会落实这些价值。
所以我的结论是,难的部分是找到一种解决方案,可以在不同尺寸和方向的不同文档上进行全面的工作。我仍然不确定我是否正在使用适当的解决方案。但通过让用户更改翻转检测和GS自动旋转,我希望至少在大多数情况下都有解决方案。
我也重建了过程中的大部分代码,现在很容易阅读。如果你想自己自动执行这样的任务,检查它可能会有用。也有用,只是规模/调整PDF文件以及课程:
https://github.com/tavinus/pdfScale
PS:pdfScale它起源on this StackOverflow thread。
感谢您的回复,我已经使用了-dPDFFITPAGE参数,但这并没有得到它的工作。 – Matt
有些方法(丑陋的)可以扩展PDF输入,但通常不是必需的。你能分享一个示例文件来看看吗? – KenS
@Matt:我认为它会工作,如果你添加'-dFIXEDMEDIA'开关... –