2013-07-17 3 views
1

Я искал дни для решения этой проблемы.Печать PDF на сайте

Описание: У меня есть веб-сайт, который динамически загружает PDF через iFrame. PDF сохраняется на сервере, и пользователь веб-сайта может просматривать pdf-файл на веб-сайте.

Проблема: Представьте кнопку печати на веб-сайте, которая печатает PDF-файл, который был создан динамически и сохранен на сервере.

Возможно ли это? Я рассматриваю кросс-браузерную реализацию, а также ухудшаю ситуацию. Я попробовал n количество вариантов JS из Интернета, но ни один из них, похоже, не работает. Кажется, я не могу напечатать PDF так же, как он выглядит. Короче говоря, я пытаюсь эмулировать кнопку печати, которая появляется в PDF-файле при ее загрузке. Есть ли возможность передать документ PDF с сервера в диалоговое окно печати?

+0

Если у вас есть файл pdf, который уже сохранен на сервере и выглядит так, как вы хотите, вы можете предоставить ему регулярную ссылку, которая выведет пользователя в pdf. Там было бы легко распечатать его. Однако, если вы надеетесь на то, что «один клик и выход из принтера», плохая новость - нет. Связано: http://stackoverflow.com/questions/5627035/how-to-print-the-contents-of-an-external-file-in-php – lostphilosopher

+0

Я предполагаю, что вы уже определили, что это (http: //www.javascriptkit.com/howto/newtech2.shtml) не работает для вас? – lostphilosopher

+0

> Есть ли возможность передать документ PDF с сервера в диалоговое окно печати? ... конечно, нет, не больше, чем вы хотите, чтобы кто-то другой мог слепо отправить что-то на вашу машину и что-то сделать. –

ответ

1

Я не уверен, что это сработает, но вы можете попробовать запустить всплывающее окно с special version of your PDF file that opens the print dialog when opened. Затем закройте всплывающее окно. Эта последняя часть может быть сложной, поскольку я думаю, что нет чистого способа узнать, закрыт ли диалог печати.

+0

Спасибо yms. В итоге я сделал что-то подобное. –

+0

Примечание. Мне почти невозможно отобразить диалоговое окно печати из PDF, встроенного в iFrame внутри веб-страницы. Мое решение состояло в том, чтобы открыть другое окно, содержащее только PDF, когда пользователь нажимает кнопку «Печать». Следующая ссылка помогла - http: // stackoverflow.com/questions/270674/print-pdf-from-asp-net-without-preview –

+0

@steve mais, может быть, вам следует написать новый ответ на свой вопрос со всеми подробностями о том, что вы сделали. Это может помочь другим, сталкивающимся с одной и той же проблемой. – yms

2

Описание: У меня есть сайт, который динамически загружает PDF через iFrame. PDF сохраняется на сервере, и пользователь веб-сайта может просматривать pdf-файл на веб-сайте.

Проблема: Представьте кнопку печати на веб-сайте, которая печатает PDF-файл, который был создан динамически и сохранен на сервере.

Решение: Я не мог найти точное решение этой проблемы, но вот как я решил проблему -

  1. Создать «Печать» в соответствии с REQ и перенаправлять, что на другую страницу, которая имеет только PDF.
  2. Скопируйте предыдущий PDF & Создайте новый PDF с помощью JS - this.print(), чтобы при его открытии диалоговое окно печати всплывало непосредственно пользователю.

В новой странице -

if ("Location of PDF " != null) 
     { 
      sPdf = "Location of PDF "; 
      PdfReader pReader = new PdfReader(sPdf); 
      Document document = new Document 
       (pReader.GetPageSizeWithRotation(ApplicationConstants.INDEX_ONE)); 
      int n = pReader.NumberOfPages; 
      FileStream fs = new FileStream 
       ("New PDF location", 
       FileMode.Create, FileAccess.Write); 
      PdfCopy copy = new PdfCopy(document, fs); 
      // Write to pdf 
      document.Open(); 
      for (int i = ApplicationConstants.INDEX_ONE; i <= n; i++) 
      { 
       PdfImportedPage page = copy.GetImportedPage(pReader, i); 
       copy.AddPage(page); 
      } 
      copy.AddJavaScript("this.print(true);", true); 
      document.Close(); 
      pReader.Close(); 

      inStr = File.OpenRead("New PDF location"); 
      while ((bytecnt = inStr.Read 
       (buffer, ApplicationConstants.INDEX_ZERO, buffer.Length)) 
       > ApplicationConstants.INDEX_ZERO) 
      { 
       if (Context.Response.IsClientConnected) 
       { 
        Context.Response.ContentType = "application/PDF"; 
        Context.Response.OutputStream.Write(buffer, 
         ApplicationConstants.INDEX_ZERO, buffer.Length); 
        Context.Response.Flush(); 
       } 
      } 
     } 

Пожалуйста, обратите внимание, что я использую itextsharp впрыснуть сценарий JS в новый PDF. Надеюсь, это помогает кому-то другому. Я пытаюсь найти другое решение без использования itextsharp или любой другой DLL, но это нужно будет сделать сейчас.