我有一个服务器(NodeJS类型脚本),它以JSON格式创建标签数据.每个标签都有一个唯一的ID,它包含各种细节,如发货信息、重量、条形码等.以下是JSON struct 的示例:

{
    "{{unique-id}}": [
        {
            "shipment_details": {
                "from": {
                    "company": "company Inc",
                    "address": "address",
                    "country": "country"
                },
                "to": {
                    "company": "company",
                    "address": "address",
                    "country": "country"
                }
            },
            "weight": "31",
            "cz": "CZ002205",
            "created": "Created: 2023/09/05 01:21 PDT (-07)",
            "barcode": "barcode",
            "sku": "sku-IMP",
            "quantity": 20
        }
    ]
}

我已经创建了一个使用SCSS样式的组件模板(Reactjs TypeScrip)来表示标签. 现在,我想在客户端生成一个PDF文件,将该模板表示为可读文本(而不是嵌入的图像).

与模板,我想发挥和使一个标签每页或6个标签每页,所以组件也应该调整大小和适合.

‏我听说过像jsPDFamp;react-pdf这样的库,但我不确定如何继续,特别是保留SCSS的样式并确保内容在PDF中保持为文本.

‏有没有人有解决方案或方法将这个样式的Html模板转换成文本可读的PDF?

谢谢你提前!

Here example of the label. enter image description here

推荐答案

最后,我能够使用react-pdfbwipjs库创建我想要的标签. 最大的问题是我如何在PDF中写入条形码,我发现在bwipjs的帮助下,可以生成并将其转换为画布,然后在PDF中作为图像,然后在import { StyleSheet } from "@react-pdf/renderer";的帮助下 您可以设计元素并将它们放在所需的位置.

下面是一个小代码示例.

import { Document, Page, Text, View, Image, StyleSheet } from '@react-pdf/renderer';

const styles = StyleSheet.create({
  labelContainer: {
    // Define container styles
  },
  text: {
    // Define text styles
  },
  // Define styles for other elements
});

function RenderLabel({ labelData }) {
  return (
    <Document>
      <Page>
        <View style={styles.labelContainer}>
          {/* Render text elements */}
          <Text style={styles.text}>{labelData.shipment_details.from.company}</Text>
          {/* Insert barcode images */}
          <Image src={barcodeImageData} />
          {/* Add other elements as needed */}
        </View>
      </Page>
    </Document>
  );
}

这里是如何生成条形码,然后画布和返回dataUrl

import bwipjs from 'bwip-js';

async function generateBarcodeDataURL(options) {
  return new Promise((resolve) => {
    bwipjs.toCanvas('myCanvas', options, (info, canvas) => {
      resolve(canvas.toDataURL('image/png'));
    });
  });
}

Node.js相关问答推荐

NX无法使用缓存运行根级脚本

使用HTTPS从NodeJS 17.9.1升级到18.0.0后,SignalR连接失败

如何在.npmrc中添加 comments ?

无法从MongoDB文档中保存的对象数组中获取对象的属性

Sass-TypeError:无法读取未定义的属性(正在读取';indexOf';)

如何发送比特币BTC使用发送加密使用WIF密钥在 node ,js

遇到 - TypeError:try 使用 Express(Node.js) 从 JSON 文件访问数据时无法读取未定义的属性(读取帖子)

几个 lambda 共有的函数

处理嵌套元素时,使用xml2js库解析XML时发生错误

Cypress.io - 如何等待返回调用属性的方法的结果?

Jest - SyntaxError: 不能在@nestjs/axios 的模块外使用 import 语句

Next.js 在我的电脑上没有构建错误,但它们在使用 Vercel 部署时发生

node-gyp: "..\src\binding.cc: 没有这样的文件或目录"

使用react 组件加载特定 DIV 而无需重新加载整个页面

无法更新MongoDB中的文档:";伯森场';writeConcern.w';是错误的类型';数组'&引用;

如何在 mongoDB 中用值 0 填充缺失的文档?

搜索MongoDB条目的正确方法是'_id';在 node 中

为什么 Node 控制台不显示功能代码?

nodejs:Ajax 与 Socket.IO,优缺点

避免在弹性 beantalk 中重建 node_modules