0

我有一个 pdf 文件,当我在 notepad++ 中打开时,需要进行一些小调整。如果我手动操作,它可以正常工作。我想在一个小的 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 方法做错了吗?这是正确的方法吗?当我尝试读取文本文件时,它没有写换行符,它不能处理除字符以外的任何内容。我不知道为什么强硬

4

2 回答 2

2

您不想getline在不包含行的文件上使用。一方面,它破坏了行尾,导致结果难以理解。

于 2013-11-03T07:30:59.417 回答
1

获取为您完成所有复杂工作的 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;
}
于 2013-11-03T08:04:31.587 回答