gpt4 book ai didi

javascript - 打印使用 itextsharp 创建的 PDF

转载 作者:行者123 更新时间:2023-11-28 07:51:27 25 4
gpt4 key购买 nike

我的目标是在客户端计算机上打印 RDLC 报告而不进行预览。我无法使用 ReportViewer 打印按钮,因为它需要安装 ActiveX 对象,并且没有权限。因此,我使用 ITextSharp 从渲染的 LocalReport 返回的字节数组创建 PDF,并添加用于打印的 JavaScript。

在调试期间,我可以看到 PDF 已生成并且有 2 页,一切看起来都正常。我没有收到任何错误,函数退出正常,但不打印。我做错了什么,或者我错过了什么?

这是我的代码:

string jsPrint = "var pp = this.getPrintParams();pp.interactive= pp.constants.interactionLevel.silent;this.print(pp);";

byte[] bytes = report.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings);

using (MemoryStream ms = new MemoryStream())
{
Document doc = new Document();

PdfWriter writer = PdfWriter.GetInstance(doc, ms);

doc.SetPageSize(PageSize.A4);

doc.Open();

PdfContentByte cb = writer.DirectContent;

PdfImportedPage page;

PdfReader reader = new PdfReader(bytes);

int pages = reader.NumberOfPages;

for (int i = 1; i <= pages; i++)
{
doc.SetPageSize(PageSize.A4);

doc.NewPage();

page = writer.GetImportedPage(reader, i);

cb.AddTemplate(page, 0, 0);
}

PdfAction jAction = PdfAction.JavaScript(jsPrint, writer);

writer.AddJavaScript(jAction);

doc.Close();
}

谢谢。

最佳答案

关于您关于 PdfStamper 的问题(在评论中)。它应该像这样简单:

string jsPrint = "var pp = this.getPrintParams();pp.interactive= pp.constants.interactionLevel.silent;this.print(pp);";
PdfReader reader = new PdfReader(bytes);
MemoryStream stream = new MemoryStream();
PdfStamper stamper = new PdfStamper(pdfReader, stream);
stamper.Writer.AddJavaScript(jsPrint);
stamper.Close();
reader.Close();

关于您最初的问题:自动打印 PDF 文档被认为是一种安全隐患:人们可以将 PDF 发送给最终用户,而该 PDF 会导致打印机吐出页面。过去,(真正的)老式 PDF 查看器可以实现这一点,但现代查看器阻止了这种情况的发生。

换句话说:您可能正在尝试满足过去的要求。当今的 PDF 查看器始终需要最终用户执行操作才能打印 PDF 文档。

关于javascript - 打印使用 itextsharp 创建的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26751910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com