我试图使用Adobe的IAC将一个文档的前2页保存为另一个文档。我创建一个AcroApp
实例,如下所示:
ACROBAT::CAcroAppPtr acApp;
HRESULT hr = acApp.CreateInstance(__uuidof(ACROBAT::AcroApp));
如果创建成功,我将按以下方式打开原始PDF:
ACROBAT::CAcroPDDocPtr pdDoc;
hr = pdDoc.CreateInstance(__uuidof(ACROBAT::AcroPDDoc));
pdDoc->Open(_bstr_t(L"source.pdf")) // so far so good it has 13 pages
如果成功的话,我将创建另一个PDDoc,如下所示
hr = outDoc.CreateInstance(__uuidof(ACROBAT::AcroPDDoc)); // returns S_OK
outDoc->Create(); // returns -1 which is good
然后,我尝试在这个新的文档中添加前2页的原始文档,如下所示:
pdDoc->InsertPages(0, outDoc, 0, 2, 1); // this returns 0 which means something went wrong
但是InsertPages
返回错误,新的PDDoc
仍然有0页。
我遗漏了什么?
我使用的是Acrobat Pro 2020
,原来的PDDoc
有13页。
我正在使用Visual Studio 2022
进行开发。
发布于 2022-05-11 16:59:24
我自己发现了问题。
InsertPages
的第一个参数是0,对于空文档,它应该是-1。而不是用索引-1在页面后面插入新页。我认为,如果我们想在现有文档的开头添加页面,这个值应该仍然是-1。
另外,我假设我们必须告诉原始文档,从x位置开始,将n个页插入到新创建的文档中,这是错误的。正确的方法是告诉新创建的文档从原始文档开始插入n个从x位置开始的页面数。所以正确的呼吁应该是:
outDoc->InsertPages(-1, pdDoc, 0, 2, 1);
https://stackoverflow.com/questions/72178462
复制相似问题