起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 875|回复: 15

[请求]如何使用代码将表格文档保存为pdf文件,并存入到知识中心固定目录下

[复制链接]
发表于 2009-7-24 10:41:41 | 显示全部楼层 |阅读模式
现状:
现有一表格文档,里面数据全是从数据库的table中提取出来的结构化数据,但通过一定的格式整理,preview之后,展现出来的样式类似于pdf格式,保存为pdf文件的时候,就通过第三方的软件Acrobat PDFWriter打印为pdf即可。

需求:
用户需要单击窗口上的按钮,将此表单文档直接保存为pdf文件,并将此文件保存到知识中心某个固定目录下面,文件名为固定某个表中某个字段的数值,如何实现?

测试报告.jpg

63.38 KB, 下载次数: 417

回复

使用道具 举报

 楼主| 发表于 2009-7-24 10:42:53 | 显示全部楼层
打印界面

打印.jpg

28.86 KB, 下载次数: 400

回复 支持 反对

使用道具 举报

发表于 2009-7-24 16:00:11 | 显示全部楼层
1、单击窗口上的按钮,将此表单文档直接保存为pdf文件
对于第一个问题:是用windowsAPI解决的,或是放一个TPinter的delphi组件,平台里有修改它的属性,让默认输出到PDF就行了!
2、将此文件保存到知识中心某个固定目录下面,
直接调用文档库的上传函数就可以,类似这样
引用【业务模型\协同系统\文档\文档库】
procedure TFRMDOCCENTER.UpLoadClick(Sender: TObject);
var
  lFileName, osFile, lExt: string;
  lFileAttribute: TFileAttribute;
begin
  if (edit1.Text = '') or (edit2.Text = '') or (edit3.Text = '') then
    begin
      jsDialogs.ShowMsg('请选择上文件和存储路径!', '提示:');
      exit;
    end;
  lFileAttribute := TFileAttribute.Create;
  try
    lFileAttribute.DisplayName := edit1.Text;
    lFileAttribute.Size := 0;
    lFileAttribute.CreateTime := SysUtils.Now;
    lFileAttribute.IsDirectory := false;
    lFileAttribute.IsHidden := false;
    lFileAttribute.IsSpace := false;
    lFileAttribute.LastWriteTime := SysUtils.Now;
    lFileAttribute.ValuesAsString['OSFILENAME'] := edit3.Text;

    lExt := Sysutils.ExtractFileExt(edit1.Text);
    lFileName := edit2.text + jsCommon.CreateGUIDStr + lExt;
    osFile := TUnStructureDocUtils.NewFile(Context, lFileName, lFileAttribute);
    //TDocSystem.CheckIn(Context, lFileName);
  finally
    lFileAttribute.Free;
    jsDialogs.ShowMsg(osFile, 'UpLoad:');
  end;
end;
3、文件名为固定某个表中某个字段的数值,如何实现?
这个应该在他们用的第三方组件上,导入后应该有相应的拦截修改文件名的地方!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-21 17:23:06 | 显示全部楼层
根据楼上的思路
第一步初步完成
procedure TCXPGBGCK.Button1Click(Sender: TObject);
var
  LPrinter:string;
  PrinIniFile:Tinifile;
  LStr:string;
  i:integer;
  default_prn,ptn_name:string;
  find:boolean;
begin
   //1.查找默认pdf打印机
  find:=false;
    ComboBox1.items.assign(Business.Forms.Printers.printer.printers);
    ComboBox1.Text:= Business.Forms.Printers.Printer.Printers[Business.Forms.Printers.Printer.PrinterIndex];
  default_prn:= ComboBox1.Text;
  for i:=0 to  Business.Forms.Printers.Printer.Printers.Count-1 do
     begin
     ptn_name:=Business.Forms.Printers.Printer.Printers.ToString;
     if ptn_name='Acrobat PDFWriter' then
        begin
        ComboBox1.itemindex:=i;
        ComboBox1.text:=ptn_name;
        find:=true;
        break;
        end;
     end;
  if find=false then
     begin
     dialogs.ShowMessage('提示:没有安装pdf打印程序~!');
     exit;
     end;

  //2. 打印到pdf软件
Business.Forms.Printers.Printer.PrinterIndex:=i;
CXPGXX.TCXPGGK(DocView1.Doc).DocViewCXPGXX_JYPGBG.print;
end;

效果就是,单击窗体上面的某个按钮,系统自动弹出打印窗口,并且默认选中'Acrobat PDFWriter' 打印机

01.jpg

27.7 KB, 下载次数: 377

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-21 17:27:29 | 显示全部楼层
但是,现在必须单击上图中的“确定”按钮,才能弹出以下窗口

我的需求是:系统直接保存为pdf文件,并上传到知识中心的固定目录下。我希望选中打印机保存文件都由系统后台代码自动完成,不需要用户再选择,这个不知道如何处理

002.jpg

25.55 KB, 下载次数: 367

回复 支持 反对

使用道具 举报

发表于 2009-8-21 17:41:43 | 显示全部楼层
楼主的意思是不想出现4楼的打印对话框么?
可以使用TSheetDoc的Exporter.PrintEx方法
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-24 08:29:28 | 显示全部楼层
谢谢楼上的,将打印哪一行换成“  TSheetDoc(CXPGXX.TCXPGGK(DocView1.Doc).DocViewCXPGXX_JYPGBG.Doc).Exporter.printEx(false,false);        ”即可
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-24 08:35:00 | 显示全部楼层
那请问,接下来怎么把另存PDF文件为我需要的某个名字,而不是它默认的名字呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-24 08:42:00 | 显示全部楼层
2、将此文件保存到知识中心某个固定目录下面,
直接调用文档库的上传函数就可以,类似这样
引用【业务模型\协同系统\文档\文档库】

这段代码里面 edit1 /2 /3 分别指什么呢?
回复 支持 反对

使用道具 举报

发表于 2009-8-24 10:09:10 | 显示全部楼层
现在默认的是什么名字?是表格文档的名字么?如果是看看打印之前动态的修改一下这个名字

Edit1:文件名 比如:(123.doc)
Edit2 :上传到文档服务器上的路径,比如:(Doc:\Doc\)
Edit3:文件在操作系统上的完整路径,比如:(d:\123.doc)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-17 20:56 , Processed in 0.044545 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表