1

左側の要素が右側にコピーされるようにPDFページを再インポーズするゴーストスクリプト(または他のコマンドライン)コマンドを探しています。そのようです: 貼り直しの模式図

ページのサイズは変更しないでください (各ページのトリミングとカットは異なります)。最終的なサイズを手動で指定することもできますが、元の pdf から読み取る方が適切です。

簡単にするために、入力ファイルには 1 ページしかないと仮定しましょう。

私は非常に複雑な一連のコマンドを思いつきました。

  • でCropBoxを読むpdfinfo
  • -c "[/CropBox [*new dimensions*] /PAGES pdfmark"ファイルをコピーし、クロップボックスを変更して、コマンドで左半分を短くし、右半分を拡張する
  • ファイルをコピーし、左半分が残るようにクロップボックスを変更する
  • このファイルを古いページの寸法で再処理し-g "PageDimension"-c \"<<\/Install{1 1 scale WithOfRightside 0 translate}>> setpagedevice\"
  • pdftk を使用して、2 つの新しいファイルを 1 つのページにマージします。pdftk.exe lefthalf.pdf background righthalf.pdf output combinedfile.pdf

しかし、私はこれを十分に機能させることができませんでした。また、関連する一連の手順も、関与するツールの数も好きではありません。確かに、ghostscript を使用して、すべてのステップをより少ないステップ (および元の再処理の少ないステップ) で実行できます。

4

1 に答える 1

0

元の質問を完全には反映していませんが、最終的に有用な解決策を思いつきました。

このソリューションは (独自の) Acrobat に基づいており、GhostScript ではなく、Acrobat JavaScript インターフェイスを使用します。しかし、次のスクリプトは美しく機能するため、共有することにしました。

/*
 * Acrobat PDF script
 * transpose part of left page to right side and recrop document
 */

// define cutting line, in points from left
var cuttingline = 300;

/* define offset(s)  ---  if uncertain, leave at 0
   a) of new left page border, 
   b) of transposed half of page
   
   WATCH OUT: 
   a) may expose material from original left half when negative
   b) may expose material from original right half when negative - leave "correctcrop" true to avoid this.
*/
var offsetleft = 5;
var offsettransposition = -50;
var correctcrop = true;

// cut off left page and add as much white space to right, then insert left part of page on top right
for (var p = 0; p < this.numPages; p++) {
  // add white space to media box right
  console.println("\nPage " + (p + 1));
  var aRect = this.getPageBox("Media", p);
  console.println("Original media box: " + aRect);
  aRect[2] += cuttingline + offsettransposition;
  console.println("New media box: " + aRect);
  this.setPageBoxes("Media", p, p, aRect);


  // Add copy of page as overlay, shifted to the right
  this.addWatermarkFromFile({
    cDIPath: this.path,
    nSourcePage: p,
    nStart: p,
    nEnd: p,
    nHorizAlign: app.constants.align.left,
    nVertAlign: app.constants.align.bottom,
    nHorizValue: aRect[2] - cuttingline + offsettransposition,
    nVertValue: 0
  });

  // crop left, add space to crop box right to reveal page copy
  var aRect = this.getPageBox("Crop", p);
  console.println("Original crop box: " + aRect);
  aRect[0] += cuttingline + offsetleft;
  aRect[2] += cuttingline + offsettransposition + (((correctcrop == true) && (offsettransposition < 0)) ? offsettransposition : 0);
  console.println("New crop box: " + aRect);
  this.setPageBoxes("Crop", p, p, aRect);
}

// flatten layers
this.flattenPages();

注意してください: これにより、ページ コンテンツが 2 倍になります。プリフライト プロファイルまたは Acrobat のドキュメント クリーンアップ ツールを使用して、(非表示の)ページ コンテンツを削除します。

于 2016-08-02T15:31:45.957 に答える