第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 PDFBox 2.x 在 PDF 上放置一個按鈕

使用 PDFBox 2.x 在 PDF 上放置一個按鈕

縹緲止盈 2021-11-17 16:56:35
我希望有人可以幫助我解決使用 PdfBox 2.x 創(chuàng)建的 PDF 上的按鈕和文本字段問題。我試圖在我的頁面上放置一個按鈕,它使用 Javascript 函數(shù)在文本字段中設(shè)置日期。這很好用。然后我嘗試將文本字段和按鈕放在一個多頁的文檔中,以便文本字段和按鈕出現(xiàn)在每個頁面上,但是這樣,頁面上的按鈕只將日期寫入文本字段按鈕所在的頁面,我點(diǎn)擊了。從那時(shí)起我收到了問題,即第一頁上的按鈕對第一頁上的文本字段作出反應(yīng),但第一頁是按鈕作出反應(yīng)的唯一頁面。然后我保存了 4 個文檔,每個文檔一頁,每個文檔都運(yùn)行良好。但是當(dāng)最后我將 4 個文檔合并為一個有 4 頁的文檔時(shí),我遇到了與以前相同的問題。有人可以告訴我,這里有什么問題嗎?
查看完整描述

1 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個贊

第二種解決方案(合并)不起作用,因?yàn)?PDFBox 無法更改 JS 代碼。我試圖重新創(chuàng)建第一個解決方案(您沒有顯示),恕我直言,一個問題是 OpenAction 中只有 1 個日期函數(shù)。你需要 JavaScript 名稱樹中的每個函數(shù)(你甚至可以在沒有所有函數(shù)的情況下工作,但我沒有測試):


public static void main(String[] args) throws IOException

