当前位置: 首页 > 知识库问答 >
问题:

PDFBox如何将PDF文档安全打印设置为低分辨率

葛泳
2023-03-14

TL;博士;如何使用PDFBox生成文档真实性下的“低分辨率”PDF

我正在尝试使用Java创建PDF,并尝试在文档安全性下将printing属性的值设置为低分辨率。

我之所以这么做,是因为我正在开发的应用程序偶然发现了这个chrome bughttps://bugs.chromium.org/p/chromium/issues/detail?id=1307219我试图了解它的哪一部分设置了这样的值(当然,管理PDF的部分是一组旧的意大利面代码类)

就我从PDFBox文档中了解到的,我的目标应该可以通过使用AccessPermisi类和setCanPrintDe分级()来实现

我创建了一个使用PDFBox生成PDF的简单类,但是,无论我尝试什么,我创建的每个PDF都具有“高分辨率”。我使用的标志正确吗?谢谢!

public static void main(String[] args) throws IOException {

    try (PDDocument doc = new PDDocument()) {

        PDPage myPage = new PDPage();
        doc.addPage(myPage);


        try (PDPageContentStream cont = new PDPageContentStream(doc, myPage)) {

            cont.beginText();

            cont.setFont(PDType1Font.TIMES_ROMAN, 12);
            cont.setLeading(14.5f);

            cont.newLineAtOffset(25, 700);
            String line1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, " +
                    "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " ;
            cont.showText(line1);
            cont.newLine();
            String line2 = "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. " +
                    "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. " ;
            cont.showText(line2);
            cont.newLine();
            String line3 = "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." ;
            cont.showText(line3);
            cont.newLine();

            cont.endText();
        }

        AccessPermission permission = new AccessPermission();
        permission.setCanPrintDegraded(true);
        permission.setReadOnly();
        StandardProtectionPolicy policy = new StandardProtectionPolicy("", "", permission);
        doc.protect(policy);
        doc.save("src/main/resources/setCanPrintDegradedTrueANDreadOnly.pdf");

    }
}

共有1个答案

洪璞瑜
2023-03-14

通过@TilmanHausherr找到了解决方案(请参阅对问题的评论)。

为了在文件安全的情况下获得“低质量”

我必须对原始代码应用以下更改:

>

AccessPersion权限=new AccessPermis();permission.setCanPrint(true);permission.setCanPrint降级(false);

我加密了pdf文件

Int keyLeght=128标准保护策略=新的标准保护策略(测试", "", 权限);policy.set加密密钥长度(keyLlong);

以下是更新的代码:

import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

public class JavaPdfBoxWriteText {

    public static void main(String[] args) throws IOException {

        try (PDDocument doc = new PDDocument()) {
            int keyLength = 128;
            PDPage myPage = new PDPage();
            doc.addPage(myPage);


            try (PDPageContentStream cont = new PDPageContentStream(doc, myPage)) {

                cont.beginText();

                cont.setFont(PDType1Font.TIMES_ROMAN, 12);
                cont.setLeading(14.5f);

                cont.newLineAtOffset(25, 700);
                String line1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, " +
                        "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " ;
                cont.showText(line1);
                cont.newLine();
                String line2 = "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. " +
                        "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. " ;
                cont.showText(line2);
                cont.newLine();
                String line3 = "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." ;
                cont.showText(line3);
                cont.newLine();

                cont.endText();
            }
            AccessPermission permission = new AccessPermission();
            permission.setCanPrint(true);
            permission.setCanPrintDegraded(false);

            StandardProtectionPolicy policy = new StandardProtectionPolicy("test", "", permission);
            policy.setEncryptionKeyLength(keyLength);
            doc.protect(policy);
            doc.save("src/main/resources/testPDF.pdf");

        }
    }
}
 类似资料:
  • 我有一个PDF文件,我必须使用Java的Apache PDFBox库在PDF的每一页上打印页码。Pdf有一个包含动态内容的表格,我不知道我的内容需要在PDF上打印多少页,因为它包含一个包含动态数据的表格。 例如:-创建PDF时,文件可能有4或5页,在这种情况下,我必须在PDF页脚的每页上打印页码no。如下所示 假设内容将以PDF格式打印在4页上 第1页第1页,共4页 第2页第2页,共4页 在第3页

  • 打印复合图稿 复合图是一种单页图稿,与您在插图窗口中看到效果的一致 — 换言之,就是直观的打印作业。复合图像还可用于校样整体页面设计、验证图像分辨率以及查找照排机上可能发生的问题(如 PostScript 错误)。 1选择 “文件 ”>“打印 ”。 2从 “打印机 ”菜单中选择一种打印机。若要打印到文件而不是打印机,请选择 “Adobe PostScript® 文件 ”或 “Adobe PDF”。

  • 主要内容:分割PDF文档中的页面,示例在前一章中,我们已经看到了如何将JavaScript添加到PDF文档。 现在来学习如何将给定的PDF文档分成多个文档。 分割PDF文档中的页面 可以使用类将给定的PDF文档分割为多个PDF文档。 该类用于将给定的PDF文档分成几个其他文档。 以下是拆分现有PDF文档的步骤 第1步:加载现有的PDF文档 使用类的静态方法加载现有的PDF文档。 此方法接受一个文件对象作为参数,因为这是一个静态方法,可

  • 我正在使用PDFBOX,它的留档似乎很少,所以我来这里寻求一些帮助。我正在尝试打印我创建的pdf表单,其中字段由eclipse动态填充。我可以让它导入和打印,但是当我打印时,我设置的字段不会显示(尽管当我将其保存到HDD时会显示)。有人能告诉我打印时设置为可见的设置吗?我看到itext有类似的东西,我希望PDFBox也有。 这是我当前的代码。

  • 我想打印pdf文件的特定页面。在这个例子中,我有4页的pdf,我想打印第三页。我正在使用Apache PDFBox库。我试图删除除我要打印的页面之外的其他页面,但它现在打印除我要打印的页面之外的所有其他页面。。。有什么帮助吗? 这是我写的函数代码: 我已经在代码中添加了这一行:

  • 我目前的工作是创建机械图纸,用于发送给客户和作为施工图。当我的绘图完成后,我导出一个. pdf文件,并将其发送给客户端。 我们的客户非常喜欢黑白画,所以我试着提供他们。但是我用来画画的软件效果不好。它只有一个选项“所有颜色都是黑色”,我的画上有一些白色的“隐藏线”。当然,这些显示使用所有颜色作为黑色选项。 我找到了一个解决方案,那就是使用pdf打印机。效果很好,效果也很好。 现在我想打印这个。pd