18 返信 最新の回答 日時: May 20, 2018 2:59 PM ユーザー:hbir

    acrobat のjavascript で文字列を自動挿入したい

    hbir Level 1
      acrobat のjavascriptのコーディングでの質問です。

       

      全ページの決まった箇所に文字列を挿入するスクリプトを教えてください。

      条件は以下の通りです。

      pdfは全て画像です。

       

      上から1センチ、右から1センチ

      文字のカラーは黄色

      文字は日本語

      文字サイズは20

      文字の種類も変更できるとなお良い

       

      編集モードにしたらコピペで編集

      可能ではあれば配列を用意して

      文字の挿入がしたいです。

       

      配列に入れる文字列は

      適当に、文字列A.文字列B.文字列Cとかで良いです。

      適当に配置された文字列はエクセルの置換などで組み込む予定です。

       

      現状自分でコーディングするノウハウがなく、皆様のお力をお借りしたいです。

      また、他の質問者様で同様のものがありましたらすみません。

      以上、よろしくお願い致します。

        • 1. Re: acrobat のjavascript で文字列を自動挿入したい
          ぷろなみ JapanEmployeeModerator

          アドビジャパンフォーラムをご利用いただきありがとうございます。

          内容から、アプリケーション自動化総合 コミュニティへ移動いたしました。

          • 2. Re: acrobat のjavascript で文字列を自動挿入したい
            Subi Omu Most Valuable Participant

            PDFに注釈で文字を入れるスクリプトです。文字オブジェクトではないので取扱いに注意が必要です。

            昔どこかで拾ったのを改造して使ってます。挿入位置はA4サイズを基準に、文字は20ポイントで設定しています。

            線は透明にできなかったので(線種のほうで設定するのかも)とりあえず白にしました。

             

             

            /* 注釈テキストを全ページに挿入 */
            
            var myDoc = app.activeDocs;
            
            //文字の配列を必要なだけここに入れる
            var myArray =["文字列A","文字列B","文字列C"]
            
            if(!myDoc)
                console.println("Failed to access document");
            else
                console.println("Opened Document");
            
            //注釈を追加
            for (i=0; i<this.numPages; i++) {
                pdfnum = i - 0;
                objSquare = this.addAnnot ({type: "FreeText", contents: myArray[pdfnum], strokeColor: color.white, fillColor: color.transparent, rect:[366.93,788.543,566.93,813.543], page: i});
            }
            
            //注釈フォント
            function colorComments(myDoc)
                {
                //Get a list of Comments
                var commentList = this.getAnnots();
                    if(commentList == null)
                    {
                        console.println("Failed to get Comments");
                    }
                    else
                    {
                        console.println("Found " + commentList.length + " Comments, Iterating through comments");
                    }
            
                for each(comment in commentList)
                {
                    if(comment == null)
                    {
                        console.println("Found undefined annot!");
                    }
            
                    switch(comment.type)
                    {
                        case "FreeText":
                        {
                            var spans = new Array;
                            for each(span in comment.richContents)
                            {
                            span.alignment = "right";
                            span.textColor = color.yellow;
                            span.fontFamily = ["KozGoPr6N-Medium"];
                            span.textSize = 20;
                            spans[spans.length] = span;
                            }
                            comment.richContents = spans;
                            break;
                        }
                    }
                }
            }
            
            colorComments(myDoc);
            
            1 人が役に立つと言っています
            • 3. Re: acrobat のjavascript で文字列を自動挿入したい
              monokano Most Valuable Participant

              スクリプトで追加できるのは、フォームや注釈などであって、文字オブジェクトのようなコンテンツの追加はできないと思うのですが、いかがでしょうか。

               

              目的(テキストを追加することで何をしたいのか)をお書きにならないと、代替案も得られないでしょう。

              • 4. Re: acrobat のjavascript で文字列を自動挿入したい
                Ten A Adobe Community Professional

                テキストダイレクトはダメだとおもいます。

                そこで、ウォーターマークはどうでしょう?

                 

                this.addWatermarkFromText("Confidential", 0, font.Helv, 24, color.red);
                
                1 人が役に立つと言っています
                • 5. Re: acrobat のjavascript で文字列を自動挿入したい
                  hbir Level 1

                  PDFを編集する際、テキストを追加というボタンが標準でついてましたので

                  コード上でも実現可能と勝手ながら判断し、投稿しました。

                   

                  他の投稿者様から代替案のようなものもいただいていますが

                  各ページにwatermarkのように文字を埋め込みを行いたく(各ページ毎に入る文字列は異なるので配列などで差し替えるなど)

                  入る文字列はこちらで用意している画像のタイトルのようなものです。

                   

                  画像に文字を埋め込む手段はいくらでもかんがえられそうですが、js限定となるといろいろ制約があるような印象を感じました。

                  js_api_reference.pdfと睨めっこしながら他の投稿者のコメントを見てますが

                  代替案としてwatermarkなどで配列の文字列を1ページ目、2ページ目、3ページ目と挿入は技術的に可能でしょうか。

                  • 6. Re: acrobat のjavascript で文字列を自動挿入したい
                    hbir Level 1

                    フォーラムの変更ありがとうございます。

                    他の投稿者のコメントがスキルアップに役立てそうです。

                    • 7. Re: acrobat のjavascript で文字列を自動挿入したい
                      monokano Most Valuable Participant
                      watermarkなどで配列の文字列を1ページ目、2ページ目、3ページ目と挿入は技術的に可能でしょうか。

                       

                      可能です。

                      処理の流れは、Subi Omu さんのコードを参考にすると良いでしょう。

                       

                      addWatermarkFromText のパラメーターの設定は、下記が参考になるでしょう。

                      https://acrobatusers.com/tutorials/print/watermarking-a-pdf-with-javascript

                      パラメーターは他にもたくさんあり(位置を数値で設定するnHorizValue等)、必要に応じた設定が必要です。

                      ちょっとバージョンが古いのですが日本語版PDFがあります。

                      Acrobat 8.0 SDK : JavaScript for Acrobat API Reference 日本語版

                      こちらでaddWatermarkFromText のパラメーターを参照すると良いでしょう。

                       

                      ここにスクラッチでコードを書いてもらうことは、あまり期待しないでください。

                      最善なのは、以下のやりとりです。

                      1. hbir さんがご自分でコードを書いてみる。
                      2. うまく動作しなかったら、現状のコードを示して、どこがおかしいのかを指摘してもらう。
                      • 8. Re: acrobat のjavascript で文字列を自動挿入したい
                        Ten A Adobe Community Professional

                        watermarkに関しては以下の様な構成で入れることが出来ます。

                        位置に関しては左下を原点に取りますからtopからの配置及びrightの配置ではマージンが負の数になる事に注意が必要です。

                        あとはmonokanoさんのご指摘どおりsubiさんのコードのnumPagesのループのように繰り返し処理を行えばよいでしょう。

                        スクリーンショット 2018-05-16 14.51.12.png

                        1 人が役に立つと言っています
                        • 9. Re: acrobat のjavascript で文字列を自動挿入したい
                          monokano Most Valuable Participant

                          Ten Aさん

                          cTextに日本語の文字を設定すると豆腐(.notdef)化けしませんか?

                          フォントフォールバックもしないので、cFontに日本語フォントを指定する必要があるようなのですが、どうしても化けてしまいます。

                          OS X 10.10.5

                          Acrobat DC 2018.011.20040

                           

                          //ウォーターマークを全ページに追加する
                          for (i=0; i<this.numPages; i++) {
                              this.addWatermarkFromText({
                                  cText: "あいうえお",
                                  nTextAlign:app.constants.align.right,
                                  cFont: "KozGoPr6N-Medium",
                                  nFontSize: 20,
                                  aColor: color.red,
                                  nStart: i,
                                  nHorizAlign: app.constants.align.right,
                                  nVertAlign: app.constants.align.top,
                                  nHorizValue: -28.346456693,
                                  nVertValue: -28.346456693
                              });
                          }
                          
                          1 人が役に立つと言っています
                          • 10. Re: acrobat のjavascript で文字列を自動挿入したい
                            Ten A Adobe Community Professional

                            これは…

                            サンプル見たときにUnicodeをエスケープしているようだったので同様の手段が使えるのかと思いきや、3ケタ以上のUnicodeを正常に読めない。

                            これは予めウォーターマーク用のPDFを用意しておいてaddWatermarkFromFileメソッドで読み込むしか無いかもしれませんね。

                            • 11. Re: acrobat のjavascript で文字列を自動挿入したい
                              monokano Most Valuable Participant

                              文字化けを避ける方法を見つけました。UTF-16LEにすればよさそうです。

                              「あ」はUTF-16LEで「4230」なので、「cText: "\u4230"」にすると「あ」と表示されます。

                              「あいうえお」は「cText: "\u4230\u4430\u4630\u4830\u4A30"」。

                              \uXXXXはBMP外に非対応なので、BMP内に限定するとしても、これでエスケープするしかないかも?

                              2 人が役に立つと言っています
                              • 12. Re: acrobat のjavascript で文字列を自動挿入したい
                                Ten A Adobe Community Professional

                                なるほど、リトルエンディアンのほうですか。

                                ありがとうございます。

                                • 13. Re: acrobat のjavascript で文字列を自動挿入したい
                                  hbir Level 1

                                  Subiさん、monokanoさん、Ten Aさん

                                   

                                  だれが正解とも決められず、どなたの意見も参考になりました。

                                  無事、配列を駆使しwatermarkの代替案でしたいことが実現できました。

                                   

                                  合わせて文字化け対策までみつけていただき感謝です。

                                  • 14. Re: acrobat のjavascript で文字列を自動挿入したい
                                    Subi Omu Most Valuable Participant

                                    よければ完成したスクリプトを書きこんでもらえますか?

                                    注釈以外で文字挿入できるとは思いませんでした。ぜひ参考にしたいです。

                                    • 15. Re: acrobat のjavascript で文字列を自動挿入したい
                                      hbir Level 1

                                      Subiさんへ

                                       

                                      Subiさんの注釈案もすばらしくリファレンスからどうコーディングに結び付けられるか検討する上で役立ちました。

                                      今回は、monokanoさんが貼り付けられたスクリプトの一部を改良しただけですが

                                      1. for (i=0; i<this.numPages; i++) { 
                                      2.     this.addWatermarkFromText({ 
                                      3.         cText: myArray[i], 

                                      を追加し、配列から文字列を挿入させました。

                                      自分の環境では、文字化けまで再現されなかったのでとくにエンコードなどはしてません。

                                      • 16. Re: acrobat のjavascript で文字列を自動挿入したい
                                        Subi Omu Most Valuable Participant

                                        ありがとうございます。

                                        Window7、Acrobat DCの環境で試しましたが私も文字化けしませんでした。文字化けは環境によるようですね。

                                        • 17. Re: acrobat のjavascript で文字列を自動挿入したい
                                          monokano Most Valuable Participant

                                          文字化けはMac版だけかもですね…。

                                          hbirさんはWindowsですか?

                                          • 18. Re: acrobat のjavascript で文字列を自動挿入したい
                                            hbir Level 1

                                            返信遅くなりました。

                                             

                                            Subi氏同様に、Windows7,Acrobat DC環境です。

                                            文字化けは厄介ですよね。