我试图在MATLAB中生成一个棋盘图案,当它打印在美国字母大小的纸上时,每个盒子的宽度将为30毫米。
我试图更改gcf
的各种属性,如'Units'
和'PaperSize'
等,但PDF没有按要求打印。
我遇到了其他几种在线方法来生成我需要的东西,但我想在MATLAB中生成一种。有什么想法吗?下面是示例代码。
width = 30;
I = checkerboard(width,5,4);
I = I>0.5;
imshow(I);
saveas(gcf,'checkerboard.pdf')
Matlab只能根据像素生成宽度,因为Matlab不知道屏幕的物理尺寸。
一种方法是找到屏幕的每英寸像素(PPI(。这是一个通过屏幕尺寸和分辨率计算PPI的网站。然后我们可以计算出width
(30mm的像素(=PPI*1.1811。(1.1811英寸等于30毫米(
例如,对于PPI=220(15.4英寸,2880*1800(的屏幕,width=220*1.1811=260
。
有些图形属性以'Paper'
开头,用于指定打印(PDF或打印机(时图形在纸张上的大小和位置。以下是所有地物特性的列表。您可以在"打印和导出"标题下找到这些属性(请参阅左窗格中的目录(。
我们可以按如下方式使用这些属性。请注意,我们不关心屏幕上图形的大小,所以我们将其保留为默认大小。我们所做的是设置'PaperPosition'
属性,使图形在打印时具有一定的大小。然后,我们创建一个填充图形的棋盘图案的图形。因此,该图形在打印时将具有图形本身的大小。
请注意,我们如何将'PaperSize'
属性设置为英寸(8.5"x 11"是美国字母(,但将'PaperPosition'
属性设置为厘米(这样我们就可以很容易地计算出要绘制的3x3厘米正方形(。
图纸本身可能会被简化,但这是可行的。当打印到PDF时,使用补丁绘制图案(即创建矢量绘制(比使用图像(即OP中的checkerboard
函数(要高效得多。输出更漂亮,文件更小。但是显示图像也是一样的。
% Grid size (number of squares)
m = 6; n = 8;
% Square size (in centimeters)
side = 3;
% Create figure and set sizes for printing
figh = figure;
set(figh,'PaperUnits','inches','PaperSize',[8.5 11]);
set(figh,'PaperUnits','centimeters','PaperPosition',[1,1,side*m,side*n]);
% Create axes that fill the figure
axh = axes('Parent',figh,'Units','normalized','Position',[0,0,1,1]);
set(axh,'Color',[1,1,1])
set(axh.XAxis,'Visible','off');
set(axh.YAxis,'Visible','off');
% Draw rectangles
set(axh,'XLim',[0,m],'YLim',[0,n]);
for ii=0:m
for jj=0:n
if mod(ii+jj,2)==0
rectangle('Position',[ii,jj,1,1],'FaceColor',[0,0,0],'LineStyle','none');
end
end
end
% Print to PDF
print(figh,'-dpdf','checkerboard.pdf')