各位。我正在尝试创建一个表单,用于汇总用户填写的表格中有多少个名称。本质上,找到所有非空白单元格(具有特定变量名称),每次将总数加 1,然后将总数输出到只读的可填写表单的超链接字段。执行此操作的最佳方法是什么?
我已经能够弄清楚如何对整数进行基本的求和计算,但还没有弄清楚如何对非空白单元格进行求和。
代码如下:
\documentclass[letterpaper]{article}
\usepackage{hyperref}
\usepackage[left=0.25in, right=0.25in, bottom=0.5in]{geometry}
\usepackage{fontspec}
\usepackage{xcolor}
\usepackage{textcomp}
\usepackage{fancyhdr}
\usepackage{graphicx}
\usepackage{parskip}
\usepackage{eforms}
\definecolor{light-gray}{gray}{0.85}
\newcommand{\no}{\textnumero}
\newcommand{\dimrule}{\color{light-gray}\hrule}
\newcommand{\blank}[2]{
\textField[\BG{0.95 0.95 0.95}\W{0}\Q{1}]{#1}{#2}{1em}
}
\renewcommand{\arraystretch}{1.5}
\pagestyle{fancy}
\fancyhf{}
\rhead{Page \thepage}
\cfoot{}
\begin{document}
\begin{Form}
\begin{center}
\textbf{\large{}List}
\bigskip
\begin{tabular}{ll}
& Name\\
1. & \blank{listName1}{30ex}\\
2. & \blank{listName2}{30ex}\\
3. & \blank{listName3}{30ex}\\
4. & \blank{listName4}{30ex}\\
5. & \blank{listName5}{30ex}\\
6. & \blank{listName6}{30ex}\\
7. & \blank{listName7}{30ex}\\
8. & \blank{listName8}{30ex}\\
9. & \blank{listName9}{30ex}\\
10. & \blank{listName10}{30ex}\\
\end{tabular}
\bigskip
\begin{tabular}{ll}
Total Records Printed: & \TextField[
calculate={
%%%%%%%%%%%%%%%%%%%%%%
},
width=20ex,
readonly=true,
backgroundcolor={0.95 0.95 0.95},
bordercolor=
]{}\\
\end{tabular}
\end{center}
\end{Form}
\end{document}
我曾多次尝试计算“%%%%%%%%%%%%%%%%%%”但均失败。
答案1
我建议你只使用hyperref
或 包,eforms
不要将它们组合在一起。由于该hyperref
包还有其他用途,我建议使用它。下面,我将针对任一选择给出解决方案。
除此之外,我从您的代码中删除了一些对于这些示例不必要的包和定义。
要使用该hyperref
包,您需要重新定义\blank
一下宏。请注意,为了\TextField
通过 JavaScript 引用,您需要为其指定一个name
。您还需要命名进行计算的字段。
执行计算的脚本循环遍历名为 的字段listName1
并listName10
检查每个字段的值是否为空。如果是,它会将 1 添加到result
最终输入到名为 的字段的变量中totalRecords
。
\documentclass[letterpaper]{article}
\usepackage[left=0.25in, right=0.25in, bottom=0.5in]{geometry}
\usepackage{fontspec}
\usepackage{fancyhdr}
\usepackage{hyperref}
%\usepackage{eforms}
\newcommand{\blank}[2]{
\TextField[backgroundcolor={0.95 0.95 0.95},bordercolor={},width=#2,name=#1]{}
}
\pagestyle{fancy}
\fancyhf{}
\rhead{Page \thepage}
\cfoot{}
\begin{document}
\begin{Form}
\begin{center}
\textbf{\large{}List}
\bigskip
\begin{tabular}{ll}
& Name\\
1. & \blank{listName1}{30ex}\\
2. & \blank{listName2}{30ex}\\
3. & \blank{listName3}{30ex}\\
4. & \blank{listName4}{30ex}\\
5. & \blank{listName5}{30ex}\\
6. & \blank{listName6}{30ex}\\
7. & \blank{listName7}{30ex}\\
8. & \blank{listName8}{30ex}\\
9. & \blank{listName9}{30ex}\\
10. & \blank{listName10}{30ex}\\
\end{tabular}
\bigskip
\begin{tabular}{ll}
Total Records Printed: & \TextField[
name=totalRecords,
calculate={
var result = 0;
for (var i = 1; i <= 10; i++) {
if (this.getField('listName' + i).value != '') {
result++;
}
}
event.value = result;
},
width=20ex,
readonly=true,
backgroundcolor={0.95 0.95 0.95},
bordercolor={},
default=0
]{}\\
\end{tabular}
\end{center}
\end{Form}
\end{document}
如果您想坚持使用该eforms
软件包,您可以执行以下操作(执行计算的脚本与上面的相同):
\documentclass[letterpaper]{article}
\usepackage[left=0.25in, right=0.25in, bottom=0.5in]{geometry}
\usepackage{fontspec}
\usepackage{fancyhdr}
%\usepackage{hyperref}
\usepackage{eforms}
\newcommand{\blank}[2]{
\textField[\BG{0.95 0.95 0.95}\W{0}\Q{0}]{#1}{#2}{1em}
}
\pagestyle{fancy}
\fancyhf{}
\rhead{Page \thepage}
\cfoot{}
\begin{document}
\begin{Form}
\begin{center}
\textbf{\large{}List}
\bigskip
\begin{tabular}{ll}
& Name\\
1. & \blank{listName1}{30ex}\\
2. & \blank{listName2}{30ex}\\
3. & \blank{listName3}{30ex}\\
4. & \blank{listName4}{30ex}\\
5. & \blank{listName5}{30ex}\\
6. & \blank{listName6}{30ex}\\
7. & \blank{listName7}{30ex}\\
8. & \blank{listName8}{30ex}\\
9. & \blank{listName9}{30ex}\\
10. & \blank{listName10}{30ex}\\
\end{tabular}
\bigskip
\begin{tabular}{ll}
Total Records Printed: & \textField[
\BG{0.95 0.95 0.95}\W{0}\Q{0}\V{0}\Ff{\FfReadOnly}
\AA{\AACalculate{
var result = 0;
for (var i = 1; i <= 10; i++) {
if (this.getField('listName' + i).value != '') {
result++;
}
}
event.value = result;
}}
]{totalRecords}{20ex}{1em}\\
\end{tabular}
\end{center}
\end{Form}
\end{document}
最后,还有一种更加用户友好的方式来使用该eforms
包,即使用选项useui
:
\documentclass[letterpaper]{article}
\usepackage[left=0.25in, right=0.25in, bottom=0.5in]{geometry}
\usepackage{fontspec}
\usepackage{fancyhdr}
%\usepackage{hyperref}
\usepackage[useui]{eforms}
\newcommand{\blank}[2]{
\textField[\ui{bgcolor={0.95 0.95 0.95},border={invisible},align={left}}]{#1}{#2}{1em}
}
\pagestyle{fancy}
\fancyhf{}
\rhead{Page \thepage}
\cfoot{}
\begin{document}
\begin{Form}
\begin{center}
\textbf{\large{}List}
\bigskip
\begin{tabular}{ll}
& Name\\
1. & \blank{listName1}{30ex}\\
2. & \blank{listName2}{30ex}\\
3. & \blank{listName3}{30ex}\\
4. & \blank{listName4}{30ex}\\
5. & \blank{listName5}{30ex}\\
6. & \blank{listName6}{30ex}\\
7. & \blank{listName7}{30ex}\\
8. & \blank{listName8}{30ex}\\
9. & \blank{listName9}{30ex}\\
10. & \blank{listName10}{30ex}\\
\end{tabular}
\bigskip
\begin{tabular}{ll}
Total Records Printed: & \textField[\ui{
bgcolor={0.95 0.95 0.95},border={invisible},align={left},value={0},fieldflags={readonly},
calculate={
var result = 0;
for (var i = 1; i <= 10; i++) {
if (this.getField('listName' + i).value != '') {
result++;
}
}
event.value = result;
}
}]{totalRecords}{20ex}{1em}\\
\end{tabular}
\end{center}
\end{Form}
\end{document}
任何一种方法都会产生以下输出: