2016-04-21 40 views
4

我有一个模板PDF文件,我想替换一些标记字符串以生成新的PDF文件并保存它们。什么是最好/最简单的方法来做到这一点?我不需要添加图形或任何幻想,只需简单的文本替换,所以我不想要任何复杂的东西。如何使用NodeJS替换PDF文件中的字符串?

谢谢!

编辑:刚刚找到HummusJS,我会看看我能否取得进展并在此发布。

+0

嗨有曼努埃尔!你找到解决方案吗? – Fredefl

+0

我也很好奇.. –

回答

2

我通过搜索发现了这个问题,所以我认为它应该得到答案。我在这里找到了BrighTide的答案:https://github.com/galkahana/HummusJS/issues/71#issuecomment-275956347

基本上,有这个非常强大的Hummus软件包,它使用C++编写的库(当然是跨平台的)。我认为在该github评论中给出的答案可以这样功能化:

var hummus = require('hummus'); 

function replaceText(sourceFile, targetFile, pageNumber, findText, replaceText) { 
     var writer = hummus.createWriterToModify(sourceFile, { 
      modifiedFilePath: targetFile 
     }); 
     var modifier = new hummus.PDFPageModifier(writer, pageNumber); 
     var sourceParser = writer.createPDFCopyingContextForModifiedFile().getSourceDocumentParser(); 
     var pageObject = sourceParser.parsePage(pageNumber); 
     var textObjectId = pageObject.getDictionary().toJSObject().Contents.getObjectID(); 
     var textStream = sourceParser.queryDictionaryObject(pageObject.getDictionary(), 'Contents'); 
     //read the original block of text data 
     var data = []; 
     var readStream = sourceParser.startReadingFromStream(textStream); 
     while(readStream.notEnded()){ 
      Array.prototype.push.apply(data, readStream.read(10000)); 
     } 
     var string = new Buffer(data).toString().replace(findText, replaceText); 

     //Create and write our new text object 
     var objectsContext = writer.getObjectsContext(); 
     objectsContext.startModifiedIndirectObject(textObjectId); 

     var stream = objectsContext.startUnfilteredPDFStream(); 
     stream.getWriteStream().write(strToByteArray(string)); 
     objectsContext.endPDFStream(stream); 

     objectsContext.endIndirectObject(); 

     writer.end(); 
} 

// replaceText('source.pdf', 'output.pdf', 0, /REPLACEME/g, 'My New Custom Text'); 
相关问题