关于Lazarus下PowerPDF控件的使用
- 如何输出PDF
PowerPDF使用TPRPage作为页面容器,只要简单地将一个生成好的TPRPage输出到TPReport中即可生成PDF文件的一个页面,页面的尺寸由TPRPage的高度宽度决定。
PReport1.FileName:= 'test.pdf';PReport1.BeginDoc;PReport1.Print(PRPage1);PReport1.EndDoc;
- 尺寸和位置的计算
PDF格式的默认DPI是72,PowerPDF也使用这个数据,参见常量定义如下:
{** PreDefined page size*}PDF_PAGE_WIDTH_A4 = 596;PDF_PAGE_HEIGHT_A4 = 842;{** Dafault page size.*}PDF_DEFAULT_PAGE_WIDTH = PDF_PAGE_WIDTH_A4;PDF_DEFAULT_PAGE_HEIGHT = PDF_PAGE_HEIGHT_A4;
A4页面实际尺寸是219×297mm,程序里常量设置的默认的尺寸是596×842,计算得到dpi是72。确认无误。
- 设计期网格尺寸的修正
但是,同样的A4页面在设计期页面上的显示出的网格数只有大约15.7×22.3(格),既不是英寸,也不是厘米。
检查PReport单元,发现在网格绘制时使用了一个常量LINE_PITCH: integer = 378;
,检查涉及这个常量的代码(摘录)
// drawing vertical lines.LineCount := 0;LineFlg := true;LinePos := - OffsetX;while LinePos < aWidth dobeginif LinePos > 0 thenbeginMoveTo(LinePos, 0);SetPen(Canvas, LineFlg);LineTo(LinePos, aHeight - 1);end;inc(LineCount);LineFlg := not LineFlg;LinePos := trunc(LineCount * LINE_PITCH / 20) - OffsetX;end;
和
LineCount := 0;LinePos := 0;while LinePos < self.Width dobeginTextOut(LinePos + 1, 1, IntToStr(LineCount));inc(LineCount);LinePos := trunc(LineCount * LINE_PITCH / 10);end;
按设计来说,这个网格应当是作为0.5和1cm的标尺使用的,也就是说,LINE_PITCH应当是代表每厘米像素数的10倍。
1/2.54×DPI=LINE_PITCH/10
10/2.54×DPI=378
2.54/10=DPI/378
DPI=2.54/10×378
求得DPI=96.012,即,网格是按96dpi的分辨率绘制的,而前面提到,尺寸的计算是按72dpi进行,因此导致网格显示不正常。
计算得到新的LINE_PICTH值:283.7,修正并重新编译后,网格显示正常。
- 高精度图片的使用
72dpi的精度不足以满足大多数场合对于图片输出的需要,因此需要对插入的图片做调整。
在TPRImage里提供了ScaleX和ScaleY两个属性用于将高DPI的图片按比例缩小成对应于72dpi的尺寸输出。
例如,如果需要288dpi的精度输出一个1英寸×1英寸的图片,可以将一个288像素×288像素的图片置入一个设置为72像素×72像素的TPRImage,并设置ScaleX和ScaleY为0.25(4倍dpi,缩放为1/4),同时设置Stretch属性为真(默认值)以在设计界面上缩小显示。
关于Lazarus下PowerPDF控件的使用相关推荐
- 刷新后控制TAB键到下一个控件
页面上的控件能一直TAB下去,这是系统的一个很基本的要求.在网上没有搜索到相关的方法.我觉得一般做法都是使页面无刷新,但是如果遇到页面不得不刷新的情况,如何去控制呢? 思路是很简单的,首先是获取 ...
- MFC下列表控件的使用
MFC下列表控件的使用 2012-11-09 16:46:57| 分类: 程序VC相关 | 标签: |字号大中小 订阅 1.应该加入头文件 #include <Atlbase.h> 2 ...
- 自定义可扩展叠加头部的下拉控件
最近写了个下拉控件,和几个下拉的头部样式,下拉控件可以连续添加叠加几个头部视图 下面是没有添加任何头部尾部的视图下拉效果 一步一步来介绍,先介绍这个下拉效果,在介绍自定义的头部 首先在使用上,和普通的 ...
- 【GIS开发】VB6.0下MO控件的安装:安装教程及MO破解教程(MapObjects2.x)
[GIS开发]VB6.0下MO控件的安装:安装教程及MO破解教程(MapObjects2.x) 基于MO和VB的GIS开发过程中,普遍使用的还是2.0及以上版本,ESRI公司早已不再对MO组件进行更新 ...
- ASP.NET控件中回车自动跳转至下指定控件
登陆框默认按回车不能自动跳转至下一控件,只能跳转至CLICK事件,输入很不舒服,所以做了如下改动: HTML 用户名:<input type="text" id=" ...
- html下拉框 multiple,多选下拉控件的使用(select-option)multiple-select
多选下拉控件的使用(select-option) 1.第一个组件是写bootstrap table的主人公 2.第二个组件 本篇中使用的是第一个控件来实现多选下拉框: 首先引入支持文件 multipl ...
- Unity 之 UGUI Dropdown下拉控件展开方向控制
Unity 之 UGUI Dropdown下拉控件展开方向控制 有个需要控制下拉控件展开方向的需求,不得探索一下这个下拉方向是由那些属性控制的. 其实我们正常使用的时候你可以发现,下拉控件默认向下展开 ...
- 具有TreeView下拉控件的ComboBox
具有TreeView下拉控件的ComboBox 没错,如标题所说的那样,在下拉框中是一个TreeView,但是,为什么我们需要这样的控件?事实上这样的需求我已经遇到很多次了,比如适用于: 当遇到层 ...
- iOS自定义控件:简易下拉控件
最近自由时间有点多,就开始撸控件.这个是我们常用的一个下拉分类控件,看了很多别人写的,都是用TableView或者CollectionView整合在一起的感觉自定义性没有那么强,所以就尝试用把Tabl ...
- c语言windows 编程下silder控件,VB6 常用控件 滚动条ScorllBar和Slider控件
滚动条(ScorllBar)和Slider控件通常用来附在窗体上以协助观察数据或确定位置,也可用来作为数据输入的工具. 滚动条(ScorllBar)和Slider控件都有水平和垂直两种,Slider控 ...
最新文章
- bat脚本交互输入_基于winserver操作系统的自动清理Oracle3天前归档日志脚本分享...
- InvalidateRect()、UpdateWindow()、RedrawWindow()区别
- Permutations CodeForces - 736D (矩阵逆)
- 数学建模与科研探索及数学建模竞赛介绍
- Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板...
- PDF区域文本提取工具
- jeb 高级教程之动态调试
- 前端性能优化gzip压缩
- 优秀蓝牙耳机推荐,热销不错的四款蓝牙耳机推荐
- csdn怎么搜索收藏夹
- 18935 贪吃的小Q
- Maple矩阵特征多项式
- vue 308 Permanent Redirect (from disk cache)问题
- J storm战队成员_DOTA2J.Storm战队介绍-DOTA2PIT深渊联赛预选赛J.Storm战队介绍_牛游戏网攻略...
- Python 3.8+numpy查找矩阵中所有鞍点
- 此情可待成追忆——九山顶畅游随想曲(九)
- 不到 20 行 Python 代码即可制作精美证件照!不需要去图文店了!
- 用CodeViser ARM 仿真器广泛用于手机软硬件调试
- random: crng init done太慢影响程序运行
- 打工人的Html学习之路