You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用gsprint打印远程PDF文件(后续拟结合Python实现)

问题解答

核心结论

Ghostscript 和 gsprint 不支持直接读取远程URL的PDF文件,必须先将文件下载到本地,再进行打印操作。

报错原因

/undefinedfilename 错误的本质是:Ghostscript 的输入仅支持本地文件路径、标准输入(stdin)或本地可访问的数据源,远程HTTP/HTTPS URL不在其支持的输入范围内,因此无法识别并加载远程PDF。

解决方案

1. 先下载再打印(唯一可行路径)

不管使用gsprint还是直接用Ghostscript,都需要先把远程PDF下载到本地。你可以优化Python下载代码,添加请求头解决403问题(很多网站会拦截无浏览器标识的请求):

import requests
import os

url = 'https://www.nceas.ucsb.edu/sites/default/files/2020-04/colorPaletteCheatsheet.pdf'
# 添加浏览器请求头避免403拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
r = requests.get(url, headers=headers, stream=True)
r.raise_for_status()  # 检查请求是否成功

# 保存到临时路径
local_pdf_path = 'M:/temp_print.pdf'
with open(local_pdf_path, 'wb') as f:
    for chunk in r.iter_content(chunk_size=8192):
        f.write(chunk)

# 打印完成后可删除临时文件
# os.remove(local_pdf_path)

2. 本地文件打印的正确命令

使用gsprint打印

去掉多余的-sOutputFile参数(该参数用于生成PDF文件,而非直接打印到打印机):

M:\gs\gsprint.exe -ghostscript "M:\gs\bin\gswin32.exe" -printer "Samsung C1810 Series" -from 1 -to 3 -portrait -copies 1 "M:/temp_print.pdf"

直接使用Ghostscript打印

无需依赖gsprint,直接用Ghostscript命令完成打印:

M:\gs\bin\gswin32.exe -dNOPAUSE -dBATCH -sDEVICE=mswinpr2 -sOutputFile="%printer%Samsung C1810 Series" -dFirstPage=1 -dLastPage=3 -dCopies=1 -dOrientation=Portrait "M:/temp_print.pdf"

3. Python整合下载+打印流程

可以直接在Python中调用系统命令完成全流程:

import requests
import os
import subprocess

url = 'https://www.nceas.ucsb.edu/sites/default/files/2020-04/colorPaletteCheatsheet.pdf'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
r = requests.get(url, headers=headers)
r.raise_for_status()

local_pdf = 'M:/temp_print.pdf'
with open(local_pdf, 'wb') as f:
    f.write(r.content)

# 调用gsprint执行打印
gsprint_cmd = [
    'M:\\gs\\gsprint.exe',
    '-ghostscript', 'M:\\gs\\bin\\gswin32.exe',
    '-printer', 'Samsung C1810 Series',
    '-from', '1', '-to', '3',
    '-portrait', '-copies', '1',
    local_pdf
]
subprocess.run(gsprint_cmd, check=True)

# 清理临时文件
os.remove(local_pdf)

内容的提问来源于stack exchange,提问作者pixeled

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:33:16