我想创建一个用于使用 python打印的多页 PDF 文件。我更愿意使用可以在任何环境中正常工作的库来做到这一点,所以我尝试使用matplotlib。
我可以制作所需的 A4 大小的图形,并创建一个多页的 PDF 文件,但图形艺术家缩小并且不占据整个页面。
我可以生成 A4 大小页面的 PDF 并在图形周围填充,或者生成页面尺寸较小的 PDF 文件(页面在图形周围缩小以移除填充,图形保持相同大小)。
有人可以帮忙吗?
(我不认为这是重复的,还有其他关于填充的问题,但与我的目标不同,我看不到任何对我有用的答案 - 我已经搜索了好几天!)
到目前为止,我在几个 SO 问题/答案之后尝试过的是:
bbox_inches='tight', pad_inches=0在pyplot.savefig()函数中使用,它提供了一个小于 A4 的 PDF 页面,没有填充。
(奇怪的是,这适用于 EPS 格式,它可以在 A4 纸上直接打印成实际尺寸,但我不知道如何制作多页文件。)
如果我不使用bbox_inches='tight', pad_inches=0,图形大小似乎或多或少相同,但周围的填充填充空间以制作 A4 页面。
使用fig.tight_layout(rect=[0,0,1,1])or fig.tight_layout(pad=0),它保留填充。
此示例代码以 EPS(A4 无填充)、PDF(A4 带填充)和 TIFF(无填充但尺寸较小,因此打印时有填充)生成图形:
import matplotlib.pyplot as plt
from matplotlib import gridspec
def plot_form_page():
# A4 canvas
fig_width_cm = 21 # A4 page
fig_height_cm = 29.7
inches_per_cm = 1 / 2.54 # Convert cm to inches
fig_width = fig_width_cm * inches_per_cm # width in inches
fig_height = fig_height_cm * inches_per_cm # height in inches
fig_size = [fig_width, fig_height]
plt.rc('text', usetex=False) # so that LaTeX is not needed when creating a PDF with PdfPages later on
fig = plt.figure()
fig.set_size_inches(fig_size)
fig.set_facecolor('#9999ff')
gs = gridspec.GridSpec(29, 21, wspace=0.1, hspace=0.1)
# external axis
ax0 = fig.add_subplot(gs[:, :])
# for side in ["top", "bottom", "left", "right"]:
# ax0.spines[side].set_visible(False)
# header
ax1 = fig.add_subplot(gs[1:4, 1:4])
ax1.set_facecolor('#bbffbb')
ax2 = fig.add_subplot(gs[1:4, 4:-6])
ax2.set_facecolor('#ffbbff')
ax3 = fig.add_subplot(gs[1:4, -6:-1])
ax3.set_facecolor('#00bbff')
# form
ax4, ax5, ax6, ax7 = [fig.add_subplot(gs[ 5+(i*6):10+(i*6), 1:10]) for i in range(4)]
[ax8, ax9, ax10, ax11] = [fig.add_subplot(gs[ 5+(i*6):10+(i*6), 11:20]) for i in range(4)]
axes = [ax4, ax8, ax5, ax9, ax6, ax10, ax7, ax11]
SMILET
相关分类