我使用AlivePDF創建PDF文件,然後將其保存到桌面。然後我可以使用HTMLLoader來顯示我可愛的PDF文件。我可以在Adobe Air中打印HTMLLoader(pdf)嗎?
現在,Adobe Reader中的打印按鈕正常工作。但是,會有年幼的孩子使用該應用程序,所以我想在其上方有一個大的「打印」按鈕。
我想我可以只啓動打印作業,並給它我的HTMLLoader。這不起作用,因爲HTML加載器會對內容進行柵格化。
有什麼建議嗎?
我使用AlivePDF創建PDF文件,然後將其保存到桌面。然後我可以使用HTMLLoader來顯示我可愛的PDF文件。我可以在Adobe Air中打印HTMLLoader(pdf)嗎?
現在,Adobe Reader中的打印按鈕正常工作。但是,會有年幼的孩子使用該應用程序,所以我想在其上方有一個大的「打印」按鈕。
我想我可以只啓動打印作業,並給它我的HTMLLoader。這不起作用,因爲HTML加載器會對內容進行柵格化。
有什麼建議嗎?
一個答案我已經爲了解決這個問題,發現被稱爲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工具欄按鈕,這裏是你的答案:)。
我也應該注意到,這是一個亭運行的觸摸屏應用。這需要巨大的按鈕,而不是灰色的小圖標,一個更重要的,但同樣有效的原因。我希望的Adobe PDF有一個「亭」模式:)。 – Stephano 2010-03-08 06:34:27
嗨Stephano, 你是否發現如何打印html加載器的內容作爲矢量字體,即沒有柵格化內容? Thx Lipfi – 2011-01-26 19:50:35
嗯,我不確定你的意思。本示例從HTMLLoader打印PDF。 PDF可以包含矢量圖形。 – Stephano 2011-01-26 19:50:35
嗨Stephano, 太棒了。很高興我的博客文章是一些對你有用的。我很高興地看到您發佈您的解決方案在這裏幫助別人。不錯的工作! 阿德里安 – 2011-01-26 19:50:49