Я работаю с node.js и обрабатываю некоторые файлы RTF (которые начинались как PDF-файлы). Конкретная проблема, с которой я столкнулся, связана с открытием файлов RTF, удалением некоторых «нежелательных» частей и последующей записью в несколько файлов.
Я пытаюсь удалить лишнюю разметку, такую как | - и другие символы, которые использовались для форматирования документа. Я хотел бы текст (который происходит на японском языке), ничего больше.
Вот проблема, с которой я столкнулся. В исходном файле RTF выглядит следующим образом (просто образец):
\f2\fs24 \
\pard\pardeftab720\sl235\slmult1\partightenfactor0
\f0\fs20 \cf0 \'a1\'a1
\f2\fs24 \
\pard\pardeftab720\sl-2\partightenfactor0
\f1 \cf0 \
\pard\pardeftab720\ri5880\sl253\slmult1\partightenfactor0
Я могу удалить нежелательных персонажей прямо сейчас. Однако при записи в новый файл возникает одна очень специфическая проблема:
\f2\fs24
\\pard\pardeftab720\sl235\slmult1\partightenfactor0\f0\fs20
\cf0 \'a1\'a1\f2\fs24 \\pard\pardeftab720\sl-2\partightenfactor0\f1
\cf0
\\pard\pardeftab720\ri5880\sl253\slmult1\partightenfactor0\f0\fs19
\cf0
Проблема с
\\pard
части. Двойное «\\» означает, что слово «pard» отображается в файле RTF в качестве вывода. Я пытался использовать .replace с регулярным выражением, но проблема, кажется, с фактическим написанием. Независимо от того, что я делаю, когда он записывает в файл, я получаю «\ pard» вместо «\ pard».
Вот код, который у меня есть на данный момент:
const fs = require('fs');
const readline = require('readline');
let rtf = './sample.rtf';
let regex = /\?\\\'a3\\\'ad|\\\'a3\\\'ad|\?\\\'a9\\\'d3|\\\'a9\\\'d3|\?\\u9487|\\u9487|\\uc0\\u9491|\?\?\\u9475|\?\\u9473|\\u9473|\?\\u9474|\\u9474|\?\\u9475|\\u9475|\?\\u9472|\\u9472|\\\'a9\\\'cc|\\\'a9\\\'d0|\\\'a9\\\'cf|\\\'a9\\\'e3|\\\'a9\\'c7|\\'a9\\\'c4|\?\\u9473|\\u9473|\?\\u9487|\\u9487|\\\'a9\\\'c4\\\'a9\\\'e0|\\uc0\\u9491|\\\'a9\\\'e0|\\\'a9\\\'c0/gi;
let readStream = fs.createReadStream('sample.rtf');
let writeStream = fs.createWriteStream(`${rtf}-clean.rtf`);
const rl = readline.createInterface({
input: readStream,
output: writeStream,
crlfDelay: Infinity
});
rl.on("line", ((line) => {
line = line.replace(regex, "");
writeStream.write(line);
}));
rl.on("close", (() => {
console.log('done');
}))
Если у кого-то есть какие-либо предложения или идеи, я был бы признателен.