我有一个pdf文件,当我在记事本++中打开时,需要进行一些小调整。 如果我手动完成,它可以正常工作。 我想在一个小的c ++程序中完成它。 我尝试做的是读取二进制流,并在运行时调整内容。 例如:
std::ofstream outputStream(output,std::ofstream::out | std::ofstream::trunc | std::ofstream::binary);
std::ifstream inputStream( input, std::ofstream::in | std::ifstream::binary);
for(std::string stringInput; getline(inputStream,stringInput); )
{
if (stringInput.find("abc") != std::string::npos && stringInput.find("#1") != std::string::npos)
stringInput.replace(....);
outputStream << stringInput << endl;
stringInput.clear()
}
然而,它永远不会匹配。它在那里。不知道为什么。 我对二进制文件/ io方法做错了吗? 这是正确的方法吗? 当我尝试读取文本文件时,它没有写新行,除了字符之外它无法处理。我不确定为什么坚韧
答案 0 :(得分:2)
您不希望在不包含行的文件上使用getline
。一方面,它会使行结尾变得僵硬,这使得结果难以理解。
答案 1 :(得分:2)
获取一个PDF库,为您完成所有复杂的工作。
PDF文件格式非常复杂,您无法在一年或更短时间内正确实施。其他人在这方面做了很多好的工作,所以你应该相信他们。
查找将PDF文件作为标记列表读取的PDF库。您的代码应如下所示:
PdfInputStream in("input.pdf");
PdfOutputStream out("out.pdf");
PdfToken token;
while (in >> token) {
if (token.isText()) {
token.replaceText("abc", "#1");
}
out << token;
}