加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何获取所有纸张尺寸名称和相应的像素尺寸?

发布时间:2020-12-15 09:14:14 所属栏目:大数据 来源:网络整理
导读:我正在编写一个WYSIWYG页面设计器应用程序,它允许用户将图像和文本放到设计器面板上,然后将面板打印到PDF. 在我的应用程序的页面设置选项中,用户需要选择页面大小,然后,根据所选的页面大小,它将在屏幕上显示根据尺寸调整大小的面板(例如A4选择= 8.5 x 11英寸
我正在编写一个WYSIWYG页面设计器应用程序,它允许用户将图像和文本放到设计器面板上,然后将面板打印到PDF.

在我的应用程序的页面设置选项中,用户需要选择页面大小,然后,根据所选的页面大小,它将在屏幕上显示根据尺寸调整大小的面板(例如A4选择= 8.5 x 11英寸,面板将按这些像素尺寸调整大小.

然后,当用户单击“打印”时,Panel的内容将被绘制为具有所选尺寸的PDF文件.

我正在使用wPDF组件集,特别是TWPPDFPrinter组件来创建PDF.

我的问题:

>如何获取所有纸张尺寸名称的列表,以及如何获取wPDFPrinter的相应尺寸?

提前致谢.

解决方法

要获取系统中定义的所有打印机表单的列表:

uses
  winspool,printers;

...


procedure TForm1.Button1Click(Sender: TObject);
var
  HPrinter: THandle;
  Forms: array of TFormInfo1;
  Count,Needed,Returned: DWORD;
  i: Integer;
begin
  Memo1.Clear;
  if OpenPrinter(nil,HPrinter,nil) then begin
    try
      if not EnumForms(HPrinter,1,nil,Returned) then begin

        // we should fail here since we didn't pass a buffer
        if GetLastError <> ERROR_INSUFFICIENT_BUFFER then
          RaiseLastOSError;

        Count := (Needed div SizeOf(TFormInfo1)) + 1;
        SetLength(Forms,Count);
        if EnumForms(HPrinter,@Forms[0],SizeOf(TFormInfo1) * Count,Returned) then begin
          if Returned < Count then
            SetLength(Forms,Returned);
          for i := 0 to Returned - 1 do begin
             Memo1.Lines.Add(Format('Paper name: %s,Paper size: %dmm x %dmm',[Forms[i].pName,Forms[i].Size.cx div 1000,Forms[i].Size.cy div 1000]))
          end;
        end else
          RaiseLastOSError;
      end;
    finally
      ClosePrinter(HPrinter);
    end;
  end else
    RaiseLastOSError;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读