delphi AcroPDFLib_TLB,PDF操作问题,给分给分给分啊

lizjf 2018-09-07 09:18:59
调用的ADOBE的ActiveX得到pas文件,然后调用其中的TAcroPDF类,但是一直不能show不出PDF文件,下面的是我的调用语句
procedure TForm1.Button1Click(Sender: TObject);
var
AcroPDF1: TAcroPDF;
begin
AcroPDF1:= TAcroPDF.Create(nil);
AcroPDF1.LoadFile('D:\1.PDF');
AcroPDF1.show;
end;
...全文
1176 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你动态创建,要先设置一下:
AcroPDF1 := TAcroPDF.Create(nil);
AcroPDF1.Parent := Self; // Form1
AcroPDF1.Left := ...;
AcroPDF1.Top := ...;
AcroPDF1.Width := ...;
AcroPDF1.Height := ...;
AcroPDF1.LoadFile('...');
AcroPDF1.printWithDialog;
lizjf 2018-09-13
  • 打赏
  • 举报
回复
引用 20 楼 早打大打打核战争 的回复:
你动态创建,要先设置一下:
AcroPDF1 := TAcroPDF.Create(nil);
AcroPDF1.Parent := Self; // Form1
AcroPDF1.Left := ...;
AcroPDF1.Top := ...;
AcroPDF1.Width := ...;
AcroPDF1.Height := ...;
AcroPDF1.LoadFile('...');
AcroPDF1.printWithDialog;
感谢!
  • 打赏
  • 举报
回复
就这么两句:
procedure TForm1.Button1Click(Sender: TObject);
begin
AcroPDF1.LoadFile('C:\Users\admin\Documents\test1.pdf');
AcroPDF1.printWithDialog;
end;
实测程序编译为32位正常运行,编译为64位程序,LoadFile是成功的(返回为true),但是没有显示,printWithDialog也没有显示,估计它的UI部分是写在一个单独的32位DLL中。
lizjf 2018-09-12
  • 打赏
  • 举报
回复
引用 17 楼 DelphiGuy 的回复:
就这么两句:
procedure TForm1.Button1Click(Sender: TObject);
begin
AcroPDF1.LoadFile('C:\Users\admin\Documents\test1.pdf');
AcroPDF1.printWithDialog;
end;
实测程序编译为32位正常运行,编译为64位程序,LoadFile是成功的(返回为true),但是没有显示,printWithDialog也没有显示,估计它的UI部分是写在一个单独的32位DLL中。
AcroPDFLib_TLB是这个ActiveX单元下的TAcroPDF类吧
lizjf 2018-09-12
  • 打赏
  • 举报
回复
引用 17 楼 DelphiGuy 的回复:
就这么两句:
procedure TForm1.Button1Click(Sender: TObject);
begin
AcroPDF1.LoadFile('C:\Users\admin\Documents\test1.pdf');
AcroPDF1.printWithDialog;
end;
实测程序编译为32位正常运行,编译为64位程序,LoadFile是成功的(返回为true),但是没有显示,printWithDialog也没有显示,估计它的UI部分是写在一个单独的32位DLL中。
真的奇怪了,procedure TForm1.Button1Click(Sender: TObject);
var
AcroPDF1: TAcroPDF;
begin
AcroPDF1:= TAcroPDF.Create(nil);
AcroPDF1.LoadFile('D:\1.PDF');
//MessageDlg(AcroPDF1.GetVersions, mtWarning, [mbOK], 0);
AcroPDF1.printWithDialog;
end;也是32位,就是不能成功
  • 打赏
  • 举报
回复
我测试了一下,这个ActiveX不支持64位host程序,你需要把程序编译为32位才可以。
lizjf 2018-09-11
  • 打赏
  • 举报
回复
引用 14 楼 DelphiGuy 的回复:
10.2.1实测
方便加个QQ说嘛
  • 打赏
  • 举报
回复
10.2.1实测
lizjf 2018-09-11
  • 打赏
  • 举报
回复
引用 11 楼 DelphiGuy 的回复:
我测试了一下,这个ActiveX不支持64位host程序,你需要把程序编译为32位才可以。
我用的就是32位的啊,你用的D7吗?我用的XE10
lizjf 2018-09-11
  • 打赏
  • 举报
回复
我用的就是32位的啊,你用的D7吗?我用的XE10
lizjf 2018-09-10
  • 打赏
  • 举报
回复
引用 6 楼 DelphiGuy 的回复:
默认打印机可以直接执行:“...\AcroRd32.exe" /t xxx.pdf
...是acrobat reader安装路径
想要配置完打印机之后可以直接打印,看网上其他人直接用activeX就print(),我调用没报错,但也没什么反应
lizjf 2018-09-07
  • 打赏
  • 举报
回复
引用 1 楼 秋天之落叶 的回复:
我不知道这么复杂的方法,我的办法(Microsoft Edge是默认打开PDF文件的浏览器)
var
s: string;

s := 'E:\delphi\XXX.pdf';
ShellExecute(Handle, 'Open', PChar(s), nil, nil, SW_SHOWNORMAL);
这种办法可以做批量打印吗
秋天之落叶 2018-09-07
  • 打赏
  • 举报
回复
我不知道这么复杂的方法,我的办法(Microsoft Edge是默认打开PDF文件的浏览器)
var
s: string;

s := 'E:\delphi\XXX.pdf';
ShellExecute(Handle, 'Open', PChar(s), nil, nil, SW_SHOWNORMAL);
秋天之落叶 2018-09-07
  • 打赏
  • 举报
回复
引用 8 楼 DelphiGuy 的回复:
不可以...

很奇怪,我这样写不能运行,只能是默认打开是微软的浏览器,然后直接OPEN才行;
s1 := 'E:\delphi\delphi6实务经典.pdf';
s2 := 'C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe';
ShellExecute(Handle, 'open', PChar(s2), PChar(s1), nil, SW_SHOWNORMAL);
  • 打赏
  • 举报
回复
不可以...
秋天之落叶 2018-09-07
  • 打赏
  • 举报
回复
var
s: string;

s := 'E:\delphi\XXX.pdf';
ShellExecute(Handle, 'Print', PChar(s), nil, nil, SW_SHOWNORMAL);

难道这样可以吗?
  • 打赏
  • 举报
回复
默认打印机可以直接执行:“...\AcroRd32.exe" /t xxx.pdf
...是acrobat reader安装路径
秋天之落叶 2018-09-07
  • 打赏
  • 举报
回复
那这个方法不适合,我现在不直接打印,格式不好控制,都是先形成excel再打印,方便。
那就不好意思了,没有研究过report打印功能。
lizjf 2018-09-07
  • 打赏
  • 举报
回复
引用 3 楼 秋天之落叶 的回复:
哦,这就相当于用Edge或IE浏览器打开了一个pdf文件,可浏览可打印。
你说的批量打印不是在一个文件中吗?
我想直接默认打印机或者设置打印机以后就可以打印,不用打开操作的
秋天之落叶 2018-09-07
  • 打赏
  • 举报
回复
哦,这就相当于用Edge或IE浏览器打开了一个pdf文件,可浏览可打印。
你说的批量打印不是在一个文件中吗?

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