通过管道传递参数
Pass params through pipes
场景:我正在遍历几个 .md
文件,首先在 HTML
中转换它们,然后在 PDF
中转换它们。
我需要一个管道(pdf
管道)上的文件路径,但我不知道该怎么做。
编辑:
- 我不需要重命名文件,因为它们通过管道传输。
- 我想获取
pdf
管道上已处理文件的文件路径,
因为我想在那个管道中使用它(如代码所示)。
var pdf= require('gulp-html-pdf');
return gulp.src(path.join(config.ROOT, '**/docs/**/*.md'))
// doing stuff...
.pipe(gulp.dest(function(file) {
return file.base;
}))
// Converting it to PDF
.pipe(
// i need the file path here, in order to use it for the PDF options
pdf({
"format": "A4",
"border": {
"top": "0cm", // default is 0, units: mm, cm, in, px
"right": "2.5cm",
"bottom": "0cm",
"left": "2.5cm"
},
"header": {
"height": "3cm",
"contents": '<header style="text-align: center;">' + FILE PATH + '</header>'
},
"footer": {
"height": "3cm",
"contents": '<footer style="height:3cm; text-align:right; padding-top:1cm">Page: {{page}}</span>/<span>{{pages}}</footer>'
},
"phantomArgs": []
}))
// Saving PDF
.pipe(gulp.dest(function(file) {
var fileName = file.path.substr(file.path.lastIndexOf('docs\') + 5);
console.log("...creating ", fileName);
return file.base;
}));
从您的代码来看,您似乎在尝试重命名文件,因为它们通过管道从 HTML 传输到 pdf。
如果是这种情况,那么 gulp-rename 包几乎可以肯定是您所追求的。
编辑
gulp-html-pdf 不支持逐个文件选项,因此无法直接使用。
您可以使用 gulp-each 和 gulp-html-pdf 中使用的 html-pdf 包来推出您自己的解决方案。像这样的东西应该能让你到达那里:
var gulp = require('gulp')
var each = require('gulp-each')
var pdf = require('html-pdf')
var rename = require('gulp-rename')
gulp.task('toPDF', function() {
return gulp.src('*.html')
.pipe(each(function(content, file, callback) {
// path name is:
var path = file.path
// create pdf with options and convert back to buffer
pdf.create(content, {/* file by file options*/})
.toBuffer(function (err,buffer){
if(err){
//pass error back
callback(err, null)
}
// return the buffer
callback(null, buffer);
})
}))
// change file extention
.pipe(rename( function (path) { path.extname = '.pdf'}))
.pipe(gulp.dest('output'));
});
场景:我正在遍历几个 .md
文件,首先在 HTML
中转换它们,然后在 PDF
中转换它们。
我需要一个管道(pdf
管道)上的文件路径,但我不知道该怎么做。
编辑:
- 我不需要重命名文件,因为它们通过管道传输。
- 我想获取
pdf
管道上已处理文件的文件路径, 因为我想在那个管道中使用它(如代码所示)。
var pdf= require('gulp-html-pdf');
return gulp.src(path.join(config.ROOT, '**/docs/**/*.md'))
// doing stuff...
.pipe(gulp.dest(function(file) {
return file.base;
}))
// Converting it to PDF
.pipe(
// i need the file path here, in order to use it for the PDF options
pdf({
"format": "A4",
"border": {
"top": "0cm", // default is 0, units: mm, cm, in, px
"right": "2.5cm",
"bottom": "0cm",
"left": "2.5cm"
},
"header": {
"height": "3cm",
"contents": '<header style="text-align: center;">' + FILE PATH + '</header>'
},
"footer": {
"height": "3cm",
"contents": '<footer style="height:3cm; text-align:right; padding-top:1cm">Page: {{page}}</span>/<span>{{pages}}</footer>'
},
"phantomArgs": []
}))
// Saving PDF
.pipe(gulp.dest(function(file) {
var fileName = file.path.substr(file.path.lastIndexOf('docs\') + 5);
console.log("...creating ", fileName);
return file.base;
}));
从您的代码来看,您似乎在尝试重命名文件,因为它们通过管道从 HTML 传输到 pdf。
如果是这种情况,那么 gulp-rename 包几乎可以肯定是您所追求的。
编辑
gulp-html-pdf 不支持逐个文件选项,因此无法直接使用。
您可以使用 gulp-each 和 gulp-html-pdf 中使用的 html-pdf 包来推出您自己的解决方案。像这样的东西应该能让你到达那里:
var gulp = require('gulp')
var each = require('gulp-each')
var pdf = require('html-pdf')
var rename = require('gulp-rename')
gulp.task('toPDF', function() {
return gulp.src('*.html')
.pipe(each(function(content, file, callback) {
// path name is:
var path = file.path
// create pdf with options and convert back to buffer
pdf.create(content, {/* file by file options*/})
.toBuffer(function (err,buffer){
if(err){
//pass error back
callback(err, null)
}
// return the buffer
callback(null, buffer);
})
}))
// change file extention
.pipe(rename( function (path) { path.extname = '.pdf'}))
.pipe(gulp.dest('output'));
});