Один ответ, который я нашел, чтобы решить эту проблему, называется Кросс-скриптовое содержимое 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 примерно так:
(источник: cetola.net )
Нажатие на эту большую фиолетовую кнопку печати аналогично нажатию на значок печати на панели инструментов PDF. Для меня разница в том, что моим пользователям, которые могут быть детьми начальной или средней школы, не придется искать глупую кнопку.
Так что до квартала далеко. Тем не менее, если вам нужно распечатать и вы не можете полагаться на эту кнопку панели инструментов Adobe, вот ваш ответ :).