标签: node-pdfkit

使用nodejs aws sdk将生成的pdf上传到AWS S3

我正在使用pdfkit生成带有一些自定义内容的pdf,然后将其发送到AWS S3存储桶.

虽然如果我作为一个整体生成文件并上传它完美地工作,但是,如果我想将生成的文件作为八位字节流流式传输,我无法找到任何相关的指针.

我正在寻找nodejs解决方案(或建议).

javascript amazon-s3 node.js node-pdfkit aws-sdk

6
推荐指数
3
解决办法
8224
查看次数

如何将图像渲染为pdf(画布和pdfkit)

我在nodejs上有一个函数,可以从许多图像中生成图像,然后从中生成pdf文件。我只尝试一张图片,但我需要添加更多图片,但这似乎不起作用

function HelperHandler() {
  this.pdf = function(req, res, next) {
    var doc = new PDFDocument;
    mergeImages(function(err, image) {
      if (err)
        return res.json(err);

      doc.image(image, 100, 100);
      doc.output(function(string) {
        res.contentType = "application/pdf";
        res.send(string);
      });
    })
  }
}

var mergeImages = function(callback) {
  var Canvas = require("canvas")
    , fs     = require("fs");

  fs.readFile(global.root_path + "/images/bg.jpg", function(err, data) {
    if (err)
      callback("error loading image");
    else {
      var canvas = new Canvas(408, 939)
        , img    = new Canvas.Image(data);
      ctx = canvas.getContext("2d");
      img.onload = function() {
        ctx.drawImage(img, …
Run Code Online (Sandbox Code Playgroud)

canvas cairo node.js node-canvas node-pdfkit

5
推荐指数
1
解决办法
7480
查看次数

nodejs pdfkit将动态生成的PDF附加到电子邮件(Mandrill-API)

我正在使用PDFKit和NodeJS动态生成PDF文档,我想将所述文档附加到电子邮件中.此刻我正在通过NPM使用Mandril-API.

我可以毫无问题地生成PDF并通过以下方式在浏览器中显示:

doc.pipe(res);

我可以毫无问题地发送电子邮件,但我在获取正确的PDF内容方面失败了.我相当肯定我99%的方式 - 但我错过了一些东西.我已经使用Google/StackOverflow等进行了大量的阅读和测试,但我陷入困境.

我得到的内容是,当我进行base64解码时,我得到:

%PDF-1.3%7 0 obj <</Predictor 15

我设法让我的PDF附件的有效大小为445KB,但这是电子邮件的内容:

--_ av-Ti-H6i8tBBHL4BgoXnyC2Q内容类型:application/pdf Content-Transfer-Encoding:base64 Content-Disposition:attachment; 文件名= "mytestPDF.pdf"

PDF1370obj/Predictor15/COLORS1/BitsPerComponent8/Columns100e ndobj60obj /类型/ x对象/亚型/图像/ BitsPerComponent8/WIDT H100/Height19 /过滤/ FlateDecode/DecodeParms70R/ColorSpace中/ I ndexed/DeviceRGB25580R/Length1751streamxdSSNEhGIRTRkWbY/nHaO MJln7t + vv89ylF111PlYNB9Nm6e9DENsd9FxLFUbOjrgt + ErRgWtj9vPCTBH oohMHl9oZ7IdpC/hxusjTHFFMcxhwIxPlbNorOB + bH8exrrA1DUnzKzq/UXI xT456nxtB59fQNiIrBT2apETJZieZvltpeThrObiZ4ydtY0koKJ2Epb940A1 iXyehONQVXiZr8jRP/NJ3bmjHA0sygAou4Q =

虽然我已经搞砸了几个小时,但我最好的预感是我的PDF内容中有换行/换行错误.我获取PDF内容的方法是创建一个名为buffers的数组,然后:doc.on('data',buffers.push.bind(buffers));

我想我需要添加/ n或/ r等...但我已经和NodeJS和AngularJS一起工作了一个月左右,而且我知道几乎所有我做错了是因为我结束了 - 使问题变得复杂......所以我向大家求助,并希望有一种简单的方法可以将我使用PDFKit创建的新PDF文档中的内容附加到使用NodeJS的电子邮件中.

提前谢谢你......请原谅我的漫无边际,但我大约8小时前开始这个(现在是我的时间凌晨3:25).:)

javascript email node.js node-pdfkit

5
推荐指数
1
解决办法
2077
查看次数

在node.js中使用pdfkit渲染任何语言的文本

我正在使用 pdfkit 在 nodewebkit 应用程序中动态生成 PDF 文档。PDF 包含通过 HTTP 请求来自远程源的人们的评论。

\n\n

它工作得很好,但是现在我发现当评论是日语、中文、阿拉伯语等时,它无法正确呈现,而且我无法知道评论将以什么语言出现\xe2\x80 \x94事实上,我正在从世界各地收集它们。

\n\n

我知道我需要使用正确的字体,其中应该包含正确的字符,如此处所述。我发现这个“google noto”开放字体拥有一切,但问题是没有一个包含所有语言的 TTF 文件,而且也不可能存在,因为字体文件仅限于 65K 字形。

\n\n

我正在尝试找到一种解决方案,可以使用 pdfkit 以(几乎)任何语言呈现 PDF 中的文本,而无需编写复杂的语言识别工具,我认为这有点过分了。

\n\n

任何想法和建议将不胜感激。

\n\n

更新:使用pdfkit 作者的font-manager来替换字体。另外你可能想尝试 phantomJS\xe2\x80\x94 但我还没有这样做。如果您遇到同样的问题,请参阅评论中 @levi 的详细回复。希望能帮助到你。

\n

javascript pdf encoding node.js node-pdfkit

5
推荐指数
1
解决办法
3346
查看次数

NodeJS pdfkit文本宽度

我正在尝试使用节点的 pdfkit 制作 PDF,但遇到一些与文本宽度相关的问题。

我想要的结果是这样的。

Overall comments:              This is the comment 
                               that will display here bla bla
                               extra text here 
Run Code Online (Sandbox Code Playgroud)

但我当前的代码得到的是这样的

Overall comments:              This is the comment
that will display here blab bla extra text here
Run Code Online (Sandbox Code Playgroud)

为了编写这段文字,我使用以下代码:

doc.font('Courier-Bold').text(padRight('Overall Comments:',28),{continued: true});
doc.font('Courier').text(audit.comment,{width: 100,align: 'justify'});
Run Code Online (Sandbox Code Playgroud)

其中audit.comment是右侧的文本,padRight返回固定大小为28的字符串,在右侧添加空格。

它似乎忽略了宽度选项或者我不知道如何使用它。

node.js node-pdfkit

5
推荐指数
1
解决办法
2163
查看次数

在 Node.js 中生成带条形码的 pdf

我正在使用https://github.com/devongovett/pdfkit生成 PDF 文件,我可以简单地使用类似

app.get('/get-pdf', (req, res) => {
  const doc = new PDFDocument();
  const filename = 'my_pdf.pdf';

  res.setHeader('Content-disposition', 'attachment; filename="' + filename + '"');
  res.setHeader('Content-type', 'application/pdf');

  const content = "Some content";

  doc.y = 300;
  doc.text(content, 50, 50);
  doc.pipe(res);
  doc.end();
});
Run Code Online (Sandbox Code Playgroud)

但我也想生成一个 UPC-A 条形码:

在此处输入图片说明

我找到了库https://github.com/lindell/JsBarcode,它可以仅从 12 位代码生成这样的条形码。但是,该库似乎主要用于客户端。

我想用这样的条形码生成一个 PDF,但我不知道该怎么做,或者 JsBarcode 对于这种单一类型的条形码来说是否太复杂。

编辑

正如评论中所建议的,我确实尝试使用 UPC-A 字体生成条形码:

app.get('/get-pdf', (req, res) => {
  const doc = new PDFDocument();
  const filename = 'my_pdf.pdf';

  res.setHeader('Content-disposition', 'attachment; filename="' + filename + '"');
  res.setHeader('Content-type', …
Run Code Online (Sandbox Code Playgroud)

javascript pdf barcode node.js node-pdfkit

5
推荐指数
1
解决办法
6742
查看次数

如何在 webpack 中使用 PDFkit 库?

我想以编程方式打印一些 pdf 文档。我现在正在努力使这个 PDFkit 库与 webpack 一起工作。

我已经走了形式:

Can't resolve 'fs' in ..

fs.readFileSync is not a function

然后到警告

[BABEL] Note: The code generator has deoptimised the styling of "E:/MyProjects/accountingsystem/node_modules/brotli/dec/dictionary-da
ta.js" as it exceeds the max of "500KB".
Run Code Online (Sandbox Code Playgroud)

然后到

require is not defined- 我被困在这里了。所有这些错误都是在库本身中形成的。

我只有一个文件 - app.js,只有一行代码,它是:

const PDFDocument = require('pdfkit');

我的最终webpack.config.js看起来是这样的:

module.exports = {
// devtool: 'source-map',

entry: './src/app.js',
output: {
    path: path.resolve (__dirname, "dist"),
    filename: "bundle.js"
}, …
Run Code Online (Sandbox Code Playgroud)

node-pdfkit webpack

5
推荐指数
1
解决办法
4180
查看次数

如何将图像从 URL 写入 PDFkit?

我使用 node.js 请求从 URL 获取 JPEG。然后我将图像转换为 base64 缓冲区并将其写入 pdf 文档:

request({ url: url, encoding: null }, function (error, response, body) {
                        if (!error && response.statusCode == 200) {
                            var img = new Buffer(body, 'base64');
                            pdf.image(img, 0, 0);
                            callback(error, body);
                        }
                    });
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: stream.push() after EOF
    at readableAddChunk (_stream_readable.js:156:17)
    at PDFDocument.Readable.push (_stream_readable.js:134:10)
    at PDFDocument._write (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/document.js:156:12)
    at PDFReference.finalize (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/reference.js:81:21)
    at PDFReference.finalize (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/reference.js:10:59)
    at PDFReference.end (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/reference.js:74:21)
    at JPEG.embed (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/image/jpeg.js:68:16)
    at PDFDocument.image (/Users/assafshamia/Freebird/node/utils/report_generator/node_modules/pdfkit/js/mixins/images.js:34:15)
    at addImage …
Run Code Online (Sandbox Code Playgroud)

javascript pdfkit node.js node-pdfkit

5
推荐指数
2
解决办法
6939
查看次数

Node PDFKit pipe to multiple targets

I'm having a problem, when I have to pipe() the created document to multiple targets, in my case to a HTTP response and to an email attachment using node-mailer. After the first use in an attachment to an email, nothing gets piped to a response (when calling it from the client, the PDF has 0 bytes).

Response controller:

const doc = await createPdf(course.name, lastRecordDate, ctx);   

// Send a notificiation email with attachment
if (query.hasOwnProperty('sendEmail') && query.sendEmail === 'true') { …
Run Code Online (Sandbox Code Playgroud)

pdf node.js nodemailer node-pdfkit node-streams

5
推荐指数
1
解决办法
53
查看次数

ExpressJS 和 PDFKit - 在内存中生成 PDF 并发送到客户端以供下载

在我的api路由器中,有一个名为的函数generatePDF,旨在使用 PDFKit 模块在内存中生成 PDF 文件并发送到客户端进行下载,而不是仅显示。

api.js

var express = require('express');
var router = express.Router();

const PDFDocument = require('pdfkit');

router.get('/generatePDF', async function(req, res, next) {
    var myDoc = new PDFDocument({bufferPages: true});
    myDoc.pipe(res);
    myDoc.font('Times-Roman')
         .fontSize(12)
         .text(`this is a test text`);
    myDoc.end();
    res.writeHead(200, {
        'Content-Type': 'application/pdf',
        'Content-disposition': 'attachment;filename=test.pdf',
        'Content-Length': 1111
    });
    res.send( myDoc.toString('base64'));
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

这不起作用。错误信息是(node:11444) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

我怎样才能解决问题并让它发挥作用?

另外,一个相关的问题是如何将 PDF 生成的业务逻辑与路由器分开并将它们链接起来?

javascript node.js express node-pdfkit

5
推荐指数
2
解决办法
7599
查看次数