Foxtable(狐表)用户栏目专家坐堂 → foxtable 自带的PDF生成功能异常


  共有5334人关注过本帖树形打印复制链接

主题:foxtable 自带的PDF生成功能异常

帅哥哟,离线,有人找我吗?
ljh29206
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1359 积分:12004 威望:0 精华:0 注册:2012/3/5 11:32:00
foxtable 自带的PDF生成功能异常  发帖心情 Post By:2017/10/23 16:01:00 [只看该作者]

Dim fl As String = "d:\abc.pdf"
Dim a As Integer = 0

'--------------------------------------------------------------对生成的图片进行批量处理,然后放入同一个PDF文件里面
Dim doc As New PrintDoc '定义一个报表对象
doc.PageSetting.Landscape = True '横向打印
'doc.PageSetting.PaperKind = 70 '纸张类型改为B5
doc.PageSetting.Width = 210 '纸张宽度为220毫米
doc.PageSetting.Height = 91 '纸张高度为110毫米
doc.PageSetting.LeftMargin = 1   '设置页边距
doc.PageSetting.RightMargin = 0
doc.PageSetting.TopMargin = 0
doc.PageSetting.BottomMargin = 0
'--------------------设置页面
'--------------------添加图片到PDF

For Each str As String In FileSys.GetFiles("d:\cutoff\")
    Dim ifo As new FileInfo(str)
  '  If str.Contains("jpg")  AndAlso ifo.Length > 30000 Then  'ifo.Length > 50000 让文件的大小大于 50k   避免空页面加载
        a = a + 1
        Dim rt As prt.RenderText '定义一个文本对象
        rt = New prt.RenderText() '创建文本对象
        rt.Style.FontBold = True '字体加粗
        rt.Style.FontSize = 9 '字体大小为9磅
        rt.Text = "(" & a & " / " & FileSys.GetFiles("d:\cutoff\").Count  & ")"  '设置文本对象的内容
        rt.Width = "Auto" '自动设置宽度
        rt.X = 62 '指定水平位置
        rt.y = 75 '指定垂直位置
        
        Dim rm As New prt.RenderImage '定义一个图片对象
        rm.Image = GetImage(str) '设置图片
        rm.Width = "109%Parent"
        rm.Height = "100%Parent"
        rm.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Left
        rm.Style.ImageAlign.AlignVert = prt.ImageAlignVertEnum.top
        rm.Style.ImageAlign.KeepAspectRatio = False
        doc.Body.Children.Add(rm) '将图片对象加入报表
        doc.Body.Children.Add(rt) '将文本对象加入到报表
'    End If
Next

'--------------------生成页面
doc.SavePDF(fl) '保存为PDF文件

代码以上  ,
把图片 复制 为  以 25 ,50 ,100 张 进行测试 
发现25,50 可以通过,
100张时 就会失败, 请 指点.

请测试

大概60+ 的时候会提示内存不足.

[此贴子已经被作者于2017/10/25 15:27:24编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/23 18:29:00 [只看该作者]

拷贝了150张,也没提示内存溢出。你电脑的设备的内存是多大的?

 回到顶部
帅哥哟,离线,有人找我吗?
ljh29206
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1359 积分:12004 威望:0 精华:0 注册:2012/3/5 11:32:00
  发帖心情 Post By:2017/10/24 8:46:00 [只看该作者]

16G!

甜版  你测试的结果有没看看,

doc.Body.Children.Add(rm)   这个位置的图片   会变成空白  超过60份就会.

只留下 doc.Body.Children.Add(rt)  这部分在页面.


有时不一定会提示内存不足,但生成的pdf 会变成  空白页
[此贴子已经被作者于2017/10/24 8:47:54编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/24 10:57:00 [只看该作者]

 没办法,这个是有内存限制的。

 

 预览可以这样处理

 

'--------------------------------------------------------------对生成的图片进行批量处理,然后放入同一个PDF文件里面
Dim doc As New PrintDoc '定义一个报表对象
doc.PageSetting.Landscape = True '横向打印
'doc.PageSetting.PaperKind = 70 '纸张类型改为B5
doc.PageSetting.Width = 210 '纸张宽度为220毫米
doc.PageSetting.Height = 91 '纸张高度为110毫米
doc.PageSetting.LeftMargin = 1   '设置页边距
doc.PageSetting.RightMargin = 0
doc.PageSetting.TopMargin = 0
doc.PageSetting.BottomMargin = 0
'--------------------设置页面
'--------------------添加图片到PDF

Dim a As Integer = 0
For Each str As String In FileSys.GetFiles("c:\cutoff\")
    a = a + 1
    output.show(a & str)
    Dim rg As New prt.RenderGraphics()
    Dim bmp As new bitmap(str)
    rg.Graphics.DrawImage(bmp, 1, 1)
    rg.Width = "109%Parent"
    rg.Height = "100%Parent"
    Doc.Body.Children.Add(rg)
    bmp.dispose
Next

doc.Preview

 生成pdf的话,都会提示内存不足的,因为要转换成图片,整体保存为一个文件。

 

 或者换一种方法生成pdf

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=70686&skin=0

 

下载信息  [文件大小:621.0 KB  下载次数:20]
图片点击可在新窗口打开查看点击浏览该文件:itextsharp 中文帮助文档.rar

 


 回到顶部
帅哥哟,离线,有人找我吗?
ljh29206
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1359 积分:12004 威望:0 精华:0 注册:2012/3/5 11:32:00
  发帖心情 Post By:2017/10/25 11:48:00 [只看该作者]

甜版,请教
教程里面有 把文本添加到指定位置(绝对坐标)的 内容 

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("test.pdf"))
PdfContentByte cb = writer.DirectContent

BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
 cb.beginText()
cb.setFontAndSize(bf, 12)
 cb.showTextAligned(PdfContentByte.ALIGN_CENTER, text + "This text is centered", 250, 700, 0)
cb.endText()

不懂怎么转换为foxtable 代码, 求指点

[此贴子已经被作者于2017/10/25 11:48:44编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/10/25 12:28:00 [只看该作者]

转换代码,参考 http://converter.telerik.com/

 

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
ljh29206
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1359 积分:12004 威望:0 精华:0 注册:2012/3/5 11:32:00
  发帖心情 Post By:2017/10/25 15:25:00 [只看该作者]

感谢甜版, 这个转换真好用.




既然存在不足地方,个人建议还是 用iTextSharp,取代 狐表现有的savepdf.

造福更多狐友.


[此贴子已经被作者于2017/10/25 15:30:23编辑过]

 回到顶部