pdf转word/text后换行问题
pdf转为word/text,或者从pdf复制一段文字,这段文字有很多换行(其实就相当于一行一段):
野史里说,楚汉争霸时期,高祖刘邦大败。 薄氏还是个姑娘的时候叫薄姬,逃难的时候占领了一个 无人居住的民宅。忽然有一天看见一个浑身是血,穿着盔甲 拿着兵器的男人闯进了自己的屋子,这个人就是刘邦。 薄姬听到后面有追兵,就把刘邦的盔甲和兵器藏了起 34 来。然后放了一大桶洗澡水。 这个只是野史,可信度不高,但是说明了薄氏的低微出 身。
于是,简单处理了下:
void pdfnewlineremove::onBtnProcessClicked()
{
const QString newLine("\r\n");
// mFileAbsPaths: 选择的多个待处理文件
for (int i = 0; i < mFileAbsPaths.size(); i++) {
QString filePath = mFileAbsPaths.at(i);
qDebug() << "filePath: " << filePath;
QFileInfo fInfo(filePath);
QString fName = fInfo.baseName();
qDebug() << "fName: " << fName;
QString newFilePath(filePath);
// 创建转换后的文件
newFilePath.replace(fName, fName + "_new");
qDebug() << "newFilePath: " << newFilePath;
QFile newFile(newFilePath);
if (!newFile.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) {
MsgBoxUtil::warning(this, tr("无法创建新文件!"));
return;
}
// 原文件编码:"utf-8",Windows换行(\r\n)
QTextStream out(&newFile);
out.setCodec("utf-8");
// process
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
MsgBoxUtil::warning(this, tr("无法创建新文件!"));
return;
}
QTextStream in(&file);
in.setCodec("utf-8");
bool isNewLine = true;
while (!in.atEnd()) {
QString line = in.readLine();
if (line.isEmpty()) { // 空行
continue;
}
// 页码
QRegExp re("\\d*");
if (re.exactMatch(line)) {
qDebug() << "page: " << line;
continue;
}
if (isNewLine && ui->checkBoxToHtml->isChecked()) {
out << "<p>";
isNewLine = false;
}
out << line;
// 核心逻辑:如果某一行以“。”、“?”……等结尾,认为一段结束
// 可进一步完善
if (line.endsWith("。") || line.endsWith("?") || line.endsWith("!") ||
line.endsWith("」") || line.endsWith("”") ||
line.endsWith(".") || line.endsWith("?") ||
line.endsWith("!") || line.endsWith("\"")) {
if (ui->checkBoxToHtml->isChecked()) {
out << "</p>";
}
out << newLine;
isNewLine = true;
}
}
file.close();
newFile.close();
}
MsgBoxUtil::information(this, "转换完成!");
}

作为制作电子书的我来说,勉强够用了。效果:
<p>野史里说,楚汉争霸时期,高祖刘邦大败。</p> <p>薄氏还是个姑娘的时候叫薄姬,逃难的时候占领了一个无人居住的民宅。忽然有一天看见一个浑身是血,穿着盔甲拿着兵器的男人闯进了自己的屋子,这个人就是刘邦。</p> <p>薄姬听到后面有追兵,就把刘邦的盔甲和兵器藏了起来。然后放了一大桶洗澡水。</p> <p>这个只是野史,可信度不高,但是说明了薄氏的低微出身。</p>
https://github.com/RockyChing/qt_play/blob/main/qt_project/epub/pdfnewlineremove.cpp
浙公网安备 33010602011771号