diff --git a/manifest-beta.json b/manifest-beta.json index b1d23df1..6c495530 100644 --- a/manifest-beta.json +++ b/manifest-beta.json @@ -1,7 +1,7 @@ { "id": "obsidian-excalidraw-plugin", "name": "Excalidraw", - "version": "2.8.0-beta-4", + "version": "2.8.0-beta-5", "minAppVersion": "1.1.6", "description": "An Obsidian plugin to edit and view Excalidraw drawings", "author": "Zsolt Viczian", diff --git a/src/lang/locale/en.ts b/src/lang/locale/en.ts index 6250150d..39a9dbdf 100644 --- a/src/lang/locale/en.ts +++ b/src/lang/locale/en.ts @@ -1050,12 +1050,12 @@ FILENAME_HEAD: "Filename", EXPORTDIALOG_ORIENTATION_LANDSCAPE: "Landscape", EXPORTDIALOG_PDF_FIT_TO_PAGE: "Page Fitting", EXPORTDIALOG_PDF_FIT_OPTION: "Fit to page", - EXPORTDIALOG_PDF_FIT_2_OPTION: "Fit to 2-pages", - EXPORTDIALOG_PDF_FIT_4_OPTION: "Fit to 4-pages", - EXPORTDIALOG_PDF_FIT_6_OPTION: "Fit to 6-pages", - EXPORTDIALOG_PDF_FIT_8_OPTION: "Fit to 8-pages", - EXPORTDIALOG_PDF_FIT_12_OPTION: "Fit to 12-pages", - EXPORTDIALOG_PDF_FIT_16_OPTION: "Fit to 16-pages", + EXPORTDIALOG_PDF_FIT_2_OPTION: "Fit to max 2-pages", + EXPORTDIALOG_PDF_FIT_4_OPTION: "Fit to max 4-pages", + EXPORTDIALOG_PDF_FIT_6_OPTION: "Fit to max 6-pages", + EXPORTDIALOG_PDF_FIT_8_OPTION: "Fit to max 8-pages", + EXPORTDIALOG_PDF_FIT_12_OPTION: "Fit to max 12-pages", + EXPORTDIALOG_PDF_FIT_16_OPTION: "Fit to max 16-pages", EXPORTDIALOG_PDF_SCALE_OPTION: "Use image scale (may span multiple pages)", EXPORTDIALOG_PDF_PAPER_COLOR: "Paper Color", EXPORTDIALOG_PDF_PAPER_WHITE: "White", diff --git a/src/shared/Dialogs/SuggesterInfo.ts b/src/shared/Dialogs/SuggesterInfo.ts index 0b401fe2..9a11c6cd 100644 --- a/src/shared/Dialogs/SuggesterInfo.ts +++ b/src/shared/Dialogs/SuggesterInfo.ts @@ -226,7 +226,7 @@ export const EXCALIDRAW_AUTOMATE_INFO: SuggesterInfo[] = [ }, { field: "createPDF", - code: "async createPDF({SVG: SVGSVGElement[], scale?: PDFExportScale, pageProps?: PDFPageProperties}): Promise", + code: "async createPDF({SVG: SVGSVGElement[], scale?: PDFExportScale, pageProps?: PDFPageProperties}): Promise", desc: "", after: "Creates a PDF from the provided SVG elements with specified scaling and page properties.\n" + "\n" + @@ -241,11 +241,10 @@ export const EXCALIDRAW_AUTOMATE_INFO: SuggesterInfo[] = [ "@property {number} [zoom=1] - The zoom level for the SVG. Used only if fitToPage is false. If the SVG does not fit the page, it will be tiled over multiple pages.\n" + "\n" + "@typedef {Object} PDFPageProperties\n" + - "@property {{width: number, height: number}} [dimensions] - The dimensions of the PDF pages. Use getPageDimensions to get standard page sizes.\n" + + "@property {{width: number, height: number}} [dimensions] - The dimensions of the PDF pages in pixels. Use getPageDimensions to get standard page sizes.\n" + "@property {string} [backgroundColor] - The background color of the PDF pages.\n" + - "@property {PDFMargin} margin - The margins of the PDF pages.\n" + + "@property {PDFMargin} margin - The margins of the PDF pages in pixels.\n" + "@property {PDFPageAlignment} alignment - The alignment of the SVG on the PDF pages.\n" + - "@property {number} exportDPI - The DPI of the exported PDF (150/300/600/1200).\n" + "\n" + "@example\n" + "const pdfData = await createPDF({\n" + @@ -256,22 +255,21 @@ export const EXCALIDRAW_AUTOMATE_INFO: SuggesterInfo[] = [ " backgroundColor: \"#ffffff\",\n" + " margin: { left: 20, right: 20, top: 20, bottom: 20 },\n" + " alignment: \"center\"\n" + - " exportDPI: 300\n" + " }\n" + "});", }, { field: "getPagePDFDimensions", code: "getPagePDFDimensions(pageSize: PageSize, orientation: PageOrientation): PageDimensions", - desc: "Returns the dimensions of a standard page size in points (pt).\n" + + desc: "Returns the dimensions of a standard page size in pixels.\n" + "\n" + "@param {PageSize} pageSize - The standard page size. Possible values are \"A0\", \"A1\", \"A2\", \"A3\", \"A4\", \"A5\", \"Letter\", \"Legal\", \"Tabloid\".\n" + "@param {PageOrientation} orientation - The orientation of the page. Possible values are \"portrait\" and \"landscape\".\n" + - "@returns {PageDimensions} - An object containing the width and height of the page in points (pt).\n" + + "@returns {PageDimensions} - An object containing the width and height of the page in pixels.\n" + "\n" + "@typedef {Object} PageDimensions\n" + - "@property {number} width - The width of the page in points (pt).\n" + - "@property {number} height - The height of the page in points (pt).\n" + + "@property {number} width - The width of the page in pixels.\n" + + "@property {number} height - The height of the page in pixels.\n" + "\n" + "@typedef {\"A0\" | \"A1\" | \"A2\" | \"A3\" | \"A4\" | \"A5\" | \"Letter\" | \"Legal\" | \"Tabloid\"} PageSize\n" + "\n" + diff --git a/src/shared/ExcalidrawAutomate.ts b/src/shared/ExcalidrawAutomate.ts index 83e5c753..37cdcee3 100644 --- a/src/shared/ExcalidrawAutomate.ts +++ b/src/shared/ExcalidrawAutomate.ts @@ -932,19 +932,19 @@ export class ExcalidrawAutomate { }; /** - * Returns the dimensions of a standard page size in points (pt). + * Returns the dimensions of a standard page size in pixels. * * @param {PageSize} pageSize - The standard page size. Possible values are "A0", "A1", "A2", "A3", "A4", "A5", "Letter", "Legal", "Tabloid". * @param {PageOrientation} orientation - The orientation of the page. Possible values are "portrait" and "landscape". - * @returns {PageDimensions} - An object containing the width and height of the page in points (pt). + * @returns {PageDimensions} - An object containing the width and height of the page in pixels. * * @typedef {Object} PageDimensions - * @property {number} width - The width of the page in points (pt). - * @property {number} height - The height of the page in points (pt). + * @property {number} width - The width of the page in pixels. + * @property {number} height - The height of the page in pixels. * * @example * const dimensions = getPageDimensions("A4", "portrait"); - * console.log(dimensions); // { width: 595.28, height: 841.89 } + * console.log(dimensions); // { width: 794.56, height: 1122.56 } */ getPagePDFDimensions(pageSize: PageSize, orientation: PageOrientation): PageDimensions { return getPageDimensions(pageSize, orientation); @@ -964,11 +964,10 @@ export class ExcalidrawAutomate { * SVG: [svgElement1, svgElement2], * scale: { fitToPage: 1 }, * pageProps: { - * dimensions: { width: 595.28, height: 841.89 }, + * dimensions: { width: 794.56, height: 1122.56 }, * backgroundColor: "#ffffff", * margin: { left: 20, right: 20, top: 20, bottom: 20 }, * alignment: "center", - * exportDPI: 300, * } * }); */ diff --git a/src/utils/exportUtils.ts b/src/utils/exportUtils.ts index 07e0768f..0c670845 100644 --- a/src/utils/exportUtils.ts +++ b/src/utils/exportUtils.ts @@ -33,21 +33,24 @@ export interface PageDimensions { export type PageOrientation = "portrait" | "landscape"; -// All dimensions in points (pt) +// All dimensions in pixels (pt) export const STANDARD_PAGE_SIZES = { - "A0": { width: 2383.94, height: 3370.39 }, - "A1": { width: 1683.78, height: 2383.94 }, - "A2": { width: 1190.55, height: 1683.78 }, - "A3": { width: 841.89, height: 1190.55 }, - "A4": { width: 595.28, height: 841.89 }, - "A5": { width: 419.53, height: 595.28 }, - "Letter": { width: 612, height: 792 }, - "Legal": { width: 612, height: 1008 }, - "Tabloid": { width: 792, height: 1224 }, + A0: { width: 3179.52, height: 4494.96 }, // 33.11 × 46.81 inches + A1: { width: 2245.76, height: 3179.52 }, // 23.39 × 33.11 inches + A2: { width: 1587.76, height: 2245.76 }, // 16.54 × 23.39 inches + A3: { width: 1122.56, height: 1587.76 }, // 11.69 × 16.54 inches + A4: { width: 794.56, height: 1122.56 }, // 8.27 × 11.69 inches + A5: { width: 559.37, height: 794.56 }, // 5.83 × 8.27 inches + A6: { width: 397.28, height: 559.37 }, // 4.13 × 5.83 inches + Legal: { width: 816, height: 1344 }, // 8.5 × 14 inches + Letter: { width: 816, height: 1056 }, // 8.5 × 11 inches + Tabloid: { width: 1056, height: 1632 }, // 11 × 17 inches + Ledger: { width: 1632, height: 1056 } // 17 × 11 inches } as const; export type PageSize = keyof typeof STANDARD_PAGE_SIZES; +//margins are in pixels export function getMarginValue(margin:PDFPageMarginString): PDFMargin { switch(margin) { case "none": return { left: 0, right: 0, top: 0, bottom: 0 }; @@ -389,9 +392,9 @@ export async function exportToPDF({ clonedSVG.setAttribute('viewBox', tile.viewBox); clonedSVG.style.width = `${tile.width}px`; clonedSVG.style.height = `${tile.height}px`; - clonedSVG.style.position = 'relative'; + clonedSVG.style.position = 'absolute'; clonedSVG.style.left = `${tile.x}px`; - clonedSVG.style.top = `${tile.y}px`; + clonedSVG.style.top = `${tile.y + (i-1)*height}px`; pageDiv.appendChild(clonedSVG); allPagesDiv.appendChild(pageDiv);