Kry*_*tix 3 c# printing pdf asp.net itextsharp
我环顾四周,似乎无法找到适合我的方式.我正在创建一个网站,我有两个按钮,一个下载按钮(工作正常)和一个应该打印PDF的打印按钮(甚至只需打开打印对话框打开adobe中的PDF).
我和其他许多问题的最大区别在于我不是要创建一个新文档.我的PDF是使用我已经创建的模板PDF生成的.
我只需要一种方法来打印文档.我无法将其保存在服务器上,因为我希望客户端能够打印它.我已经尝试了一个MemoryStream,但它没有工作(授予我可能没有正确编写,代码如下).标题是从不同的页面抓取的.
using (var ms = new MemoryStream())
{
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", header); /
Response.Buffer = true;
Response.Clear();
var bytes = ms.ToArray();
PdfReader r = new PdfReader(template);
using (PdfStamper ps = new PdfStamper(r, Response.OutputStream))
{
AcroFields af = ps.AcroFields;
...
ps.FormFlattening = true;
}
Response.OutputStream.Write(bytes, 0, bytes.Length);
Response.OutputStream.Flush();
Run Code Online (Sandbox Code Playgroud)
同样,我希望客户能够打印出单击"打印"按钮后生成的PDF.
在走这条路之前,我只想确保正确解释一些事情.我不知道你的专业水平所以如果我说一些明显的话,请不要生气.
首先,你说你有两个按钮,"下载"和"打印".我们知道您打算做什么,但重要的是要知道并理解这两个选项都是"下载".您的"下载"按钮实际上是"下载并且(可能)提示保存",您的"打印"按钮实际上是"下载,然后如果此人在其浏览器中配置了PDF渲染器(大多数现代浏览器都有),则呈现PDF另有提示保存".这对你来说可能非常明显,但我只想确保它清楚.我个人没有绑定到我的默认浏览器的PDF渲染器,所以每次都为我下载所有PDF.
其次,服务器响应请求将一个且仅一个"东西"发送回客户端.那个"东西"可以有与之关联的元数据(标题),但很少有标准的元键是相关的.一个关键(内容处理)是相对于发起请求,是否应该将此响应视为"内联"或"附件".有些浏览器将后者视为"下载和(可能)提示保存",但有些浏览器仍会启动相关的应用程序.还有application/octet-stream一些关键(mime类型),有些人用来进一步欺骗浏览器,基本上说"严重老兄,我发送的东西是如此奇怪,以至于你不可能弄明白所以只需将它保存到磁盘" .
这一切都非常重要,因为没有"请打印这个"的东西,你可以从服务器发送任何标准规范(或我见过的任何规范).此外,服务器甚至不能说"在新的选项卡或浏览器窗口中打开它".打印和窗口/标签控件都是客户端功能,因此您需要从该角度进行攻击.
所以现在有些选择.这些选项都假设您的客户拥有内置并启用了PDF渲染器的现代浏览器.
您可以使用的一个选项是将PDF包装在iframe具有一些调用window.print()加载时调用的JavaScript中.谷歌曾经(也许仍然如此)为他们的日历.您需要使用各种客户端呈现设备对其进行测试,以确保其按预期工作.
另一个选择是尝试使用PDFObject嵌入PDF,然后使用上面提到的相同的JavaScript.
最后一个选项是稍微更改您的PDF生成代码,并在PDF中尝试在加载时打印PDF.PDF呈现器中的JavaScript支持不是通用的,因此您需要检查这是否适用于您的客户端.此外,此设置被"烘焙"到您制作的PDF中,因此如果有人将其保存到磁盘,每次打开它时都会尝试打印,这非常烦人.
| 归档时间: |
|
| 查看次数: |
6140 次 |
| 最近记录: |