本文摘要(由AI生成):
文章主要介绍了两种解决pdz格式用虚拟打印机转换pdf文件出现空白页的方法。第一种方法是使用XPS打印,将pdz文件转换为xps文件,再将xps文件转换为pdf文件。第二种方法是使用按键精灵软件进行自动化保存图片,将pdz文件转换为bmp文件,再将bmp文件转换为pdf文件。文章还介绍了如何使用FastStone_Image_Viewer软件进行批量重命名和批量转换,以及如何使用Python进行图片合并处理。
本期过冷水会给大家分享最最最实用的解决pdz格式用虚拟打印机转换pdf文件方法出现空白页,另外一种pdz转换pdf的方法。
过冷水一直有在超星学习通上搜索资料的习惯,很多实用的中文教材书籍都能够在这上面找到,是非常实用的网址,http://erya.mooc.chaoxing.com/

前段时间遇到了一个很简单的问题,超星上下载的书籍是pdz格式的,只能用超星阅读器打开,需要转成pdf。
正常情况下用阅读器看也还好,如果有打印需求就有点麻烦,需要转成pdf。所以网上就有大量的关于pdz转pdf的方法总结,过冷水尝试了常见方法,发现有弊端,为了和大家一起避雷,就总结出来了最最最合理实用的转换教程。
1 pdz→xps→pdf
该方法是网上流传最广的方法,过冷水刚开始也是实用该方法进行pdf转换,具体实现方法是:
在阅读器中打开一本书,单击鼠标左键选择打印:

选择打印页数:

选择XPS打印,然后将其保存成xps格式的文件


打开生成的.xps文件,重复上述操作,打印保存,不同的是这次选择pdf打印,保存的自然就是pdf文件。

这个方案是网上搜索出来最多的方法。当时过冷水一直有一个疑问,为什么要选择.xps文件文件作为中间文件,而不能直接生成pdf文件?过冷水尝试过很多次都失败了。参看搜索了很多,很多案例都终于找到解决办法。
打印的时候可以选择pdf虚拟打印机,可是需要对虚拟打印机改名字,比如154,如果不改名字,超星是不能识别打印保存的 。

上述方法很实用。可是有一天过冷水发现该方法失效了,它不能做到全文打印,一本书数前几页可以打印,后面的都是空白。

常见方法行不通了,需要摸索新方法

这是网上流传的另外一种方法,首先说明该方法不实用。过冷水当时是拒绝安装虚拟打印机的,可是又没有办法,于是只能用安装了,可是安装好后还是不可以。

这个方法也是行不通的,出来后也是白页很多。过冷水总结发现其实是超星对虚拟打印的方法有可能有限制,没有办法成功保存文档。经过大量摸索过冷水测试出来了第二种绝对绝对有效的方法.
2 pdz→bmp→pdf 不使用虚拟打印机
所需要的全部文件由于仿真秀附件大小限制,已经全部上传至仿真秀QQ群文件。

首先用超星阅读器打开我们需要的文章,选择合适的大小(影响文件清晰度)、选择连续页模式:

然后使用按键精灵软件进行自动化保存图片

这里需要在按键精灵中建立一个固定脚本(亲测可用)。

//纯后台代码,挂着就行,不影响鼠标键盘使用
//F5启动调试
//F10运行,你将在【超星阅读器】内看到文档在不断向下滚动
//F12停止
//
Hwnd = Plugin.Window.Find("ssReader", 0)
//
TracePrint Hwnd
//
Call Plugin.Bkgnd.LeftClick(Hwnd,0,0)
//
Do
//
Call Plugin.Bkgnd.KeyPress(Hwnd, 40)
//
Delay 1
Loop
你就会发现在C:\Users\当前登录的windows账户名\AppData\Local\Temp\buffer 会有一系列图片。我们这个时候就完成了 内容转图片的过程,接下来就是 bmp→pdf

这个时候需要再使用一个软件FastStone_Image_Viewer,用于实现pdf的转换。

Ctrl A全选,任意图上右键->工具:

先做一次【批量重命名】,再做一次【批量转换】(bmp转pdf)




至此我们完成了bmp→pdf的过程。可是我们不可能一个一个文件打开看啊!还需做合并处理,在此过冷水推荐使用python做图片合并处理。这里需要说明一下因为生成的pdfw文件名排序有问题,不能一次性合并,合并后1_2文件会排在1_19后面,这样就会乱,所以需要分开合并
1-9页合并程序
import PyPDF2
import os
pdfFiles=[]
for filename in os.listdir('.'):
if filename.endswith('.pdf'):
pdfFiles.append(filename)
#pdfFiles.sort(key=str.lower)
pdfWriter=PyPDF2.PdfFileWriter()
for filename in pdfFiles:
pdfFileobj=open(filename,'rb')
pdfReader=PyPDF2.PdfFileReader(pdfFileobj)
for pageNum in range(0,pdfReader.numPages):
pageobj=pdfReader.getPage(pageNum)
pdfWriter.addPage(pageobj)
pdfout=open('1.pdf','wb')
pdfWriter.write(pdfout)
pdfout.close()
10-186页合并
import PyPDF2
import os
pdfFiles=[]
for filename in os.listdir('.'):
if filename.endswith('.pdf'):
pdfFiles.append(filename)
#pdfFiles.sort(key=str.lower)
pdfWriter=PyPDF2.PdfFileWriter()
for filename in pdfFiles:
pdfFileobj=open(filename,'rb')
pdfReader=PyPDF2.PdfFileReader(pdfFileobj)
for pageNum in range(0,pdfReader.numPages):
pageobj=pdfReader.getPage(pageNum)
pdfWriter.addPage(pageobj)
pdfout=open('2.pdf','wb')
pdfWriter.write(pdfout)
pdfout.close()
完整合并程序
import PyPDF2
import os
pdfFiles=[]
for filename in os.listdir('.'):
if filename.endswith('.pdf'):
pdfFiles.append(filename)
#pdfFiles.sort(key=str.lower)
pdfWriter=PyPDF2.PdfFileWriter()
for filename in pdfFiles:
pdfFileobj=open(filename,'rb')
pdfReader=PyPDF2.PdfFileReader(pdfFileobj)
for pageNum in range(0,pdfReader.numPages):
pageobj=pdfReader.getPage(pageNum)
pdfWriter.addPage(pageobj)
pdfout=open('当世界还小.pdf','wb')
pdfWriter.write(pdfout)
pdfout.close()

过冷水尝试了无数遍才实现该方法的完整转换,想在有可能有很多人有和我同样的困惑,特整理出该教程为大家提供方便。有实际需求的可以尝试。