Распечатать PDF из ASP.Net без предварительного просмотра - PullRequest
15 голосов
/ 07 ноября 2008

Я сгенерировал PDF-файл с помощью iTextSharp, и я могу очень хорошо просмотреть его в 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");
                ...

И вот я здесь.

Ответы [ 5 ]

6 голосов
/ 07 ноября 2008

Наконец, я сделал это, но мне пришлось использовать IFRAME, я определил IFrame в aspx и не установил свойство src, в файле cs я создал файл pdf и установил свойство src iFrame как имя сгенерированного файла 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";

И это помогло, однако я думаю, что мне следует реализовать ваше решение, Стефан, проблема в том, что я новичок в asp.net и javascript, и если у меня нет полного исходного кода, я не смогу написать Ваше предложение, но по крайней мере это первый шаг, я был очень удивлен, сколько кода в html и javascript мне нужно выучить. Thnx.

1 голос
/ 19 июля 2011

Это немного сложнее, если вы используете 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"; 
1 голос
/ 07 ноября 2008

PDF-файл встроен в страницу с тегом embedd или просто открыт в рамке, или как вы это показываете?

Если он встроен, просто убедитесь, что объект выбран, а затем выполните print ().

Получить ссылку на внедренный документ.

var x = document.getElementById("mypdfembeddobject");  
x.click();
x.setActive();
x.focus();
x.print();
0 голосов
/ 07 ноября 2008

Вы можете встроить javascript в pdf, так что пользователь получит диалоговое окно печати, как только его браузер загрузит pdf.

Я не уверен насчет iTextSharp, но я использую javascript

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

Для iTextSharp, проверьте http://itextsharp.sourceforge.net/examples/Chap1106.cs

0 голосов
/ 07 ноября 2008

Также попробуйте этот драгоценный камень:

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

Я не проверял его, но то, что я прочитал об этом, можно использовать таким образом, чтобы печатать файл mypdf.pdf вместо содержимого страницы, каким бы способом вы ни печатали страницу.

Поиск СМИ = "печать", чтобы проверить больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...