【发布时间】:2013-12-11 16:16:18
【问题描述】:
在以下问题上,我需要您的支持,因为它让我有一段时间了。我们有一个小的c# 实用程序,它使用GhostScript 打印给定PDF。此打印按预期打印,但未能保留页面格式。但是,当我切换Adobe Acrobat 代替GhostScript 时,页面会按预期打印。所以我想,我在 GhostScript 的命令行参数上犯了一些明显的错误。
背景
以下是核心 c# 逻辑,它在每个页面上打印具有不同样式的给定 PDF 文件。给定的 PDF 文件有页面;
- 字体样式和颜色不一致
- 有些页面的字体大小正常,而其他页面的字体则超小
- 一些页面有推荐的边距,但其他页面的边距非常小
- 部分页面为彩色,其余为灰色。
- 有些页面是横向的,而另一些是纵向的
简而言之,我尝试打印的 PDF 只不过是众多具有不同字体样式、大小和边距的小型 pdf 文档的合并(将单个 pdf 合并为一个大 pdf)。
问题
以下逻辑使用GhostScript(v9.02) 打印PDF 文件。尽管以下逻辑打印任何给定的 PDF,但它无法保留页面格式,包括 页眉、页脚、字体大小、边距、方向(我的 pdf 文件有横向和纵向页面)。
有趣的是,如果我使用 acrobat reader 打印相同的 PDF,那么它将按预期与所有页面级格式一起打印。
PDF 样本:First section、Second section
void PrintDocument()
{
var psInfo = new ProcessStartInfo();
psInfo.Arguments =
String.Format(
" -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=1 -sDEVICE=ljet4 -sOutputFile=\"\\\\spool\\{0}\" \"{1}\"",
GetDefaultPrinter(), @"C:\PDFOutput\test.pdf");
psInfo.FileName = @"C:\Program Files\gs\gs9.10\bin\gswin64c.exe";
psInfo.UseShellExecute = false;
using (var process= Process.Start(psInfo))
{
process.WaitForExit();
}
}
【问题讨论】:
-
只是为了确保我理解您的问题:您的问题是否与合并 PDF 文件(而不是实际创建或真正打印 PDF)有关?
-
@elgonzo,问题在于打印而不是合并。
-
现在我很困惑...如果只是关于打印而不是合并 PDF,您为什么要谈论 Acrobat 以及将单个 PDF 合并到一个更大的 PDF 中?
-
从我们项目的经验来看,GhostScript/GhostPDL (PCL)/GhostXPS 实际上与字体支持非常不一致,除非是面向ghost的DTP核心,否则都不应该在生产周期中使用。
-
也许您应该报告问题,以便解决问题。据我所知,Ghostscript 完全支持所有字体类型。当然,如果您不嵌入或不提供字体,那么您将获得替代品,但这不是应用程序的错。
标签: c# pdf printing ghostscript postscript