Articles of node pdfkit

如何以asynchronous方式使用pdfkit npm

我已经在node.js编写了一个应用程序,该应用程序从用户接收input并基于less量模板生成pdf文件。 我正在使用pdfkit npm来达到这个目的。 我的应用程序正在生产中运行。 但是我的申请很慢,下面是原因: 我面临什么问题: 它以同步的方式工作。 我可以通过给出一个例子来解释它 – 假设一个请求来到应用程序生成一个PDF,正在开始处理,并在处理后返回与生成的PDF url的响应。 但是,如果有多个请求到达服务器,它将逐个处理每个请求(以同步的方式)。 队列中的所有请求必须等待,直到前一个完成。 我的应用程序给出超时或内部服务器错误的最长时间。 我无法改变图书馆,为什么? 我已经在js中为pdfkit写了40个模板。 而每个模板是1000 – 3000行。 如果我将更改库,我必须根据新库重写这些模板。 要花好几个月的时间才能正确地重写和testing。 现在我正在使用什么解决scheme: 我现在正在pipe理一个队列,一旦请求到来,它就排队等候,并回复一个令人满意的消息回应用户。 为什么这个解决scheme不可行? 用户在成功申请时应提供有效的pdfurl。 但是在队列方式中,用户只能得到确认消息。 而PDF正在稍后处理队列中。 我正在寻求什么样的解决scheme? 任何方式,我可以使这个应用程序multithreading/asynchronous,以便它将能够处理多个请求,而不会阻止资源? 请救我一命。

从ExpressJS下载PDF(PDFKit)到AngularJS

