SAS ODS PDF正确链接

时间:2016-05-30 12:33:23

标签: pdf hyperlink sas bookmarks tableofcontents

目前我无法使用体面的书签和目录生成一个不错的pdf。

理想情况下,我想要一个如下所示的pdf文档:

第1页(标题页,纵向)

第2页(目录,纵向)

第3页及以后(子类别中的所有表格,横向)

我的基本方法是:

options orientation=portrait nocenter nodate nonumber;
ods pdf file="C:\xyz.pdf" style=sasweb;
ods escapechar='^';

/* Title page */
    title;
    ods pdf text="^S={just=c} ^20n Document XYZ";
/* ---------- */

/* Table of contents */
    ods pdf startpage=now;
    title "Contents";
    ods pdf text="Classes A & B";
    ods pdf text="^S={URL='#Tab1'}   Table 1: Class A";
    ods pdf text="^S={URL='#Tab2'}   Table 2: Class B";
    ods pdf text="Classes C & D";
    ods pdf text="^S={URL='#Tab3'}   Table 3: Class C";
    ods pdf text="^S={URL='#Tab4'}   Table 4: Class D";
/* ----------------- */

ods pdf startpage=now;  /* Start new page ... */
ods pdf startpage=no;   /* ... and define no pagination */
title;
options orientation=landscape;

/* Table list */
    %macro make_table(in_data=,title=,link=);
        ods pdf anchor="&link";
        ods proclabel="&title";
        ods pdf text="^2n &title";
        proc print data=&in_data contents='' noobs;
        run;
    %mend;
    ods pdf text="Classes A & B";

    /* Table 1 */
    %make_table(in_data=sashelp.class,title=Table 1: Class A,link=Tab1);
    /* Table 2 */
    %make_table(in_data=sashelp.class,title=Table 2: Class B,link=Tab2);
    ods pdf startpage=now;
    ods pdf text="Classes C & D";
    /* Table 3 */
    %make_table(in_data=sashelp.class,title=Table 3: Class C,link=Tab3);
    /* Table 4 */
    %make_table(in_data=sashelp.class,title=Table 4: Class D,link=Tab4);
/* ---------- */
ods pdf close;

有了这些设置,我遇到了几个问题:

  1. 关于pdf书签和目录,我希望链接到表格标题(例如"表1和#34;)和子类别(例如" A类和A类; B"),书签中的子类别应为1级,表级标题为2级。但是," ods pdf anchor" -statement似乎只适用于下一个程序而不是下一个" ods pdf text" -statement(我更喜欢)。有没有办法以简单的方式实现这一目标?
  2. 点击超链接和书签对我来说是完全混乱的:有时列名被截断(因此我必须向上滚动才能看到它们),表3和表4的超链接将我带到另一个目的地然后相应的书签。
  3. 无论出于何种原因,表1与其标题之间的距离小于所有其他表格。
  4. 这很可能是因为我对输出传输系统缺乏经验,但我现在因为这些看似简单的问题而挣扎了几个小时。希望有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

经过大量的反复试验后,我终于找到了适合我的方法。我不会发布整个解决方案,因为它相对较长,但总的来说,我做了以下几点:

  1. 使用ods文档和proc将所有想要的数据集打印到其中。

  2. 创建了一个新的ods文档,并将前一个文档的所有输出移到这里,目录结构让我高兴 - 这使我以前想要的书签结构成为可能。我用obpage删除了所有的分页,并通过obbnote添加了表标题,并通过setlabel添加了正确的书签命名。出于某种原因,我还要在每个表标题之前插入两到三个回车符。这样我的链接就不像以前那么奇怪了。

  3. 使用ods pdf和proc文档创建pdf。在这里,我像以前一样创建了目录,但只做了一点改动:
  4. 而不是:

    ods pdf text="^S={URL='#Tab1'} ...
    ods pdf text="^S={URL='#Tab2'} ...
    

    我用过这个:

    ods pdf text="^S={URL='#IDX'} ...
    ods pdf text="^S={URL='#IDX1'} ...
    

    这样我就不必使用ods pdf anchor - 这句话似乎对我有害(在目录中链接不正确)。

    尽管如此,我仍然无法将子类别直接链接到标题,而只能链接到下表。但是,我很好,所以我不会再尝试了。

    如果有人对结果感兴趣,请点击此处:link