4
我有一個模板PDF文件,我想替換一些標記字符串以生成新的PDF文件並保存它們。什麼是最好/最簡單的方法來做到這一點?我不需要添加圖形或任何幻想,只需簡單的文本替換,所以我不想要任何複雜的東西。如何使用NodeJS替換PDF文件中的字符串?
謝謝!
編輯:剛剛找到HummusJS,我會看看我能否取得進展並在此發佈。
我有一個模板PDF文件,我想替換一些標記字符串以生成新的PDF文件並保存它們。什麼是最好/最簡單的方法來做到這一點?我不需要添加圖形或任何幻想,只需簡單的文本替換,所以我不想要任何複雜的東西。如何使用NodeJS替換PDF文件中的字符串?
謝謝!
編輯:剛剛找到HummusJS,我會看看我能否取得進展並在此發佈。
我通過搜索發現了這個問題,所以我認爲它應該得到答案。我在這裏找到了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');
嗨有曼努埃爾!你找到解決方案嗎? – Fredefl
我也很好奇.. –