天道酬勤,学无止境

Ghostscript clips a pdf file

I'm trying to print a pdf with Ghostscript using those settings :

var switches = new List<string>
            {
                @"-empty",
                @"-dPrinted",
                @"-dNOPAUSE",
                @"-dNOSAFER",
                @"-dQUIET",
                @"-dPDFSETTINGS=/printer",
                @"-dNumCopies=1",
                @"-sDEVICE=mswinpr2",
                @"-dCompatibilityLevel=1.4",
                @"-sOutputFile=%printer%" + printerSettings.PrinterName,
                @"-f",
                pdfFileName
            };

but either the pdf or Ghostscript have bad margins and while it's good when I print it to file it clips when I print it on my printer.

Is there any way to add those programatically with Ghostscript ? I tried many different solutions from first pages of google but none of them work and they seem to have no effect on the printed pdf.

When I try to print it out with Adobe or IE it magicaly adds margins as soon as I choose the printer and it prints fine.

How to achive the same with Ghostscript ?

评论

OK well the first thing is that many of the switches you are setting have no effect:

-empty isn't a Ghostscript-understood switch, and I'm slightly surprised it doesn't cause an error.

-dPDFSETTINGS only affects the pdfwrite device, which is why it is documented in the vector devices section.

-dCompatabilityLevel only affects the output of the pdfwrite device.

-dNOSAFER doesn't have any effect, as that's the default setting.

-f is used to 'close' direct PostScript insertion begun with -c, if you don't use -c you don't need -f

Now almost certainly neither Ghostscript nor your PDF has 'bad margins', the most likely explanation for your problem is that the printer you are using cannot print to the boundaries of the page, the left/right edges, and potentially the top and bottom edges are used by the paper transport mechanism, and the printer cannot print there.

In order to deal with that, you will need to reduce the size of the image, which you can 'probably' do by setting -dDEVICEWIDTHPOINTS and -dDEVICEHEIGHTPOINTS and -dFIXEDMEDIA. Its going to be up to you to work out the correct values for width and height.

Added after the comments below

There are two parts to this problem, the first is to deduce the size of the actual available area to print on, and to scale the output to that size. The second is to then reposition the output on the media so that it is all printed. If as you say the content is significantly smaller than the media then you can ignore rescaling it, but the entire solution is presented here for completeness.

Now as previously mentioned, the first part of this is achieved primarily by creating a fixed size canvas; this is done with any of the media selection switches and the addition of -dFIXEDMEDIA.

NOTE if you alter the media size, then you must, obviously, also alter the scale of the contents, or it won't fit. So you also need to set PSFitPage, EPSFitPage or PDFFitPage depending on the type of input (very recent versions of Ghostscript can use -dFitPage no matter what the input type).

As an experiment I used the file /ghostpdl/examples/text_graphic_image.pdf and sent the output to a printer on FILE:

This command line:

gswin32 -dDEVICEHEIGHTPOINTS=391 -dDEVICEWIDTHPOINTS=306 -dFIXEDMEDIA -sDEVICE=mswinpr2 -sOutputFile=%printer%KensPrinter /ghostpdl/examples/text_graphic_image.pdf

produces output where 3/4 the image is clipped away (the content lies off the newly defined fixed canvas size). If I modify that to:

gswin32 -dDEVICEHEIGHTPOINTS=391 -dDEVICEWIDTHPOINTS=306 -dFIXEDMEDIA -dPDFFitPage -sDEVICE=mswinpr2 -sOutptuFile=%printer%KensPrinter /ghostpdl/examples/text_graphic_image.pdf

then the result is a perfect reproduction of the original, at 1/4 the size (half in each direction).

So, the first thing you need to do is establish the actual printable area of the media on your printer, then you can set the width and height correctly as fixed media, and tell Ghostscript to scale the page to fit.

However, this will still leave the printed image at the bottom left of the media. Since that's in an area that can't be printed, you need to shift the printed image until its centred on the page. As I suggested, you can do this with a BeginPage procedure. This:

