我可以在Adobe Air中打印HTMLLoader(Pdf)吗?

iyr7buue  于 2022-09-21  发布在  Apache
关注(0)|答案(1)|浏览(117)

我正在使用AlivePDF创建一个PDF文件,然后将其保存到桌面。然后,我可以使用HTMLLoader来显示我可爱的PDF文件。

现在,Adobe Reader中的打印按钮工作正常。然而,将有年幼的孩子使用这款应用程序,所以我希望在它的正上方有一个大的“打印”按钮。

我想我只需启动一项打印作业,并将其提供给我的HTMLLoader。这是行不通的,因为HTML加载器会将内容栅格化。

有什么建议吗?

8mmmxcuj

8mmmxcuj1#

为了解决这个问题,我找到了一个答案,叫做Cross-scripting PDF content。其想法是,一个PDF可以有嵌入的JavaScript,这可以从调用的JavaScript内的HTML页面表示PDF(只有对象标签,没有嵌入)。

这个site特别有帮助。我不得不将该页面中的JavaScript简化了相当多。我一直收到语法错误。

我还需要我的程序来生成PDF和HTML内容。我不能装运一个嵌入JS和一个指向它的HTML文件的PDF。它们需要由用户动态生成。以下是一个基本的概要:

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');
  • 哦,哇!我有一个巨大的打印按钮,如下所示:

(来源:cetola.net)

点击那个紫色的大打印按钮与点击PDF工具栏中的打印图标是一样的。对我来说,不同的是,我的用户可能是小学生或中学生,他们不必四处寻找愚蠢的按钮。

所以,这条路很长,绕过了这个街区。但是,如果您需要打印且不能依赖于Adobe工具栏按钮,以下是您答案:)。

相关问题