Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

generated checkboxes are invalid (removed when roundtripping through pdf2ps -> ps2pdf; fail to display in a number of PDF viewers) #153

Open
JasonGross opened this issue Sep 12, 2020 · 4 comments

Comments

@JasonGross
Copy link

I have

\documentclass{article}
\usepackage{hyperref}
\begin{document}
\begin{Form}
\fbox{\CheckBox[name=foo,checked=true]{}}
\end{Form}
\end{document}

This checkbox shows up fine in Adobe Reader, but the checkbox is unchecked in Chrome's PDF viewer, and does not show up at all in Firefox's PDF viewer nor in SumatraPDF. Worse, if I run pdf2ps foo.pdf foo.ps and then run ps2pdf foo.ps foo-ps.pdf, the resulting PDF file does not contain a checkbox. Note that pdf2ps warns with

   **** Error: Required entry /BBox not present in Form.
               Output may be incorrect.
               Output may be incorrect.
   **** Error: Stream object is missing the stream data.

Note also that when I open the original PDF in Adobe Reader, when I go to close it, Adobe Reader asks me if I want to save changes, suggesting that it's corrected some invalidity in the pdf behind the scenes. Indeed, if I do this, the resulting PDF displays checkboxes correctly in all PDF viewers, and displays the checkbox when I round-trip through a .ps file.

Here are all the generated files:
Assuming I named the above foo.tex, then:

  1. pdflatex foo.tex gives foo.log and foo.pdf
  2. Opening foo.pdf:
  • in Chrome gives: image
  • in Firefox gives: image
  • in SumatraPDF gives: image
  • in Adobe Reader gives: image
  1. Running pdf2ps foo.pdf foo.ps; tar -czf foo.ps.tar.gz foo.ps; ps2pdf foo.ps foo-ps.pdf gives foo.ps.tar.gz and foo-ps.pdf and on the command line says
$ pdf2ps foo.pdf foo.ps
pdf2ps: security risk: running with elevated privileges
The system cannot find the path specified.

   **** Error: Required entry /BBox not present in Form.
               Output may be incorrect.
               Output may be incorrect.
   **** Error: Stream object is missing the stream data.

  1. Opening foo-ps.pdf in Adobe Reader shows: image
  2. Re-opening foo.pdf in Adobe Reader, and doing File -> Save As -> foo2.pdf gives: foo2.pdf
  3. Opening foo2.pdf:
  • in Chrome gives: image
  • in Firefox gives: image
  • in SumatraPDF gives: image
  1. Running pdf2ps foo2.pdf foo2.ps; tar -czf foo2.ps.tar.gz foo2.ps; ps2pdf foo2.ps foo2-ps.pdf gives foo2.ps.tar.gz and foo2-ps.pdf
  2. Opening foo2-ps.pdf:
  • in Chrome gives: image
  • in Firefox gives: image
  • in SumatraPDF gives: image
  • in Adobe Reader gives: image

Perhaps related to #12?

@u-fischer
Copy link
Member

You can avoid the question if the pdf should be saved by setting NeedAppearance=false in the form options. Beside this, yes the checkbox is faulty. But correcting it is not done by some simple change, and so has currently the status long term. Consider to use acrotex if you need working checkboxes directly.

@JasonGross
Copy link
Author

I think you mean NeedAppearances=false, right? (I get an error on NeedAppearance.) But indeed this makes reader not ask about saving the file. Can you explain this? The manual mentions this option only in documenting the pdfa option, and does not say anything other than "Because of this, hyperref’s implementation of Forms looks ugly".

Consider to use acrotex if you need working checkboxes directly.

If I understand correctly, this amounts to using the eforms package, yes? I get exactly the same behavior with this file:

\documentclass{article}
\usepackage{hyperref}
\usepackage{eforms}
\begin{document}
\fbox{\checkBox[\V{Yes}]{foo}{\baselineskip}{\baselineskip}{Yes}}
\end{document}

so this problem seems to occur in acrotex as well as hyperref.

@JasonGross
Copy link
Author

Additional interesting note: clicking on the checkbox in Chrome does not check it, but does change the border thickness:
image

@u-fischer
Copy link
Member

The implementation in hyperref will probably not change, but there is a new implementation of checkboxes in the pdfmanagement-testphase bundle. It uses correct appearances both for the Yes and the Off state. You could try if it works better. Documentation is in l3pdffield.pdf and l3pdffield-checkbox.pdf.

\RequirePackage{pdfmanagement-testphase}
\DeclareDocumentMetadata{uncompress,pdfversion=2.0}
\documentclass[]{article}
\usepackage{hyperref}
\usepackage{l3pdffield-testphase}
\begin{document}
Test checkbox: 
\ExplSyntaxOn
\pdffield_checkbox:n{name=test,checked}
\ExplSyntaxOff
\end{document}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants