【问题标题】:SAS ODS PDF correct linksSAS ODS PDF 正确链接
【发布时间】:2023-03-28 16:15:01
【问题描述】:

目前我无法生成带有不错书签和目录的漂亮 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”)和子类别(例如“A 类和 B 类”)的链接,其中子类别在书签中应该在第 1 级,表标题在第 2 级。但是,“ods pdf 锚”语句似乎只查找下一个过程,而不是下一个“ods pdf 文本”语句(我更喜欢) .有什么方法可以简单地实现这一点?
  2. 单击超链接和书签对我来说完全是一团糟:有时列名会被截断(因此我必须向上滚动才能看到它们),并且表 3 和表 4 的超链接将我带到另一个目的地,然后相应的书签。
  3. 无论出于何种原因,从表 1 到其标题的距离都小于所有其他表。

这很可能是因为我对输出交付系统缺乏经验,但我现在已经为这些看似简单的问题苦苦挣扎了好几个小时。希望有人可以帮助我。

【问题讨论】:

  • 没有想法?我在这里上传了生成的 .pdf 文件:link。也许这样,我的意思就更清楚了。

标签: pdf hyperlink sas bookmarks tableofcontents


【解决方案1】:

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

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

  2. 创建了一个新的 ods 文档,并将上一个文档的所有输出移动到此处,并使用我喜欢的目录结构 - 这启用了我以前想要的书签结构。我删除了所有带有 obpage 的分页,并通过 obbnote 添加了表格标题,并通过 setlabel 添加了正确的书签命名。出于某种原因,我还必须在每个表格标题之前插入两到三个回车符。这样我的链接就没有以前那么奇怪了。

  3. 使用 ods pdf 和 proc 文档创建 pdf。在这里,我像以前一样创建了目录,但有一点变化:

而不是这个:

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 锚点 - 对我来说似乎有缺陷的语句(目录中的链接不正确)。

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

如果有人对结果感兴趣,请看这里:link

【讨论】:

    猜你喜欢
    • 2013-09-26
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多