我该如何让FastReport生成一个在iOS上可查看的PDF文件?

6
我正在使用FastReports,并且在iOS上无法正确读取其生成的PDF。因为iOS只支持PDF/A,而FastReports不支持该格式。这显然是FastReports 4.0中已知的一个bug,将在FastReports 5.0中修复。然而,5.0版本还有很长一段时间才会发布,目前我的简单解决方案 - 我希望它越简单越好,以便在FastReports 5.0发布后可以删除 - 就是将现有的PDF打印到另一个PDF上。是否可以在系统上安装PDF打印机并仅使用Delphi完成此操作?
如果不能,是否有一种转换器可以接受PDF文件并输出PDF文件?

2
你的标题有误导性。问题正文说明了你想避免使用PDF虚拟打印机。 - OnTheFly
1
iOS设备不仅限于PDF/A格式(顺便问一下,是哪种类型?PDF/A标准有三种(1、2和3),每种标准都提供两种或三种子类型(a、b和u))。此外,根据原始PDF文件的情况,对PDF/A变体的合理转换可能是不可能的,特别是自动转换。 - mkl
1
你能否发布一个由FastReport生成的样本PDF文件,以便我们查看吗?我很想看看这样的文件。 - iPDFdev
1
无论如何,FastReport生成的PDF文档都是破碎不堪的。他们的标准答案是,其他程序(如Firefox或Chrome预览)无法正确查看它们,因为它们不是PDF/A格式,这纯属胡说八道。而且他们的问题不仅限于字体,还包括形状。多年来,他们一直承诺FR5“很快就会发布”,希望现在他们有了更大的客户群体,能够遵守承诺。 - Leonardo Herrera
3
我认为你可以编辑这个问题为“如何让FastReport生成一个在iOS上可查看的PDF?”这将为你添加关于包含必要字体的答案打开大门,但不会否定其他有关重新生成PDF的答案。 - Rob Kennedy
显示剩余11条评论
7个回答

5

尝试使用SynPDF。它是开源的,其结果很好,同时将文件大小管理到非常可接受的水平。它生成PDF/A文档。

可以在以下位置找到Fast Report导出单元:

http://synopse.info/forum/viewtopic.php?id=781


+1 这是我个人认为最好的解决方案(至少在使用开源库的情况下,无需外部打印机或转换工具)。您无需转换PDF文件,而是可以使用PDF/A文档生成它,或者将字体嵌入其中。 - Arnaud Bouchez
尽管我自己回答了这个问题,但我会将其作为被接受的答案,因为它是最佳解决方案。这是最直接的解决方案,可能是我在其他程序问题不那么紧迫时最终实施的方案。 :) - Svip
好知道!这一点都不难 - 你只需确保一旦获得所需文件的zip包,前往Synopse仓库并下载最新版本即可。 - Leonardo Herrera
SynPDF似乎工作正常。唯一的问题是它与我们使用RTTI的系统发生了冲突,但我们想出了在SynPDF中禁用几个对我们不感兴趣的功能,这使其正常工作。 - Svip

3
我找到了解决问题的方法。解决方案是启用PDF中的嵌入字体,因为我正在使用Tahoma和Arial这两种iOS平台不支持的字体。我猜我最初禁用了此功能以节省文件大小。
但是我意识到,即使对于iOS设备,我也可以发送大文件。所以,嵌入字体对于我来说是解决方案。
但是我想提到另一个答案的yms建议使用Helvetica(因为Tahoma和Arial都是无衬线字体),因为它在包括iOS在内的大多数平台上都可用。或者 - 也许从描述中可以得出结论 - 它是PDF引擎的一部分,而不是平台上的内容。
然而,尽管如此,我仍然认为为确保PDF真正便携(PDF中的P),应该嵌入所有字体,而不管它们是否可用。因为您可能会有一些用户使用不支持某些字体的PDF阅读器。哦,还有,“简单字体”才算数,不是CID字体,CID字体必须嵌入。
事实上;就我所知,Arial是PDF规范中Helvetica的别名,因此它将加载Helvetica;但是它没有起作用,因为它是CID字体。

