从ASP.NET打印PDF而不预览

6kkfgxo0  于 2023-04-08  发布在  .NET
关注(0)|答案(5)|浏览(196)

我用iTextSharp生成了一个PDF,我可以在ASP.NET中很好地预览它,但是我需要直接将它发送到打印机而不需要预览。
我知道可以使用javascript window.print()将页面直接发送到打印机,但我不知道如何将其用于PDF。
编辑:它不是嵌入式的,我是这样生成的;

...
FileStream stream = new FileStream(Request.PhysicalApplicationPath + "~1.pdf", FileMode.Create);
Document pdf = new Document(PageSize.LETTER);
PdfWriter writer = PdfWriter.GetInstance(pdf, stream);
pdf.Open();
pdf.Add(new Paragraph(member.ToString()));
pdf.Close();
                    
Response.Redirect("~1.pdf");
...

而我就在这里

x33g5p2x

x33g5p2x1#

最后我做出来了,但是我不得不使用IFRAME,我在aspx中定义了一个IFrame,没有设置src属性,在我做的cs文件中生成了pdf文件,并将IFrame的src属性设置为生成的pdf文件名,像这样;

Document pdf = new Document(PageSize.LETTER);
PdfWriter writer = PdfWriter.GetInstance(pdf, 
new FileStream(Request.PhysicalApplicationPath + "~1.pdf", FileMode.Create));
pdf.Open();

//This action leads directly to printer dialogue
PdfAction jAction = PdfAction.JavaScript("this.print(true);\r", writer);
writer.AddJavaScript(jAction);

pdf.Add(new Paragraph("My first PDF on line"));
pdf.Close();

//Open the pdf in the frame
frame1.Attributes["src"] = "~1.pdf";

这使得窍门,然而,我认为我应该实现你的解决方案Stefan,问题是,我是新的asp.net和javascript,如果我没有一个完整的源代码,我不能编码你的建议,但至少是第一步,我很惊讶有多少代码在html和javascript我需要学习. Thnx.

h22fl7wq

h22fl7wq2#

pdf是嵌入在带有embedd-tag的页面中,还是只是在框架中打开,或者你是如何显示它的?
如果它是嵌入式的,只需确保对象被选中,然后执行print()。
获取嵌入文档的引用。

var x = document.getElementById("mypdfembeddobject");  
x.click();
x.setActive();
x.focus();
x.print();
u91tlkcl

u91tlkcl3#

如果你使用的是pdfsharp,这会有点棘手,但也是可行的

PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage(); 
XGraphics gfx = XGraphics.FromPdfPage(page); 
XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic); 
// Draw the text 
gfx.DrawString("Hello, World!", font, XBrushes.Black, 
    new XRect(0, 0, page.Width, page.Height), 
    XStringFormats.Center); 

// real stuff starts here

// current version of pdfsharp doesn't support actions 
// http://www.pdfsharp.net/wiki/WorkOnPdfObjects-sample.ashx
// so we got to get close to the metal see chapter 12.6.4 of 
// http://partners.adobe.com/public/developer/pdf/index_reference.html
PdfDictionary dict = new PdfDictionary(document); // 
dict.Elements["/S"] = new PdfName("/JavaScript"); // 
dict.Elements["/JS"] = new PdfString("this.print(true);\r");
document.Internals.AddObject(dict);
document.Internals.Catalog.Elements["/OpenAction"] = 
    PdfInternals.GetReference(dict);
document.Save(Server.MapPath("2.pdf"));
frame1.Attributes["src"] = "2.pdf";
6qfn3psc

6qfn3psc4#

试试这个gem:

<link ref="mypdf" media="print" href="mypdf.pdf">

我还没有测试过它,但我所读到的,它可以用这种方式让mypdf.pdf打印,而不是页面内容,无论你用什么方法打印页面。
搜索media=“print”查看更多信息。

8xiog9wr

8xiog9wr5#

你可以在pdf中嵌入javascript,这样用户在浏览器加载pdf时就可以看到一个打印对话框。
我不确定iTextSharp,但我使用的javascript是

var pp = this.getPrintParams();
pp.interactive = pp.constants.interactionLevel.automatic;
this.print(pp);

对于iTextSharp,请查看http://itextsharp.sourceforge.net/examples/Chap1106.cs

相关问题