html-pdf-adaptive
Version:
html to pdf
112 lines • 2.77 kB
JavaScript
export default (orientation = "p", unit = "mm", format = "a4") => {
const pageFormats = {
a0: [2383.94, 3370.39],
a1: [1683.78, 2383.94],
a2: [1190.55, 1683.78],
a3: [841.89, 1190.55],
a4: [595.28, 841.89],
a5: [419.53, 595.28],
a6: [297.64, 419.53],
a7: [209.76, 297.64],
a8: [147.4, 209.76],
a9: [104.88, 147.4],
a10: [73.7, 104.88],
b0: [2834.65, 4008.19],
b1: [2004.09, 2834.65],
b2: [1417.32, 2004.09],
b3: [1000.63, 1417.32],
b4: [708.66, 1000.63],
b5: [498.9, 708.66],
b6: [354.33, 498.9],
b7: [249.45, 354.33],
b8: [175.75, 249.45],
b9: [124.72, 175.75],
b10: [87.87, 124.72],
c0: [2599.37, 3676.54],
c1: [1836.85, 2599.37],
c2: [1298.27, 1836.85],
c3: [918.43, 1298.27],
c4: [649.13, 918.43],
c5: [459.21, 649.13],
c6: [323.15, 459.21],
c7: [229.61, 323.15],
c8: [161.57, 229.61],
c9: [113.39, 161.57],
c10: [79.37, 113.39],
dl: [311.81, 623.62],
letter: [612, 792],
"government-letter": [576, 756],
legal: [612, 1008],
"junior-legal": [576, 360],
ledger: [1224, 792],
tabloid: [792, 1224],
"credit-card": [153, 243]
}
let k
switch (unit) {
case "pt":
k = 1
break
case "mm":
k = 72 / 25.4
break
case "cm":
k = 72 / 2.54
break
case "in":
k = 72
break
case "px":
k = 72 / 96
break
case "pc":
k = 12
break
case "em":
k = 12
break
case "ex":
k = 6
break
default:
throw Error(`Invalid unit: ${ unit }`)
}
let pageHeight = 0,
pageWidth = 0
if (pageFormats.hasOwnProperty(format)) {
pageHeight = pageFormats[format][1] / k
pageWidth = pageFormats[format][0] / k
} else {
try {
pageHeight = format[1]
pageWidth = format[0]
} catch (err) {
throw new Error(`Invalid format: ${ format }`)
}
}
let tmp
if (orientation === "p" || orientation === "portrait") {
orientation = "p"
if (pageWidth > pageHeight) {
tmp = pageWidth
pageWidth = pageHeight
pageHeight = tmp
}
} else if (orientation === "l" || orientation === "landscape") {
orientation = "l"
if (pageHeight > pageWidth) {
tmp = pageWidth
pageWidth = pageHeight
pageHeight = tmp
}
} else {
throw Error(`Invalid orientation: ${ orientation }`)
}
return {
width: pageWidth,
height: pageHeight,
unit,
k,
orientation
}
}