2

PDF 标准规定应该可以在 PDF 中设置“查看器首选项”,这允许您预设用户查看文档的方式。

是否有任何免费的命令行工具或完全开源的库(因此不受限制/许可库,如 iText)可用于执行此操作?我发现的只是 BeCyPDFMetaEdit,它是一个 Windows 工具。

4

2 回答 2

2

我认为您没有得到这个问题的答案,因为在 StackOverflow 上的常见问题解答中,这不是一个真正的问题。关于 SO 的问题应该是关于您在尝试某事时遇到的技术问题。问“你能给我一个样品吗?” 并不总是被接受。你冒着被反问的风险:“你试过什么?”

话虽这么说,以回应您的评论:“当然这一定是以前做过的吗?” : 当然有!我没有马上回答,因为我没有时间,也因为你的问题的答案很简单。我以为你会自己找到答案,没有任何问题。

PdfReader reader = new PdfReader("test.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("test_changed.pdf"));
stamper.setViewerPreferences(PdfWriter.CenterWindow | PdfWriter.FitWindow);
stamper.addViewerPreference(PdfName.PRINTSCALING, PdfName.NONE);
stamper.addViewerPreference(PdfName.NUMCOPIES, new PdfNumber(3));
stamper.close();
reader.close();

您使用 获取现有 PDF PdfReader,然后使用 将其复制到更改后的 PDF PdfStamper。在两者之间,您可以使用setViewerPreferences()方法或addViewerPreference()方法。如果您按照为这些方法提供的链接进行操作,您将大致了解可能的查看器偏好。

这是一个 iText (Java) 示例;将其更改为 iTextSharp (C#) 示例就是将一些小写字母更改为大写字母。

免责声明:我是 iText Software 的 CEO。我也是 iText 的原始开发者和“iText in Action”书籍的作者。

于 2013-04-27T09:17:51.783 回答
2

以下是使用PDF::API2 Perl 包(免费)的方法:

use PDF::API2;

$pdf = PDF::API2->open("old.pdf");

$pdf->preferences(
        -centerwindow => 1,
        -fitwindow => 1,
        -hidetoolbar => 1,
        -hidemenubar => 1,
        );

$pdf->saveas('new.pdf');
于 2013-04-27T15:39:44.957 回答