Можно ли распечатать HTMLLoader (pdf) в Adobe Air? - PullRequest
1 голос
/ 18 февраля 2010

Я использую AlivePDF , чтобы создать файл PDF, а затем сохранить его на рабочем столе.Затем я могу использовать HTMLLoader для отображения моего прекрасного файла PDF.

Теперь кнопка печати в Adobe Reader работает нормально.Однако, приложением будут пользоваться маленькие дети, поэтому я бы хотел, чтобы над ним была большая кнопка «Печать».

Я подумал, что могу просто запустить задание на печать и подать его на мой HTMLLoader.Это не будет работать, потому что загрузчик HTML растрирует содержимое.

Есть предложения?

1 Ответ

1 голос
/ 08 марта 2010

Один ответ, который я нашел, чтобы решить эту проблему, называется Кросс-скриптовое содержимое PDF . Идея состоит в том, что PDF может иметь встроенный JavaScript, который можно вызывать из JavaScript внутри HTML-страницы, «размещая» указанный PDF (только тег объекта, без встраивания).

Этот сайт был особенно полезен. Мне пришлось немного упростить JavaScript с этой страницы. Я продолжал получать синтаксические ошибки.

Мне также нужна моя программа для генерации PDF и HTML контента. Я не могу отправить один PDF со встроенным JS и HTML-файлом, указывающим на него. Они должны быть динамически сгенерированы пользователем. Вот краткое изложение:

private function printText(text:String):void
{
 var p:PDF=new PDF(Orientation.PORTRAIT, Unit.MM, Size.LETTER);
 p.addPage();
 p.addText(text, 100, 100);
 p.addJavaScript(this.getJavascript());
 var f:FileStream=new FileStream();

 var html:File=File.desktopDirectory.resolvePath("exported.html");
 f.open(html, FileMode.WRITE);
 f.writeUTF(this.getHtml());
 f.close();

 var file:File=File.desktopDirectory.resolvePath("exported.pdf");
 f.open(file, FileMode.WRITE);
 var bytes:ByteArray=p.save(Method.LOCAL);
 f.writeBytes(bytes);
 f.close();

Теперь, когда у нас есть два файла, HTML и PDF, мы можем просмотреть PDF и создать гигантскую фиолетовую кнопку печати для наших молодых пользователей с нарушениями зрения.

 if (HTMLLoader.pdfCapability == HTMLPDFCapability.STATUS_OK)
 {
  var win:PrintTitleWindow;  //the window w/giant button
  var htmlLoader:HTMLLoader=new HTMLLoader();
  var url:URLRequest=new URLRequest(html.url);
  htmlLoader.width=880;
  htmlLoader.height=(appHeight - 150);  //i figure out the height elsewhere
  htmlLoader.load(url);
  var holder:UIComponent=new UIComponent();
  holder.addChild(htmlLoader);
  win=PrintTitleWindow(PopUpManager.createPopUp(mainWindow, PrintTitleWindow, true));
  win.width=900;
  win.height=(appHeight - 50);
  win.addChild(holder);
  win.addContent(htmlLoader);
  PopUpManager.centerPopUp(win);
 }
}

Вот JS и HTML, которые я использовал. Я добавляю их сюда для смеха. Я уверен, что есть лучший способ сделать это, но я устал, и уже поздно.

private function getJavascript():String
{
 return 'function myOnMessage(aMessage) { print({ bUI: true, bSilent: false, bShrinkToFit: true }); } function myOnDisclose(cURL,cDocumentURL) { return true; } function myOnError(error, aMessage) { app.alert(error); } var msgHandlerObject = new Object(); msgHandlerObject.onMessage = myOnMessage; msgHandlerObject.onError = myOnError; msgHandlerObject.onDisclose = myOnDisclose; this.hostContainer.messageHandler = msgHandlerObject;';
}

private function getHtml():String
{
return '<html><head><script>function callPdfFunctionFromJavascript(arg) { pdfObject = document.getElementById("PDFObj");pdfObject.postMessage([arg]);}</script></head><body><object id="PDFObj" data="exported.pdf" type="application/pdf" width="100%" height="100%"></object></body></html>';
}

PrintTitleWindow - это простое окно заголовка с кнопкой печати на нем. Код для печати прост.

myHtmlLoader.window.callPdfFunctionFromJavascript('Print');

Эх, вуаля ! У меня есть кнопка gigantor-print примерно так:

alt text
(источник: cetola.net )

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

Так что до квартала далеко. Тем не менее, если вам нужно распечатать и вы не можете полагаться на эту кнопку панели инструментов Adobe, вот ваш ответ :).

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