2016-04-21 250 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'); 
相關問題