通过管道传递参数

通过管道传递参数

问题描述:

场景:我通过几个.md文件迭代,首先在HTML,然后PDF转换它们。 我需要我的管道(pdf之一)上的文件路径,但我不知道该怎么做。通过管道传递参数

编辑:

  1. 我不需要,因为它们是通过管道输送到重命名文件。
  2. 我想获得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; 
     })); 
+0

你试图得到什么文件名的一部分?我假设你正试图返回它的一部分来为该文件提供一个目录 - 这是gulp.dest中的一个函数。看看'路径'插件https://nodejs.org/api/path.html#path_path_basename_path_ext它使这些事情更容易处理。例如,path.basename(fileName,'.pdf')可能是你正在寻找的东西,但我不确定你想要完成什么,多一点信息会有帮助。 – Mark

+0

path.basename(file.path,' .pdf')是正确的 - 你不需要substr的东西,你需要var path = require('path')才能正常工作 – Mark

+0

嘿@Mark!我需要它提供pdf的文件路径方法,它将被gulp-html-pdf模块用作生成的pdf的标题页。无论如何,对于substr提示;) – Dyd666

从你的代码,它看起来像你正试图重命名这些文件,因为它们是由HTML通过管道输送到PDF格式。

如果是这种情况,那么gulp-rename包几乎可以肯定你在做什么。

编辑

吞气,HTML,PDF格式不支持的文件通过文件的选项,因此无法直接使用它。

您可以使用gulp-each和html-pdf软件包在gulp-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')); 
}); 
+1

嗨!不,不需要重命名文件。我只想得到处理过的文件的路径,并将其输入到'pdf'方法中;) – Dyd666

+0

对不起,看到你编辑的答案太晚了。我会试试看,谢谢! – Dyd666

+0

像魅力一样工作,谢谢! – Dyd666