16

我已经使用 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");
                ...

我在这里。

4

5 回答 5

6

最后我做到了,但是我必须使用一个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 代码。谢谢。

于 2008-11-07T04:37:47.383 回答
1

pdf 是嵌入在带有 embedd-tag 的页面中还是只是在框架中打开或者您如何显示它?

如果它是嵌入的,只需确保选择了对象,然后执行 print()。

获取嵌入文档的引用。

var x = document.getElementById("mypdfembeddobject");  
x.click();
x.setActive();
x.focus();
x.print();
于 2008-11-06T23:15:28.783 回答
1

如果您使用的是 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"; 
于 2011-07-19T15:32:24.123 回答
0

您可以在 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

于 2008-11-07T00:03:54.737 回答
0

另外,试试这个宝石:

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

我还没有测试过它,但是我已经读过它,它可以用这种方式来打印 mypdf.pdf 而不是页面内容,无论您使用什么方法来打印页面。

搜索 media="print" 以查看更多信息。

于 2008-11-06T23:25:35.283 回答