使用: var doc = new PDFDocument(); doc.pipe(res); doc.text('Add content here'); doc.end(); 在Express GET路线中,我可以在浏览器中导航并查看PDF。 一旦查看,可以保存或打印。 这很好,但我需要的是PDF自动下载。 应用程序将发送一个PUT到Express。 从一个PUT ,是否有可能也自动下载PDF? Angular需要一个200响应来将控制权交还给Angular和用户,但是PDF也需要下载。 我试过res.end(new Buffer(doc), 'binary) , res.send(new Buffer(doc, 'binary'))等,但无法获得PDF下载。 如果我无法返回200并从PUT下载PDF,那么我的回退是PUT ,一旦返回,就会打开一个窗口,打开GETpath查看PDF。 那种哈克,所以我真的更喜欢下载。 选项?

如何将图像从请求pipe道到node.js中的pdfkit?

首先,我对JavaScript和Node.js都是一个新手,所以如果我的问题是愚蠢的,那么对不起。 我试图从网站上刮掉文本和图像,并使用请求,cheerio和pdfkit将其导出为pdf,但是我遇到了问题。 我能够刮这些图像,并保存在本地使用这个: var $ = cheerio.load(body); $("#mediatab1 img").each(function(){ var image= 'http://WWW.WEBSITE.no' + $(this).attr('src'); images.push(image); }); for(var i = 0; i < images.length; i++){ request(images[i]).pipe(fs.createWriteStream('images/' + i + '.jpg')); } 但! 这是问题: 1.意图:当我尝试使用PDF文件写入文件 doc.image('images/0.jpg'); 我所得到的就是 Error: Unknown image format. at Function.PDFImage.open (C:\nodejs\node_modules\pdfkit\js\im age.js:41:15) at PDFDocument.module.exports.image (C:\nodejs\node_modules\pd fkit\js\mixins\images.js:27:26) at Request._callback (C:\nodejs\prosjekt.js:29:6) at Request.self.callback (C:\nodejs\node_modules\request\reque st.js:344:22) at […]

将PDFKit的文件名设置为HTTP响应

我如何设置pdfKit创buildPDF文件的文件名,通过HTTP发送(而不是本地保存)。 以下不设置文件名,decs只显示如何设置本地保存的文件名。 var doc = new PDFDocument({bufferPages: true}); doc.info.Title = 'Case ' + req.params.id + ' overview'; // Some more content here doc.pipe(res); 我试过设置标题,但似乎没有帮助。 res.setHeader('Content-disposition', 'attachment; filename=testFile.pdf');

NodeJS&pdfkit – 如何合并两个pdf

我正在尝试使用node和pdfkit合并两个pdf文件在一个pdf中。 但是,我只能得到两个空白页的pdf。 看起来像addContent被完全忽略,或者我使用它不正确(最有可能)。 这里是代码: var express = require('express'); var app = express(); var PDFDocument = require('pdfkit'); var fs = require('fs'); app.set('port', (process.env.PORT || 5000)); app.use(express.static(__dirname + '/public')); // views is directory for all template files app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.get('/', function(request, response) { response.render('pages/index'); }); app.get('/merge', function(request, response) { var doc = […]

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

我有一个nodejs的function,从许多图像生成一个图像,然后从中生成一个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) { […]

如何用节点js使用pdfkitpipe道stream

在PDFkit 0.5之前 – 以下工作(通过pdfkit生成pdf /通过ipp打印到CUPS): var ipp = require("ipp"); var PDFDocument = require("pdfkit"); var doc = new PDFDocument; doc.text("Hello World"); doc.output(function(pdf)){ var printer = ipp.Printer("http://127.0.0.1:631/printers/1"); var file = { "operation-attributes-tag":{ "requesting-user-name": "User", "job-name": "Print Job", "document-format": "application/pdf" }, data: new Buffer(pdf, "binary") }; printer.execute("Print-Job", file, function (err, res) { console.log("Printed: "+res.statusCode); }); } 从PDFkit 0.5开始 […]

pdfkit中的HTML表格(Expressjs-Nodejs)

我正在使用pdfkit生成PDF文件,我想发送这个PDF文件到浏览器。 我的下面的代码工作正常,我得到一个文本的PDF。 其实下面的代码是样本生成PDF使用pdfkit在nodejs,但现在我想创buildHTML表。 最新的代码 var PDFDocument = require('pdfkit'); var fs=require('fs'); doc = new PDFDocument(); doc.pipe( fs.createWriteStream('out.pdf') ); doc.moveTo(300, 75) .lineTo(373, 301) .lineTo(181, 161) .lineTo(419, 161) .lineTo(227, 301) .fill('red', 'even-odd'); var loremIpsum = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam in…'; doc.y = 320; doc.fillColor('black') doc.text(loremIpsum, { paragraphGap: 10, indent: 20, align: 'justify', columns: […]

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

我正在使用PDFKit和NodeJSdynamic生成PDF文档,并且我想将所述文档附加到电子邮件中。 在这一刻,我通过NPM使用了Mandril-API。 我可以生成没有问题的PDF,并通过浏览器显示它: doc.pipe(res); 我可以发送电子邮件没有问题,但我已经无法获得正确的PDF内容失败。 我相当肯定,我是99%的方式 – 但我失去了一些东西。 我已经做了大量的阅读和testing使用谷歌/ StackOverflow等,但我卡住了。 我得到的内容是,当我做一个base64解码我得到: %PDF-1.3%7 0 obj << /预测15 我已经设法让我的PDF附件有一个445KB的有效大小,但这是电子邮件的内容: –_ av-Ti-H6i8tBBHL4BgoXnyC2Q Content-Type:application / pdf Content-Transfer-Encoding:base64 Content-Disposition:attachment; 文件名= “mytestPDF.pdf” PDF1370obj / Predictor15 / COLORS1 / BitsPerComponent8 / Columns100e ndobj60obj /types/ x对象/亚型/图像/ BitsPerComponent8 / WIDT H100 / Height19 /过滤/ FlateDecode / DecodeParms70R / ColorSpace中/ I ndexed / DeviceRGB25580R / […]

使用pdfkit时,我可以在同一段中混合字体大小吗?

我试图find一种方法来使用粗体字体重在pdfkit中的内联重点 不幸的是,我不能find一种方法来改变字体,而不强制换行(坏的内联强调…)。 我正在尝试像这样的东西: pdf.text('Hello ', LEFT, 200).font(bold).text('World!'); 但是这会输出 你好 世界 我也通过源头挖掘,但找不到任何选项来防止这种情况。 任何人有任何想法或解决方法来解决这个问题? 编辑 : 我现在所能想出的只是一个丑陋的黑客,看起来像这样: pdf.text('Hello ', LEFT, 200).moveUp(1).font(bold).text('World!', {indent: pdf.widthOfString('Hello ')}); 这是工作,但远没有灵活性和可维护性。