From 47b7ad4639c958a5d10b265c79400a00f2e237cd Mon Sep 17 00:00:00 2001 From: JK Date: Sun, 9 Nov 2025 15:49:28 +0100 Subject: [PATCH] fix: obsidian-export-better-pdf updated syntax to match latest version of node libs --- src/features/export-pdf/i18n/index.ts | 2 +- src/features/export-pdf/main.ts | 2 +- src/features/export-pdf/modal.ts | 14 +++++++------- src/features/export-pdf/pdf.ts | 19 ++++++++++++------- src/features/export-pdf/render.ts | 2 +- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/features/export-pdf/i18n/index.ts b/src/features/export-pdf/i18n/index.ts index 8cf6ce4..23d50fc 100644 --- a/src/features/export-pdf/i18n/index.ts +++ b/src/features/export-pdf/i18n/index.ts @@ -1,4 +1,4 @@ -import merge from "deepmerge"; +import * as merge from "deepmerge"; import en from "./en"; import zh from "./zh"; diff --git a/src/features/export-pdf/main.ts b/src/features/export-pdf/main.ts index 87f0d62..b8842a1 100644 --- a/src/features/export-pdf/main.ts +++ b/src/features/export-pdf/main.ts @@ -4,7 +4,7 @@ import { ExportConfigModal, type TConfig } from "./modal"; import ConfigSettingTab from "./setting"; import { traverseFolder } from "./utils"; import * as fs from "fs/promises"; -import path from "path"; +import * as path from "path"; const isDev = process.env.NODE_ENV === "development"; diff --git a/src/features/export-pdf/modal.ts b/src/features/export-pdf/modal.ts index 03861e8..dad42e6 100644 --- a/src/features/export-pdf/modal.ts +++ b/src/features/export-pdf/modal.ts @@ -1,7 +1,7 @@ import * as electron from "electron"; import * as fs from "fs/promises"; import { ButtonComponent, type FrontMatterCache, Modal, Setting, TFile, TFolder, debounce } from "obsidian"; -import path from "path"; +import * as path from "path"; import { PageSize } from "./constant"; import i18n, { type Lang } from "./i18n"; import BetterExportPdfPlugin from "./main"; @@ -11,10 +11,10 @@ import { isNumber, mm2px, px2mm, safeParseFloat, safeParseInt, traverseFolder } import Progress from "./Progress.svelte"; import { mount, unmount } from "svelte"; import pLimit from "p-limit"; -export type PageSizeType = electron.PrintToPDFOptions["pageSize"]; +export type PageSizeType = Electron.PrintToPDFOptions["pageSize"]; export interface TConfig { - pageSize: PageSizeType | "Custom"; + pageSize: string; pageWidth?: string; pageHeight?: string; @@ -55,8 +55,8 @@ export class ExportConfigModal extends Modal { callback: Callback; plugin: BetterExportPdfPlugin; file: TFile | TFolder; - preview: electron.WebviewTag; - webviews: electron.WebviewTag[]; + preview: Electron.WebViewElement; + webviews: Electron.WebViewElement[]; previewDiv: HTMLDivElement; completed: boolean; docs: DocType[]; @@ -430,7 +430,7 @@ export class ExportConfigModal extends Modal { }); }), ); - const pageSizes: (PageSizeType | "Custom")[] = [ + const pageSizes: string[] = [ "A0", "A1", "A2", @@ -449,7 +449,7 @@ export class ExportConfigModal extends Modal { .addOptions(Object.fromEntries(pageSizes.map((size) => [size, size]))) .setValue(this.config.pageSize as string) .onChange(async (value: string) => { - this.config["pageSize"] = value as PageSizeType; + this.config["pageSize"] = value; if (value == "Custom") { sizeEl.settingEl.hidden = false; } else { diff --git a/src/features/export-pdf/pdf.ts b/src/features/export-pdf/pdf.ts index d748290..1697668 100644 --- a/src/features/export-pdf/pdf.ts +++ b/src/features/export-pdf/pdf.ts @@ -1,4 +1,4 @@ -import electron, { type WebviewTag } from "electron"; +import * as electron from "electron"; import * as fs from "fs/promises"; import { type FrontMatterCache } from "obsidian"; import { PDFArray, PDFDict, PDFDocument, PDFHexString, PDFName, PDFRef, StandardFonts } from "pdf-lib"; @@ -368,7 +368,7 @@ export function setMetadata( export async function exportToPDF( outputFile: string, config: TConfig & BetterExportPdfPluginSettings, - w: WebviewTag, + w: Electron.WebViewElement, { doc, frontMatter }: DocType, ) { console.log("output pdf:", outputFile); @@ -384,7 +384,7 @@ export async function exportToPDF( if (scale > 200 || scale < 10) { scale = 100; } - const printOptions: electron.PrintToPDFOptions = { + const printOptions: any = { landscape: config?.["landscape"], printBackground: config?.["printBackground"], generateTaggedPDF: config?.["generateTaggedPDF"], @@ -434,7 +434,12 @@ export async function exportToPDF( } try { - let data = await w.printToPDF(printOptions); + let data: Uint8Array = await new Promise((resolve, reject) => { + (w as any).printToPDF(printOptions, (error: any, data: Buffer) => { + if (error) return reject(error); + resolve(data); + }); + }); data = await editPDF(data, { headings: getHeadingTree(doc), @@ -456,7 +461,7 @@ export async function exportToPDF( export async function getOutputFile(filename: string, isTimestamp?: boolean) { // @ts-ignore - const result = await electron.remote.dialog.showSaveDialog({ + const result: Electron.SaveDialogReturnValue = await electron.remote.dialog.showSaveDialog({ title: "Export to PDF", defaultPath: filename + (isTimestamp ? "-" + Date.now() : "") + ".pdf", filters: [ @@ -464,7 +469,7 @@ export async function getOutputFile(filename: string, isTimestamp?: boolean) { { name: "PDF", extensions: ["pdf"] }, ], properties: ["showOverwriteConfirmation", "createDirectory"], - }); + } as any); if (result.canceled) { return; @@ -474,7 +479,7 @@ export async function getOutputFile(filename: string, isTimestamp?: boolean) { export async function getOutputPath(filename: string, isTimestamp?: boolean) { // @ts-ignore - const result = await electron.remote.dialog.showOpenDialog({ + const result: Electron.OpenDialogReturnValue = await electron.remote.dialog.showOpenDialog({ title: "Export to PDF", defaultPath: filename, properties: ["openDirectory"], diff --git a/src/features/export-pdf/render.ts b/src/features/export-pdf/render.ts index b44ad5a..ec6d391 100644 --- a/src/features/export-pdf/render.ts +++ b/src/features/export-pdf/render.ts @@ -330,7 +330,7 @@ export function createWebview(scale = 1.25) { border: 1px solid #f2f2f2; `, ); - webview.nodeintegration = true; + webview.setAttribute("nodeintegration", "true"); return webview; }