Prints at true scale. Set printer margins to "None" or "Default" and scale to 100%.
(function(){
var state = { type:"square", size:"a4", space:5, color:"#9fb9dd", weight:0.4 };
var SIZES = { a4:{w:210,h:297,css:"A4"}, letter:{w:215.9,h:279.4,css:"letter"} };
var svg = document.getElementById("gp-sheet");
function seg(id, key){
var box = document.getElementById(id);
box.addEventListener("click", function(e){
var b = e.target.closest("button"); if(!b) return;
box.querySelectorAll("button").forEach(function(x){ x.setAttribute("aria-pressed","false"); });
b.setAttribute("aria-pressed","true");
state[key] = b.dataset.v; render();
});
}
seg("gp-type","type"); seg("gp-size","size"); seg("gp-color","color");
function slider(id, key, valId, unit){
var el = document.getElementById(id);
el.addEventListener("input", function(){
state[key] = parseFloat(el.value);
document.getElementById(valId).textContent = el.value + " " + unit;
render();
});
}
slider("gp-space","space","gp-space-val","mm");
slider("gp-weight","weight","gp-weight-val","mm");
function build(){
var p = SIZES[state.size], w = p.w, h = p.h, s = state.space, m = 10;
var cols = Math.floor((w - 2*m)/s), rows = Math.floor((h - 2*m)/s);
var x0 = (w - cols*s)/2, y0 = (h - rows*s)/2, parts = [], i;
if(state.type === "square"){
for(i=0;i<=cols;i++) parts.push('');
for(i=0;i<=rows;i++) parts.push('');
return frame(w,h,''+parts.join("")+'');
}
if(state.type === "dot"){
var r = Math.max(state.weight*0.9, 0.25), j;
for(i=0;i<=cols;i++) for(j=0;j<=rows;j++)
parts.push('');
return frame(w,h,''+parts.join("")+'');
}
var y = 25, mside = 15;
while(y < h - 15){ parts.push(''); y += s; }
return frame(w,h,''+parts.join("")+''
+ '');
}
function frame(w,h,inner){
return { w:w, h:h, markup:''
+ '' + inner + '' };
}
function render(){
var b = build();
svg.setAttribute("viewBox","0 0 "+b.w+" "+b.h);
svg.setAttribute("width","340");
svg.innerHTML = b.markup.replace(/^]*>/,"").replace(/$/,"");
}
document.getElementById("gp-print").addEventListener("click", function(){
var b = build(), css = SIZES[state.size].css;
var win = window.open("", "_blank");
if(!win) return;
win.document.write('Print'
+ '@page{size:'+css+';margin:0}html,body{margin:0;padding:0}svg{display:block}'
+ ''+b.markup+'');
win.document.close();
win.focus();
setTimeout(function(){ win.print(); }, 250);
});
document.getElementById("gp-svg").addEventListener("click", function(){
var b = build();
var blob = new Blob([b.markup], {type:"image/svg+xml"});
var a = document.createElement("a");
a.href = URL.createObjectURL(blob);
a.download = state.type + "-paper-" + state.space + "mm-" + state.size + ".svg";
a.click();
URL.revokeObjectURL(a.href);
});
render();
})();
Need graph paper right now? Use the generator above to create exactly the sheet you want — square grid, dot grid, or lined paper — in A4 or US Letter, with any spacing from 2 mm to 25 mm. Everything prints at true scale, so a 5 mm grid really is 5 mm on paper. Prefer a ready-made sheet? Download one of the free PDF templates below. No signup, no watermark walls, just paper you can print.
Free graph paper PDF downloads
Every file below is a vector PDF sized for its paper format, so lines stay sharp at any printer resolution. Print at 100% — not “fit to page” — to keep the spacing accurate.
5 mm and 1/4 inch are the general-purpose sizes for maths homework, engineering sketches and bullet journals. 1 cm and 1/2 inch give bigger squares for graphs with few data points, handwriting practice, or younger students. College ruled (about 7 mm line spacing) fits more lines per page than wide ruled (about 8.7 mm), which is easier for larger handwriting.
Printing tips
In your printer dialog set scaling to 100% or “Actual size”. Browsers and PDF viewers often default to shrinking the page slightly to fit the printable margin, which throws the grid off by a few percent. If your printer cannot print edge to edge, that small white border is normal and does not affect the spacing.
Help us improve these free printables
May we use Google Analytics cookies to measure visits and download clicks? Your choice does not affect downloads. We do not collect completed form details. Privacy policy