SumatraPDF 文档 https://www.sumatrapdfreader.org/docs/Command-line-arguments ⽆边框 noscale/缩⼩到合适⼤⼩(默认)shrink/合适⼤⼩ fit/compat 兼容 # 分为 Portrait (纵向)和 Landscape (横向)两类 https://github.com/sumatrapdfreader/sumatrapdf
# 如果打印的内容超出了打印纸,可以先用 pypdf 库 编辑pdf文件,给每一页四周加长,相当于加了一个边框,再打印时,自适应就不会内容超出
def SumatraPDF():
from pypdf import PdfReader
import subprocess
bit_number = platform.architecture()[0] # 判断电脑是32位还是64位
if bit_number == '64bit':# 不用安装
other_printer = './SumatraPDF64.exe'
else:
other_printer = './SumatraPDF32.exe'
pdf_file1 = './81160747558912_1.pdf'
cprinter = 'xxxx' # 打印机名称
# 判断打印方向
reader = PdfReader(pdf_file1)
page0 = reader.pages[0]
width = page0.mediabox.width
height = page0.mediabox.height
if int(width) > int(height):
scale = 'landscape' # 横向
elif int(width) <= int(height):
scale = 'portrait'
writer = PdfWriter()
for page_idx in range(len(reader.pages)):
page = reader.pages[page_idx]
mb = page.mediabox
if (mb.upper_right[0] > mb.upper_right[1]) and (page.get('/Rotate') is None):
print('需要旋转')
scale = 'portrait'
page.rotate(90)
page.mediabox = RectangleObject((page.mediabox.left - 16, page.mediabox.bottom - 20, page.mediabox.right + 16, page.mediabox.top + 18))
page.cropbox = RectangleObject((page.cropbox.left - 16, page.cropbox.bottom - 20, page.cropbox.right + 16, page.cropbox.top + 18))
writer.add_page(page)
out_file = pdffile.replace('.pdf', '') + '_1.pdf'
with open(out_file, "wb") as f:
writer.write(f)
# "fit,{scale},1-,1x"
#print-settings指定打印机参数,fit适合页面,scale 方向,1-从第一页到最后一页,lx 打印一份,2x打印2份
args1 = [f"{other_printer}",
"-silent", # 静默打印
"-print-to", #指定下一行为打印机名称
f'{cprinter}',
"-print-settings",
f"fit,{scale},1-,paper=A5,1x"
"-exit-on-print", # 打印结束自动退出
f"{out_file}" #PDF路径
]
subprocess.run(args1, encoding="utf-8", shell=True)
print(f"\t|已发送至打印机:{cprinter}")
# PDFtoPrinter for Windows 调用PDFtoPrinter打印
def PDFtoPrinter(printer_name, pdf_file, scale=, printer_number):
# 使用 PDFtoPrinter.exe 命令行打印 PDF
other_printer = '' # PDFtoPrinter.exe路径
param = f'FoxitReader打印参数:打印机:{printer_name},方向:{scale},数量:{printer_number},pdf文件:{pdf_file}'
dic = {}
args1 = [f"{other_printer}",
f"{pdf_file}",
f"{printer_name}",
"pages=1-", # 从第一页到最后一页
"copies=1", # 份数
"/s" # 静默方式打印
]
try:
subprocess.run(args1, encoding="utf-8", shell=True)
print(f"\t|PDFtoPrinter 已发送至打印机:{printer_name}")
dic['success'] = True
except:
dic['success'] = False
return dic