{

    String dest = "SO52807807.pdf";


    Map<String, PDActionJavaScript> map = new HashMap<>();

    DecimalFormat DFMM = new DecimalFormat("00");


    try (PDDocument doc = new PDDocument())

    {

        PDDocumentNameDictionary documentNameDictionary = new PDDocumentNameDictionary(doc.getDocumentCatalog());

        PDJavascriptNameTreeNode javascriptNameTreeNode = new PDJavascriptNameTreeNode();

        documentNameDictionary.setJavascript(javascriptNameTreeNode);


        COSDictionary acroFormDict = new COSDictionary();

        acroFormDict

                .setBoolean(COSName.getPDFName("NeedAppearances"), true);

        acroFormDict.setItem(COSName.FIELDS, new COSArray());


        PDAcroForm acroForm = new PDAcroForm(doc, acroFormDict);

        doc.getDocumentCatalog().setAcroForm(acroForm);


        for (int i = 0; i < 4; i++)

        {

            PDPage page = new PDPage();

            doc.addPage(page);


            PDAnnotationAdditionalActions buttonAction1 = null;

            PDActionJavaScript javascript = null;

            PDActionJavaScript tfJs = null;


            String iStr = DFMM.format(i);


            PDFont font = PDType1Font.HELVETICA;

            PDResources resources = new PDResources();

            resources.put(COSName.getPDFName("Helv"), font);

            acroForm.setDefaultResources(resources);


            PDAppearanceStream pdAppearanceStream = new PDAppearanceStream(doc);

            pdAppearanceStream.setResources(resources);


            PDTextField textField = new PDTextField(acroForm);

            textField.setPartialName("SampleField-" + iStr);


            String defaultAppearance = "/Helv 24 Tf 0 0 0 rg";

            textField.setDefaultAppearance(defaultAppearance);


            textField.setMultiline(true);


            acroForm.getFields().add(textField);


            PDAnnotationWidget fieldwidget = textField.getWidgets().get(0);

            PDRectangle rect = new PDRectangle(50, 600, 300, 70);

            fieldwidget.setRectangle(rect);

            fieldwidget.setPage(page);


            textField.setValue("Click to get Date");


            PDAppearanceCharacteristicsDictionary fieldAppearance = new PDAppearanceCharacteristicsDictionary(

                    new COSDictionary());

            fieldAppearance.setBorderColour(new PDColor(

                    new float[]

                    {

                        0, 0, 0

                    }, PDDeviceRGB.INSTANCE));

            fieldAppearance.setBackground(new PDColor(new float[]

            {

                1, 1, 1

            },

                    PDDeviceRGB.INSTANCE));

            fieldwidget.setAppearanceCharacteristics(fieldAppearance);


            fieldwidget.setPrinted(true);


            page.getAnnotations().add(fieldwidget);


            COSDictionary cosDict1 = new COSDictionary();

            COSArray buttonRect1 = new COSArray();

            buttonRect1.add(new COSFloat(50));

            buttonRect1.add(new COSFloat(575));

            buttonRect1.add(new COSFloat(150));

            buttonRect1.add(new COSFloat(550));


            cosDict1.setItem(COSName.RECT, buttonRect1);

            cosDict1.setItem(COSName.FT, COSName.getPDFName("Btn")); // Field

            // Type

            cosDict1.setItem(COSName.TYPE, COSName.ANNOT);

            cosDict1.setItem(COSName.SUBTYPE, COSName.getPDFName("Widget"));

            cosDict1.setItem(COSName.T, new COSString("Datum anzeigen"));

            cosDict1.setItem(COSName.DA,

                    new COSString("/F0 6 Tf 0 g 1 1 1 rg "));


            PDPushButton button1 = new PDPushButton(acroForm);

            javascript = new PDActionJavaScript("function date" + iStr

                    + "() {var fld" + iStr + " = this.getField('SampleField-"

                    + iStr + "'); fld" + iStr

                    + ".value = util.printd('dd mmmm yyyy',new Date());}");


            //doc.getDocumentCatalog().setOpenAction(javascript);

            map.put("date" + iStr, javascript);


            tfJs = new PDActionJavaScript("date" + iStr + "();");

            buttonAction1 = new PDAnnotationAdditionalActions();


            buttonAction1.setU(tfJs);

            button1.getWidgets().get(0).setActions(buttonAction1);


            button1.getCOSObject().addAll(cosDict1);

            acroForm.getFields().add(button1);


            PDAnnotationWidget buttonWidget1 = button1.getWidgets().get(0);


            PDAppearanceCharacteristicsDictionary buttonFieldAppearance = new PDAppearanceCharacteristicsDictionary(

                    new COSDictionary());

            COSArray borderColorArray = new COSArray();

            borderColorArray.add(new COSFloat((float) (141f / 255f)));

            borderColorArray.add(new COSFloat((float) (179f / 255f)));

            borderColorArray.add(new COSFloat((float) (226f / 255f)));

            PDColor blue = new PDColor(borderColorArray, PDDeviceRGB.INSTANCE);

            buttonFieldAppearance.setBorderColour(blue);

            buttonFieldAppearance.setBackground(blue);

            buttonFieldAppearance.setNormalCaption("Felder l?schen");


            buttonWidget1.setAppearanceCharacteristics(buttonFieldAppearance);

            page.getAnnotations().add(buttonWidget1);


        }

        javascriptNameTreeNode.setNames(map);

        doc.getDocumentCatalog().setNames(documentNameDictionary);

        File file = new File(dest);

        file.getParentFile().mkdirs();

        doc.save(dest);

    }

}

2018 年 10 月 20 日更新:我對代碼進(jìn)行了另外兩項(xiàng)更改:1) 中的字體名稱defaultAppearance必須與默認(rèn)資源(“Helv”)中的字體名稱相同。2)必須在分配小部件之后而不是之前設(shè)置字段的值。(如果您考慮一下,這是有道理的 - 小部件是關(guān)于視覺的)。不這樣做可能意味著在使用非 Adobe 查看器進(jìn)行顯示時(shí)會出現(xiàn)問題。


更新:25.5.2019:恕我直言,代碼有點(diǎn)笨拙,因?yàn)椴槐卦O(shè)置大多數(shù)字典元素??梢栽诖舜鸢钢姓业絼?chuàng)建按鈕的更好版本。


查看完整回答
反對 回復(fù) 2021-11-17
  • 1 回答
  • 0 關(guān)注
  • 317 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號