0

PNGファイルをSASにインポートしてRTF出力に含めることは可能ですか?という質問への回答 SAS ODS RTF出力で外部PNGファイルを使用する方法を提供しました。提供されたソリューションが機能するためには、画像ファイルの挿入の後にテキストが続く必要があります。画像に続くテキストがない場合でも機能させるために使用した1つの方法は、脚注の前に下の境界線がある画像の後にアンダースコアを挿入することでした。ただし、これはこのプロジェクト用に作成された他の出力に準拠していないため、基本的なフォーマットを維持する PNG をインポートする方法を探しています。

さらに、画像の表示サイズを調整できるようにしたいと考えています。現在、境界線を超えないように、作成時に画像サイズが正確であることを確認する必要がありますが、これにより、必要以上にピクセル化された画像が作成されます。イメージを作成し、RTF ファイルで十分な品質のイメージを生成するときに、サイズにある程度の柔軟性を持たせることができるように、SAS から正確に希望するサイズに強制できるようにしたいと考えています。

これは別々の質問のように思えるかもしれませんが、以下に示すように、1 つの問題の解決策が両方に対処する可能性が高いと思われます。

最小限の例を生成するためのコードを次に示します。

/* Create test data */
data test;
  drop i;
  call streaminit(1579);
  do i = 1 to 200;
    u = rand("Normal");
    output;
  end;
run;

/* Create a PNG file to bring into the RTF -- the PNG will
   actually be created outside of SAS but is included here
   for convenience */
proc sgplot data=test;
  density u / type=kernel;
run;

/* Set options for RTF output */
option nodate nonumber;
ods rtf file = "test.rtf" nogtitle nogfoot
ods escapechar='~';

/* Titles and footnotes */
title 'Title';
/* Border line at the start of the footnote section */
footnote height=2pt '~R"\brdrb\brdrs\brdrw30';
footnote2 j=l 'Footnote';

/* Import the image and output into the RTF */
ods text='~S={preimage="SGPlot1.png"}';
ods rtf close;

上記のコードは、次のようなドキュメントを生成します。

間違った出力

ボディのあの細い縦線がイメージです。ハンドルを右にドラッグすると、画像全体が表示されます。SASでイメージを作成せずに、次のコードに相当するものを作成できるようにしたいと思います:

/* Set options for RTF output */
option nodate nonumber;
ods rtf file = "test1.rtf" nogtitle nogfoot;
ods escapechar='~';

/* Titles and footnotes */
title 'Title';
/* Border line at the start of the footnote section */
footnote height=2pt '~R"\brdrb\brdrs\brdrw30';
footnote2 j=l 'Footnote';

ods graphics / height=9in width=7in;

/* Import the image and output into the RTF */
proc sgplot data=test;
  density u / type=kernel;
run;
ods rtf close;

このコードは以下を生成します。

望ましい出力

画像を拡大したことに注意してください (SAS は画像の作成時にピクセルなどを自動的に調整しますが、PNG ファイルが既に作成されているため、これは必要ありません)。また、RTF が生成されたときに画像が実際に表示され、後処理が必要ないことにも注意してください。これは可能ですか?

4

1 に答える 1

0

調査の結果、この回答には 2 つの部分があることがわかりました。width=100%次のようにスタイルに追加することで、幅を持たずに画像を表示することができます。

ods text='~S={width=100% preimage="SGPlot1.png"}';

画像のサイズを調整するのは少しハックっぽいですが、ファイルをテキストとして読み込み、rtf コントロール ワードpichgoalNpicwgoalNtwip 単位で希望の高さと幅に置き換えることで実行できます (twip は 1/1440 インチです)。 . これが私がそれをした方法です:

data edit;
  infile "test.rtf" dlm='09'x dsd lrecl=32767 missover;
  format var $200. varout $200.;
  input var $;
  varout = prxchange("s/pichgoal\d+/pichgoal12960/",-1,var);
  varout = prxchange("s/picwgoal\d+/picwgoal10080/",-1,varout);
run;

data _null_ ;
  set edit ; 
  FILE 'test1.rtf';
  PUT varout; 
run ;
于 2015-11-11T16:06:44.113 に答える