您可以直接从FastReport嵌入TrueType字体子集,使用第三方PDF导出程序,例如我们的开源SynPdf,正如此答案所述。无需外部打印机,也无需转换为PDF。文件内容的直接输出,可被移动设备识别。 - Arnaud Bouchez

1
创建PDF实际上是编辑一个新的空白PDF。最简单的解决方案是"查看PDF"——将其呈现为TBitmap——然后将其复制到新的PDF的TCanvas中。但这样会破坏所有矢量信息......因此,虚拟加载——假装编辑——保存到新文件可能能够实现它。 https://stackoverflow.com/search?q=%5Bdelphi%5D+PDF+edit - 讨论了很多适用于Delphi的PDF库,您可以下载它们并逐个尝试,检查不同库与您使用的文档类型和功能丰富程度的匹配情况。
我没有将此问题标记为重复,只是因为不知道哪一个最适合在这里匹配。

1
Delphi和大多数高级编程语言都支持运行子进程。您可以使用它来生成和控制ghostscript。我已成功地将其用于从各种专有且损坏的格式中读取和转换pdf文件,以便构建正确且更小的pdf文件。有很多选项,因此您需要尝试一下才能获得正确的设置。

我认为GhostScript可能是我正在寻找的方向。我想它最好是Delphi中的某种单位/类,但我想我可以接受这个。 - Svip
@svip,我发现大多数PDF库只提供基本功能或需要付费。GS已经存在很久了,并且是最能读取您输入的工具。 - Spencer Rathbun
它可以运行,只是无法找到我的字体(Tahoma和Arial),所以有点奇怪。 - Svip
@Svip 是的,让它查找字体有点麻烦。我已经把需要的命令行选项埋在某个地方了,而且我实际上在一年前还不得不与Artifex的人员进行调试。当时存在一个错误,导致它无法正常工作,但是在最近的版本中已经修复了。 - Spencer Rathbun
问题在于:如果我不提供-sFONTPATH =,它会在运行该文件时抱怨,但它会生成一个文件(尽管有一些文本错误;例如ø变成³)。当我使用-sFONTPATH ="C:\windows\fonts\"运行它时,没有任何投诉,但它会产生单个空白页。 - Svip
@Svip 我不记得我当时是怎么解决这些问题的,而且我现在也没有代码。我相当确定这是一个字体映射问题,文档在这里,你也可以在IRC频道上询问。他们是一群很棒的人,只要确保你先读了文档就好了。 :) - Spencer Rathbun

0

我个人没有尝试过,但 Gnostice eDocEngine 应该能够满足您的需求。

http://www.gnostice.com/edocengine_vcl.asp

eDocEngine 可以在剪贴板、PDF、RTF、HTML、XHTML、EXCEL、TEXT、CSV、Quattro Pro、LOTUS 1-2-3、DIF、SYLK、TIFF、PNG、SVG(基于XML的矢量图形)、JPEG、GIF、BMP、EMF和WMF格式中创建文档。eDocEngine附带了现成的报表导出接口,与流行的Delphi报表工具(如ReportBuilder、FastReport、Rave、QuickReport和Ace Reporter)紧密集成。

0
大约12个月前,我遇到了类似的情况,最终购买了llpdflib(http://www.llion.net/llpdflib.php),因为我无法再等待Fast Report VCL 5。它一直表现得非常出色,可以生成PDF/A和更小的PDF文件。

0

这是一篇旧帖子,但我们遇到了同样的问题。我们使用http://www.wptools.de/提供的组件解决了它。该工具中的一个小型dll可以为Windows、iOS和Android生成完美的PDF文件。这些文件显示字体正确且大小适中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接