我正在尝试打开一个.pdf
在特定的指定目的地使用ShellExecute()
,但我不知道参数应该如何格式化。我这里使用的参数是pagew
.
以前有人尝试过这个吗?我找到了几个答案,但它们对我的需要没有帮助。
PS:只打开.pdf
工作正常。
int main()
{
std::string url = "\"C:/Users/asura/Downloads/asuras.pdf\"";
std::wstring stemp = std::wstring(url.begin(), url.end());
LPCWSTR sw = stemp.c_str();
std::string action = "open";
std::wstring atemp = std::wstring(action.begin(), action.end());
LPCWSTR actiont = atemp.c_str();
//1 INTRODUCTION
string strPageDestination = "/A \"page=52\" \"pdf\"";
std::wstring pagetemp = std::wstring(strPageDestination.begin(), strPageDestination.end());
LPCWSTR pagew = pagetemp.c_str();
//The line below works fine, it opens pdf with default pdf opener at first page.
//ShellExecute(NULL, actiont, sw, NULL, NULL, SW_SHOWNORMAL);
//The line below attempting to open file at specific page number doesn't work
ShellExecute(NULL, actiont, sw, pagew, NULL, SW_SHOWNORMAL);
return 0;
}
在评论中,您指出:
我使用 Adobe Acrobat Reader DC 作为默认查看器。
根据此 Acrobat 文档 https://pdfobject.com/pdf/pdf_open_parameters_acro8.pdf(以及我发现的其他人喜欢的):
您可以使用命令或 URL 打开 PDF 文档,该命令或 URL 准确指定要显示的内容(指定的目标或特定页面)以及如何显示它(使用特定视图、滚动条、书签、注释或突出显示等特征)。
大多数浏览器都支持 URL 参数,并且可以在以编程方式打开 PDF 文档时使用。
其中许多参数可以传递给以下核心 API 函数(有关详细信息,请参阅 Acrobat 和 PDF 库 API 参考):
AVDocOpenFromFileWithParamString AVDocOpenFromFileWithParamString
AVDocOpenFromASFileWithParamString
AVDocOpenFromPDDocWithParamString
从命令 shell 打开 PDF 文档时,您可以使用以下命令将参数传递给打开命令:/A
使用以下语法进行切换:
<Acrobat path> /A "<parameter>=<value>" "<PDF path>"
例如:
Acrobat.exe /A "zoom=1000" "C:\example.pdf"
在 Mac OS 中,您可以在通过 Apple 事件打开 PDF 文档时使用这些参数。
我安装了 Adobe Acrobat Reader DC,并通过查看它在 Windows 注册表中的注册方式,使用ShellExecute("open")
只需一个.pdf
文件路径WILL NOT能够生成 Acrobat 使用时所需的上述命令语法/A
范围。你传递给什么并不重要lpParameters
的参数ShellExecute()
,它将被 Acrobat 忽略。
所以,在我看来,你有两个选择:
您可以在单个 URL 中指定多个参数。使用与号 (&) 或井号 (#) 字符分隔每个参数。操作按照 URL 中显示的顺序从左到右进行处理和执行。
由于所有指定的操作都会执行,因此后面的操作可能会覆盖先前操作的效果,因此使用正确的顺序很重要。例如,页面操作应出现在缩放操作之前。
除指定目标的值外,命令不区分大小写。 URL 中不能有空格。
网址示例
...
http://example.org/doc.pdf#page=3
...
我没有尝试过使用 URL,但这种方法可能需要您运行本地 HTTP 服务器,或者至少使用file:
url,以便打开本地.pdf
通过 URL 的文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)