gswin32 -dDEVICEHEIGHTPOINTS=391 -dDEVICEWIDTHPOINTS=306 -dFIXEDMEDIA -dPDFFitPage -sDEVICE=mswinpr2 -sOutptuFile=%printer%KensPrinter -c "<</BeginPage {100 100 translate}>> setpagedevice" -f /ghostpdl/examples/text_graphic_image.pdf

produces output where the printed image is shifted up and right by 100 points each.

I believe that a little investigation will allow you to figure out where exactly your printer is able to print, and to create appropriately sized unprintable margins.

Note that, for me, the %printer% syntax does not result in a printer selection dialog. I suspect that your code (whatever language that is) is expanding the %p, resulting in a corruption of the name. Or possibly whatever you use to fork a Ghostscritp process does it. In either event you probably need to double the % signs.

You should get this working from the command line first, then work on getting it into an application.

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Ghostscript 删除裁剪框外的内容?(Ghostscript removes content outside the crop box?)
    问题 我在使用 ghostscript 9.10 显然删除了裁剪框之外的内容时遇到了麻烦(特别是我放在那里的裁剪标记) 这是使用ghostscript之前的PDF:with_cropbox_before_optimize.pdf $ pdfinfo -box with_cropbox_before_optimize.pdf MediaBox: 0.00 0.00 651.97 898.58 CropBox: 28.35 28.35 623.62 870.24 将查看器设置为显示整个媒体框会按预期显示裁剪框外的裁剪标记。 (黑色边框用于说明裁剪框的位置) 然后我打电话: gs -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -dCompatibilityLevel=1.7 \ -dNOPAUSE -dQUIET -dBATCH -dAutoRotatePages=/None -sOutputFile=<out.pdf> <in.pdf> 产生以下文件:with_cropbox_after_optimize.pdf 现在裁剪标记丢失或至少不再显示 - 但是页面尺寸仍然很好,所以它没有裁剪它或其他东西...... $ pdfinfo -box with_cropbox_after_optimize.pdf MediaBox: 0.00 0.00 651
  • 如何使用Ghostscript设置自定义页面大小(How to set custom page size with Ghostscript)
    问题 我已经以600 dpi(约9.36x12.67英寸)的速度扫描了一些材料,并以PostScript(PS)格式进行了准备。 现在,当我尝试使用Ghostscript(GS)将PS转换为PDF时,由于我假设GS的默认页面大小设置为A4,因此我得到了裁剪的输出。 我在这里找到了GS的可用模板:http://www.ghostscript.com/doc/9.06/Use.htm#Known_paper_sizes,但是没有一个模板与我的PS文件的尺寸紧密匹配,因此: 我可以指示GS输出自定义尺寸吗? -sPAPERSIZE指令似乎只接受预定义的模板名称,如链接文档中所示。 回答1 您可以使用-gNNNNxMMMM设置使用的页面大小,其中NNMN是720 dpi(720像素== 1英寸)时的宽度,以像素为单位,而MMMM是720 dpi时的像素高度(以像素为单位)。 或者,您可以使用-dDEVICEWIDTHPOINTS=w -dDEVICEHEIGHTPOINTS=h以PostScript点(72点== 1英寸)设置自定义大小。 如果我没记错的话,则是9.36英寸≈= 674点和12.67英寸≈= 912点。 您还必须应用-dPDFFitPage ,以使输入适合页面。 所以你可以使用 gs \ -o output.pdf \ -sDEVICE=pdfwrite \
  • ghostscript 作物 pdf 不正确(ghostscript crop pdf not correctly)
    问题 输入PDF 使用gswin32c.exe -o nul -sDEVICE=bbox bbox.pdf ,我知道这个 pdf 的 BoundingBox 是 %%边界框:6292 6865 8108 7535 %%HiResBoundingBox:6292.907808 6865.505790 8107.091753 7534.493770, 我想获取包含 BoundingBox 内容的 pdf。 我正在使用以下命令裁剪 PDF: gswin32c -sDEVICE=pdfwrite -dFirstPage=1 -dLastPage=1 -o croped.pdf -dDEVICEWIDTHPOINTS=1815 -dDEVICEHEIGHTPOINTS=670 -dFIXEDMEDIA -c "6292 6865 translate 6292 6865 8107 7534 rectclip" -f bbox.pdf 或者 gswin32c -dQUIET -dBATCH -dNOPAUSE -dNOPROMPT -sDEVICE=pdfwrite -dFirstPage=1 -dLastPage=1 -o croped.pdf -dDEVICEWIDTHPOINTS=1815 -dDEVICEHEIGHTPOINTS=670 -dFIXEDMEDIA -c "<<
  • 用于PDF的Ghostscript:如何将4页变成1页?(Ghostscript for PDF: how to fit 4 pages into 1?)
    问题 我需要使用ghostscript将多个PDF串联到一个pdf文件中。 我需要您提供的帮助是我必须使用什么命令,以便编辑输出页面,以使其适合输入文件的4个页面,使其适合输出的1个页面。 到目前为止,我正在使用的命令是: gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite \ -sOutputFile=ALL.pdf plot_1.pdf plot_n.pdf 输入文件为A4横向,输出必须为相同格式。 感谢所有人,克里斯蒂安 回答1 这是我写的一个程序,用于从PDF进行2合拼版。 这不是通用的PostScript程序,它仅适用于Ghostscript(因为它利用了GS的某些内部组件),并且仅当输入为PDF时才适用,而不适用于PostScript。 您将必须对其进行修改以进行4合一拼版。 不用担心可怕的许可问题,那仅仅是因为我从其他地方复制了样板。 您可能想假设所有页面的大小和方向都相同,这与该代码允许不同的方向不同。 %!PS % Copyright (C) 2011 Artifex Software, Inc. All rights reserved. % % This software is provided AS-IS with no warranty, either express or % implied. % % This
  • How to set custom page size with Ghostscript
    I have scanned some materials at 600 dpi, ~ 9.36x12.67 inches and prepared in PostScript (PS) format. Now when I try to transform PS to PDF with Ghostscript (GS), I get clipped output, as I assume GS's default page size is set to A4. I found available templates for GS here: http://www.ghostscript.com/doc/9.06/Use.htm#Known_paper_sizes but none matches closely to dimensions of my PS files, so: Can I instruct GS to output custom size, and if so how? -sPAPERSIZE instruction seem to accept only predefined templates name, as in linked documentation.
  • 使用 ghostscript 处理(重新映射)PDF 中丢失/有问题的(CID/CJK)字体?(Handling (remapping) missing/problematic (CID/CJK) fonts in PDF with ghostscript?)
    问题 简而言之,我正在处理一个有问题的 PDF,它: 由于缺少字体信息,无法在像evince这样的文档查看器中完全呈现; 但是 - ghostscript可以完全渲染相同的 PDF。 因此——不管ghostscript使用什么来填充空白(可能是后备字形,或者访问字体的不同方法)——我希望能够使用ghostscript来生成(“提炼”)输出PDF,其中除了添加字体信息外,几乎没有任何变化,因此evince可以以与ghostscript相同的方式渲染相同的文档。 因此,我的问题是 - 这完全可以做到吗? 如果是这样,命令行是什么来实现这样的目标? 非常感谢您提供任何答案, 干杯! 细节: 我实际上使用的是较旧的 Ubuntu 10.04,我可能遇到了 - 不是错误 - 而是evince的安装问题(缺少poppler-data包),如错误 #386008 中所述“某些字体由于“而无法显示”未知字体标签...”:错误:“poppler”包:Ubuntu。 然而,这正是希望我来处理,所以我会用fontspec.pdf连接到该职位(“PDF触发的错误。”//v. ) 来演示问题。 evince 首先,我在evince打开这个 pdf 的第 3 页; 和evince抱怨: $ evince --page-label=3 fontspec.pdf Error: Missing
  • 使用 Ghostscript 将 JPEG 转换为 PDF(Using Ghostscript to convert JPEG to PDF)
    问题 我应该传递哪些参数? 我使用的 Ghostscript 版本是 8.71。 回答1 gs \ -dNOSAFER \ -sDEVICE=pdfwrite \ -o foo.pdf \ /usr/local/share/ghostscript/8.71/lib/viewjpeg.ps \ -c \(my.jpg\) viewJPEG 读取my.jpg并生成foo.pdf 。 您必须找到安装 PostScript 程序viewjpeg.ps安装viewjpeg.ps 。 回答2 https://gitlab.mister-muffin.de/josch/img2pdf 正如 PleaseStand 所提到的,GhostScript(编辑:v9.23 之前)将解码 JPEG 数据,导致生成损失,以及性能比 img2pdf 差“十到一百”倍。 编辑:Ghostscript 9.23 (2018-03-21) 添加了“JPEG Passthrough”功能,解决了生成损失/性能问题。 ImageMagick(即convert )还对图像进行解码和重新编码。 回答3 很长一段时间以来,我一直在使用 Henry 在他的回答中给出的相同基本命令行,并在一个简单的 Bash 脚本中进行了一些调整。 我的完整脚本使用以下修改后的命令将多个 JPEG 图像转换为多页 PDF: gs \
  • 如何使用ghostscript将PDF转换为PDF / A或PDF / X?(How to use ghostscript to convert PDF to PDF/A or PDF/X?)
    问题 有没有一种方法可以使用ghostscript将PDF转换为PDF / A或PDF / X? 我知道它可以用于将PDF转换为图像,但是我不知道它是否可以用于转换PDF / A。 我应该使用什么参数? 回答1 这是为了将pdf文档(而非pdf / a)转换为pdf / a: gs -dPDFA -dBATCH -dNOPAUSE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=output_filename.pdf input_filename.pdf 希望这会有所帮助! 回答2 希望这个答案可以帮助其他来自Google的人遇到相同的问题: 要将PDF从PDF转换为PDFA-1b或PDFA-2b,可以使用Ghostscript。 我建议您使用最新版本(今天为9.19)。 安装它 在Mac OS中,您可能更喜欢使用Homebrew: brew install ghostscript 在Linux中,某些发行版带来了更旧的版本(rhel7 sports 9.07)。 要下载完全独立的现代单文件ghostscript,请直接从站点下载它: wget https://github.com/ArtifexSoftware
  • 使用Ghostscript分割PDF(Splitting a PDF with Ghostscript)
    问题 我尝试使用Ghostscript拆分多页PDF,并且在更多站点上甚至在ghostscript.com上都找到了相同的解决方案,即: gs -sDEVICE=pdfwrite -dSAFER -o outname.%d.pdf input.pdf 但是它似乎对我不起作用,因为它生成一个文件,包含所有页面,并且名称为outname.1.pdf 。 当我添加起始页和结束页时,它可以正常工作,但是我希望它在不知道这些参数的情况下工作。 在gs-devel档案库中,我找到了一个解决方案:http: pdf_info但我想在没有pdf_info情况下pdf_info 。 当我使用其他设备(例如pswrite )但具有相同的参数时,它可以正常工作,并生成与input.pdf包含的一样多的ps文件。 使用pdfwrite正常吗? 难道我做错了什么? 回答1 您看到的是“正常”行为:当前版本的 Ghostscript pdfwrite输出设备不支持此功能。 这也在 Use.htm 中(无可否认,以某种方式模糊)记录: “但是请注意,并非所有设备都支持每个文件一页的功能......” 我似乎记得 IRC 上的一位 Ghostscript 开发人员提到他们可能会在未来的某个版本中将此功能添加到 pdfwrite 中,但似乎需要重写一些主要的代码,这就是为什么他们还没有这样做的原因...... 更新
  • 优化PDF文件(使用Ghostscript或其他文件)(Optimize PDF files (with Ghostscript or other))
    问题 如果要优化PDF文件并减小文件大小,Ghostscript是最好的选择吗? 我需要存储大量PDF文件,因此我需要尽可能地优化和减小文件大小 是否有人对Ghostscript和/或其他有任何经验? 命令行 exec('gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -sOutputFile='.$file_new.' '.$file); 回答1 如果您正在寻找免费(如“自由”)软件,那么Ghostscript无疑是您的最佳选择。 但是,它并不总是易于使用-它的某些(功能非常强大)的处理选项并不容易找到文档。 看看这个答案,它说明了如何对图像分辨率下采样执行比通用-dPDFSETTINGS=/screen更为详细的控制(定义了一些总体默认值,您可能要覆盖这些默认值): 如何对pdf文件中的图像进行下采样? 基本上,它告诉您如何使Ghostscript将所有图像降采样为72dpi的分辨率(此值是-dPDFSETTINGS=/screen使用的值-您可能想降低到更低): -dDownsampleColorImages=true \ -dDownsampleGrayImages=true \ -dDownsampleMonoImages=true \
  • 如何使用Ghostscript将PDF文件的一部分裁剪为PNG(How to crop a section of a PDF file to PNG using Ghostscript)
    问题 我需要将PDF文件中的特定部分裁剪为PNG(这将通过使用Ghostscript和PHP来自动执行)。 这是我现在要做的,基本上将PDF的第一页转换为PNG: gs -q -dNOPAUSE -dBATCH \ -sDEVICE=pngalpha -dEPSCrop \ -sOutputFile=output.png input.pdf 具体来说,我正在尝试将这张左上方的卡片裁剪为PNG。 我也希望获得有关如何完成此操作的更多建议。 回答1 第一的, 确定您的第一个PDF页面的边界框: gs \ -q \ -dBATCH \ -dNOPAUSE \ -sDEVICE=bbox \ -dLastPage=1 \ stackoverflowQuestion.pdf \ 2>&1 \ | grep %%BoundingBox 结果输出将是: %%BoundingBox: 119 531 464 814 它的意思是: 边界框的左下角位于坐标(119,531) 边界框的右上角位于坐标(464,814) 值以PostScript点(其中72 pt == 1 inch )为单位。 边界框是该矩形,其中包括这些图形PDF对象,这些对象在页面上留下墨水或碳粉标记。 然后, 创建您的PNG。 从边界框值导出,您似乎希望它宽345 pt( = 464 - 119 ),高283 pt( = 814 -
  • GhostscriptRasterizer 对象返回 0 作为 PageCount 值(GhostscriptRasterizer Objects Returns 0 as PageCount value)
    问题 txtStatus.Text = ""; if (!File.Exists(txtOpenLocation.Text)) { txtStatus.Text = "File Not Found"; return; } txtStatus.Text = "File Found"; const string DLL_32BITS = "gsdll32.dll"; const string DLL_64BITS = "gsdll64.dll"; //select DLL based on arch string NomeGhostscriptDLL; if (Environment.Is64BitProcess) { NomeGhostscriptDLL = DLL_64BITS; } else { NomeGhostscriptDLL = DLL_32BITS; } GhostscriptVersionInfo gvi = new GhostscriptVersionInfo(NomeGhostscriptDLL); var rasterizer = new GhostscriptRasterizer(); try { rasterizer.Open(txtOpenLocation.Text, gvi, true); Console.WriteLine(rasterizer
  • 使用ghostscript将pdf页面的整个媒体框渲染为png文件(Rendering the whole media box of a pdf page into a png file using ghostscript)
    问题 我正在尝试使用 Ghostscript v9.02 将 Pdfs 页面呈现为 png 文件。 为此,我使用以下命令行: gswin32c.exe -sDEVICE=png16m -o outputFile%d.png mypdf.pdf 当 pdf 裁剪框与媒体框相同时,这可以正常工作,但如果裁剪框小于媒体框,则仅显示媒体框并且 pdf 页面的边框丢失。 我知道通常 pdf 查看器只显示裁剪框,但我需要能够在我的 png 文件中看到整个媒体页面。 Ghostscript 文档说,默认情况下会呈现文档的媒体框,但这在我的情况下不起作用。 任何人都知道如何使用ghostscript实现整个媒体框的渲染? 难道是对于 png 文件设备,只有裁剪框被渲染? 我可能忘记了一个特定的命令吗? 例如,此 pdf 包含裁剪框之外的一些注册标记,这些注册标记在输出 png 文件中不存在。 有关此 pdf 的更多信息: 媒体框: 宽度:667 身高:908分裁剪框: 宽度:640 身高:851 回答1
  • AWS Lambda 函数 - 将 PDF 转换为图像(AWS Lambda function - convert PDF to Image)
    问题 我正在开发应用程序,用户可以在其中以 pdf 格式上传一些图纸。 上传的文件存储在 S3 上。 上传后,文件必须转换为图像。 为此,我创建了 lambda 函数,该函数将文件从 S3 下载到 lambda 执行环境中的 /tmp 文件夹,然后我从 imagemagick 调用“转换”命令。 convert sourceFile.pdf targetFile.png Lambda 运行时环境是 nodejs 4.3。 内存设置为 128MB,超时 30 秒。 现在的问题是某些文件转换成功,而其他文件转换失败并出现以下错误: { [错误:命令失败:/bin/sh -c convert /tmp/sourceFile.pdf /tmp/targetFile.png convert: %s' (%d) "gs" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72" "-sOutputFile=/tmp/magick-QRH6nVLV--0000001" "-f/tmp/magick-B610L5uo
  • 在不使用Ghostscript DLL的情况下将PDF转换为图像(Convert PDF to Image without using Ghostscript DLL)
    问题 有什么办法可以将HTML文档(文件而不是URL)转换为图像,或将PDF转换为图像? 我可以使用Ghostscript DLL来完成上述操作,还有其他方法可以实现,而无需使用Ghostscript DLL吗? 我正在开发C#Windows应用程序。 回答1 使用LibPdf,将PDF转换为图像 LibPdf库转换将PDF文件转换为图像。 支持的图像格式为PNG和BMP,但您可以轻松添加更多图像格式。 用法示例: using (FileStream file = File.OpenRead(@"..\path\to\pdf\file.pdf")) // in file { var bytes = new byte[file.Length]; file.Read(bytes, 0, bytes.Length); using (var pdf = new LibPdf(bytes)) { byte[] pngBytes = pdf.GetImage(0,ImageType.PNG); // image type using (var outFile = File.Create(@"..\path\to\pdf\file.png")) // out file { outFile.Write(pngBytes, 0, pngBytes.Length); } } } ImageMagick
  • 使用 ghostscript 将 jpg 列表转换为 pdf(Convert list of jpgs to pdf with ghostscript)
    问题 GhostScript v9.10 64bit 版本 我想获取一个 jpg 列表并将它们转换为单个 pdf 文件,其中每个图像都有自己的页面。 我尝试遵循此处使用的方法:使用 Ghostscript 将 JPEG 转换为 PDF,但出现错误。 这是我的命令: C:\Temp>gswin64c -sDEVICE=pdfwrite -o cafb0173-f4be-47a8-a39e-f479ca0a4d09.pdf viewjpeg.ps -c 5c520934-461a-44f3-9f00-9fdc9fe666c1.jpg 这是我得到的: GPL Ghostscript 9.10 (2013-08-30) Copyright (C) 2013 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. Error: /undefined in 5c520934-461a-44f3-9f00-9fdc9fe666c1.jpg Operand stack: Execution stack: %interp_exit .runexec2 --nostringval-- --nostringval-- -
  • 使用 GhostScript 为从 PDF 转换的 Jpeg 设置自动高度/宽度(Setting auto-height/width for converted Jpeg from PDF using GhostScript)
    问题 我正在使用 GS 进行从 PDF 到 JPEG 的转换,以下是我使用的命令: gs -sDEVICE=jpeg -dNOPAUSE -dBATCH -g500x300 -dPDFFitPage -sOutputFile=image.jpg image.pdf 在此命令中,您可以看到-g500x300是设置转换后的图像大小(宽 x 高)。 有没有办法只设置宽度而不必输入高度,这样它将根据宽度使用其原始纵横比来缩放高度? 我知道它可以通过使用 ImageMagick convert 来实现,您只需将0放在高度参数上,即-resize 500x0 。 我尝试过使用 GhostScript,但我认为这不是正确的方法。 我决定不使用 ImageMagick 转换的原因是因为它在转换大尺寸的多页 PDF 时非常慢。 谢谢您的帮助! 回答1 这篇文章解释了为什么 ghostscript 更快 - https://serverfault.com/questions/167573/fast-pdf-to-jpg-conversion-on-linux-wanted,唯一的解决方法是修改 imagemagick 代码。 不幸的是,ghostscript 不支持自动确定的输出大小。 这主要是因为使用的-g选项实际上决定了将保存渲染输出的设备大小,而不是渲染输出本身。 由于
  • 使用 PHP 的 exec (Laravel on Docker) 压缩 Ghostscript PDF 文件(Ghostscript PDF file compression using PHP's exec (Laravel on Docker))
    问题 需要做什么: 用户必须能够上传 PDF,然后将文件上传到 Amazon S3 存储桶,然后文件应该被压缩。 当前环境: Laravel 应用程序(安装在 Docker 上)( php:7.4-fpm-alpine3.11 , GPL Ghostscript 9.50 , Laravel Framework 5.8.37 ) 用于保存文档的 Amazon S3 存储桶脚本位于 shell 文件中,该文件可执行并添加到 /usr/local/bin 作为shrink Shell 没有明确添加到 Docker 容器中,应该是这样吗? 当前流量: 用户上传文件文件上传到S3 Laravel 然后将文件下载到本地临时文件夹然后运行 ​​Ghostscript 以压缩所述文件(此脚本) 压缩文件上传回 S3 问题: 该文件已找到并正在压缩,但输出为空白(1 页,白色)pdf 文件。 Dockerfile: # Add compression shell script to global executables COPY .docker/config/shrink.sh /usr/local/bin/shrink RUN chmod u+x /usr/local/bin/shrink RUN chown nobody.nobody /usr/local/bin/shrink
  • Python 静默打印 PDF 到特定打印机(Python silent print PDF to specific printer)
    问题 我有一个 PDF 文档,我想用我的 python 应用程序打印它。 我在这里尝试了解决方案(使用 python 的 win32print 模块打印 PDF 文档?)但是当我安装实际版本的 Ghostscript 9.15 时,它没有gsprint.exe 我使用的方法是使用命令os.startfile('PDFfile.pdf', "print")但它打开默认查看器(我的是 Adob​​e Reader),打印后它仍然打开,试图用os.system("TASKKILL /F /IM AcroRD32.exe")进程os.system("TASKKILL /F /IM AcroRD32.exe")杀死其他打开的窗口,我不想要它。 使用下一个命令,它也会打印,但它也让 Adob​​e Reader 打开 currentprinter = win32print.GetDefaultPrinter() win32api.ShellExecute(0, "print", 'PDFfile.pdf', '/d:"%s"' % currentprinter, ".", 0) 我也看过这个答案,但他们建议再次使用gsprint.exe 有人有gsprint.exe文件或任何其他解决方案吗? 注意:当我使用另一个默认程序打开 PDF 文件(如 Chrome 或 Windows 阅读器)时
  • 使用 ghostscript 缩放 PDF 文件(Scaling PDF file using ghostscript)
    问题 我们的系统采用 8.5 x 11 PDF 文件(仅)并对其进行处理。 有时客户会将文件交给我们,以将其加工成正确的形状。 我们正在努力将非标准尺寸的 PDF 文件自动缩放为 8.5 x 11。 我们已经能够处理我们用 ghostscript 测试过的大多数文件,但是我们有一个客户提交的文件我们无法处理。 (不幸的是,我们无法重新创建条件,当然也无法发布客户的数据。) 该文件为 PDF v1.7,包含七页 8.5x11 页面,后跟四页 25.5 x 45.33 英寸。 我不知道它们是如何生成的(Adobe Acrobat 10.1.2 per pdfinfo)。 我们逐渐为我们的 gs 命令添加了一系列参数,直到我们到达这里: gs -sDEVICE=pdfwrite -sOutputFile=$final_file -dBATCH -dNOPAUSE -sPAPERSIZE=letter -q -r720 -g6120x7920 -dPDFFitPage -dFIXEDMEDIA $files_to_convert 这对于我们的其他文件似乎工作正常,但是对于这个 ONE 文件,25.5 x 45.33 页面没有缩放到信纸大小。 以下是每个 pdfinfo 输出文件第 7 页和第 8 页的测量值: Page 7 size: 612 x 792 pts (letter) Page