2010-02-18 120 views
1

我使用AlivePDF創建PDF文件,然後將其保存到桌面。然後我可以使用HTMLLoader來顯示我可愛的PDF文件。我可以在Adobe Air中打印HTMLLoader(pdf)嗎?

現在,Adobe Reader中的打印按鈕正常工作。但是,會有年幼的孩子使用該應用程序,所以我想在其上方有一個大的「打印」按鈕。

我想我可以只啓動打印作業,並給它我的HTMLLoader。這不起作用,因爲HTML加載器會對內容進行柵格化。

有什麼建議嗎?

+0

嗨Stephano, 你是否發現如何打印html加載器的內容作爲矢量字體,即沒有柵格化內容? Thx Lipfi – 2011-01-26 19:50:35

+0

嗯,我不確定你的意思。本示例從HTMLLoader打印PDF。 PDF可以包含矢量圖形。 – Stephano 2011-01-26 19:50:35

+0

嗨Stephano, 太棒了。很高興我的博客文章是一些對你有用的。我很高興地看到您發佈您的解決方案在這裏幫助別人。不錯的工作! 阿德里安 – 2011-01-26 19:50:49

回答

1

一個答案我已經爲了解決這個問題,發現被稱爲Cross-scripting PDF content。這個想法是,PDF可以嵌入JavaScript,可以從HTML頁面中的JavaScript中「調用」所述PDF(僅對象標籤,不嵌入)。

site具有特別的幫助。我不得不簡化頁面中的JavaScript。我不斷收到語法錯誤。

我還需要我的程序生成PDF和HTML內容。我無法發佈帶嵌入式JS的單個PDF和指向它的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,並創建一個巨型紫色打印按鈕爲年輕/觀光impared用戶。

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打印按鈕:

alt text http://www.cetola.net/wp-content/uploads/2010/03/print.png

擊中那大紫打印按鈕是一樣擊中PDF工具欄中的打印圖標。對我而言,不同的是,我的用戶可能是小學生或中學生,他們不必四處尋找愚蠢的按鈕。

所以,這是一個很長的路。不過,如果你需要打印並且不能依賴那個Adobe工具欄按鈕,這裏是你的答案:)。

+1

我也應該注意到,這是一個亭運行的觸摸屏應用。這需要巨大的按鈕,而不是灰色的小圖標,一個更重要的,但同樣有效的原因。我希望的Adobe PDF有一個「亭」模式:)。 – Stephano 2010-03-08 06:34:27

相關問題