从 Electron 应用程序生成 PDF 不适用于其他计算机

问题描述 投票:0回答:1

我有一个 Electron 应用程序,可以在我的机器上完美运行。有一个打印按钮可以生成 PDF,我显然可以打印它。 这是我的相关代码:

ipcMain.on('generate-pdf', async (event, data) => {
  const pdfDoc = await PDFDocument.create();
  const page = pdfDoc.addPage([600, 400]);
  const { width, height } = page.getSize();

  page.drawText(`Name: ${data.name}`, { x: 50, y: height - 50, size: 20, color: rgb(0, 0, 0) });
  page.drawText(`Birth Year: ${data.birthYear}`, { x: 50, y: height - 80, size: 20, color: rgb(0, 0, 0) });
  page.drawText(`City: ${data.city}`, { x: 50, y: height - 110, size: 20, color: rgb(0, 0, 0) });
  page.drawText(`Items: ${data.items}`, { x: 50, y: height - 140, size: 20, color: rgb(0, 0, 0) });
  page.drawText(`Chars: ${data.chars}`, { x: 50, y: height - 170, size: 20, color: rgb(0, 0, 0) });
  page.drawText(`Optional: ${data.optional}`, { x: 50, y: height - 200, size: 20, color: rgb(0, 0, 0) });

  const pngImageBytes = fs.readFileSync(path.join(__dirname, 'assets', 'logo.png'));
  const pngImage = await pdfDoc.embedPng(pngImageBytes);
  const pngDims = pngImage.scale(0.5);
  page.drawImage(pngImage, {
    x: width / 2 - pngDims.width / 2,
    y: height / 2 - pngDims.height / 2,
    width: pngDims.width,
    height: pngDims.height,
    opacity: 0.3,
  });

  const pdfBytes = await pdfDoc.save();

  const outputDir = path.join(__dirname, 'output');
  if (!fs.existsSync(outputDir)) {
    fs.mkdirSync(outputDir);
  }
  const outputPath = path.join(outputDir, 'output.pdf');
  fs.writeFileSync(outputPath, pdfBytes);

  const { shell } = require('electron');
  shell.openPath(outputPath);
});

我运行了

npm run dist
,在其他计算机上安装了应用程序,并认为一切都会以同样的方式工作。除了 PDF 生成器之外,它确实如此。当我单击应用程序中的“打印”按钮时,没有任何反应,它不会像在我的计算机上那样打开它。 我怎样才能解决这个问题?是因为我的代码还是其他计算机上的问题?

javascript electron
1个回答
0
投票

我认为你需要准确说明错误是什么。建议你补充一下

try {
  // Your existing code here
} catch (error) {
  console.error('Error generating PDF:', error);
  event.reply('generate-pdf-error', `Error generating PDF: ${error.message}`);
}

它会返回一个有效的错误,你可以有更好的理解。

© www.soinside.com 2019 - 2024. All rights reserved.