在 pdf PDF 中滚动的唯一内容是列表字段。如果您可以将 JScrollPane 的内容硬塞到字符串列表选项中,那就太好了。如果不是...不是那么好。
嵌入式 Flash
这意味着将您的 JScrollPanel 转换为 PDF 并将该 PDF 转换为 Flash(带有滚动条)并将该 Flash 嵌入到您的 PDF 中。呃,但它应该可以工作。
嘿!
按钮和 JavaScript
您可以将按钮的外观设置为模板(“图标”)。您可以在按钮范围内调整图像的缩放和对齐方式(垂直和水平)。如果可以在javascript中调整这种对齐方式,就可以模拟滚动条。是的!
var fld = this.getField("myButtonField");
fld.buttonAlignX += foo; // a percentage
fld.buttonAlignY -= bar; // ditto
我建议使用PushbuttonField 来构建所有这些东西,一个用于每个控件,一个用于JScrollPanel。您将面板的滚动行为设置为“从不”,并将初始图标对齐设置为合理的(我想是“顶部”)。
PushbuttonField panelButton = new PushbuttonField( writer, rect, "panelHackButton" );
panelButton.setTemplate( jpanelTemplate );
panelButton.setLayout( PushbuttonField.LAYOUT_ICON_ONLY );
panelButton.setScaleIcon( PushbuttonField.SCALE_ICON_NEVER );
panelButton.setIconVerticalAdjustment( 1f );
PdfFormField pdfFld = panelButton.getField();
writer.addAnnotation( pdfFld ); // added to the current page
PushbuttonField scrollUpButton = new PushbuttonField( writer, otherRect, "scrollUpButt" ); // he said "butt"
scrollUpButton.setLayout( PushbuttonField.LAYOUT_LABEL_ONLY );
scrollUpButton.setText( "Up" );
pdfFld = scrollupButton.getField();
pdfFld.setAdditionalActions( PdfFormField.AA_DOWN, PdfAction.javaScript( script, writer ) );
writer.addAnnotation( pdfFld );
如果你想变得非常花哨,你甚至可以使用更多的脚本和 buttonAlignX 和 buttonAlignY 在向上和向下箭头之间做比例滑块。我不认为你可以支持拖动。
丑陋的缩放
保留所有数据的视觉吸引力较小的替代方法是将滚动面板的完整大小(未剪辑)绘制到模板中。然后,您会按比例缩小该模板以适合原始对话框上的可用区域。人们可能需要放大才能看到任何东西,但随后他们可以看到一切。没有时髦的脚本魔法,只是看起来很时髦的 PDF 对话框。